feat: added drone

This commit is contained in:
2025-03-13 18:44:46 -04:00
parent 91dcd7d56a
commit 5e52967aaf
39 changed files with 5626 additions and 4 deletions

View File

@@ -0,0 +1,28 @@
export { matchers } from './matchers.js';
export const nodes = [
() => import('./nodes/0'),
() => import('./nodes/1'),
() => import('./nodes/2')
];
export const server_loads = [];
export const dictionary = {
"/": [2]
};
export const hooks = {
handleError: (({ error }) => { console.error(error) }),
reroute: (() => {}),
transport: {}
};
export const decoders = Object.fromEntries(Object.entries(hooks.transport).map(([k, v]) => [k, v.decode]));
export const hash = false;
export const decode = (type, value) => decoders[type](value);
export { default as root } from '../root.js';

View File

@@ -0,0 +1 @@
export const matchers = {};

View File

@@ -0,0 +1 @@
export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/layout.svelte";

View File

@@ -0,0 +1 @@
export { default as component } from "../../../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte";

View File

@@ -0,0 +1 @@
export { default as component } from "../../../../src/routes/+page.svelte";

View File

@@ -21,7 +21,7 @@ export const options = {
app: ({ head, body, assets, nonce, env }) => "<!doctype html>\n<html lang=\"en\">\n <head>\n <meta charset=\"utf-8\" />\n <link rel=\"icon\" href=\"" + assets + "/favicon.png\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n <link rel=\"stylesheet\" href=\"src/style.css\"\n " + head + "\n </head>\n <body id=\"background\" data-sveltekit-preload-data=\"hover\">\n <div class=\"background\">" + body + "</div>\n </body>\n</html>\n\n",
error: ({ status, message }) => "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<title>" + message + "</title>\n\n\t\t<style>\n\t\t\tbody {\n\t\t\t\t--bg: white;\n\t\t\t\t--fg: #222;\n\t\t\t\t--divider: #ccc;\n\t\t\t\tbackground: var(--bg);\n\t\t\t\tcolor: var(--fg);\n\t\t\t\tfont-family:\n\t\t\t\t\tsystem-ui,\n\t\t\t\t\t-apple-system,\n\t\t\t\t\tBlinkMacSystemFont,\n\t\t\t\t\t'Segoe UI',\n\t\t\t\t\tRoboto,\n\t\t\t\t\tOxygen,\n\t\t\t\t\tUbuntu,\n\t\t\t\t\tCantarell,\n\t\t\t\t\t'Open Sans',\n\t\t\t\t\t'Helvetica Neue',\n\t\t\t\t\tsans-serif;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tjustify-content: center;\n\t\t\t\theight: 100vh;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t.error {\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t\tmax-width: 32rem;\n\t\t\t\tmargin: 0 1rem;\n\t\t\t}\n\n\t\t\t.status {\n\t\t\t\tfont-weight: 200;\n\t\t\t\tfont-size: 3rem;\n\t\t\t\tline-height: 1;\n\t\t\t\tposition: relative;\n\t\t\t\ttop: -0.05rem;\n\t\t\t}\n\n\t\t\t.message {\n\t\t\t\tborder-left: 1px solid var(--divider);\n\t\t\t\tpadding: 0 0 0 1rem;\n\t\t\t\tmargin: 0 0 0 1rem;\n\t\t\t\tmin-height: 2.5rem;\n\t\t\t\tdisplay: flex;\n\t\t\t\talign-items: center;\n\t\t\t}\n\n\t\t\t.message h1 {\n\t\t\t\tfont-weight: 400;\n\t\t\t\tfont-size: 1em;\n\t\t\t\tmargin: 0;\n\t\t\t}\n\n\t\t\t@media (prefers-color-scheme: dark) {\n\t\t\t\tbody {\n\t\t\t\t\t--bg: #222;\n\t\t\t\t\t--fg: #ddd;\n\t\t\t\t\t--divider: #666;\n\t\t\t\t}\n\t\t\t}\n\t\t</style>\n\t</head>\n\t<body>\n\t\t<div class=\"error\">\n\t\t\t<span class=\"status\">" + status + "</span>\n\t\t\t<div class=\"message\">\n\t\t\t\t<h1>" + message + "</h1>\n\t\t\t</div>\n\t\t</div>\n\t</body>\n</html>\n"
},
version_hash: "km843b"
version_hash: "1d3uu3c"
};
export async function get_hooks() {

View File

@@ -0,0 +1,115 @@
{
".svelte-kit/generated/client-optimized/app.js": {
"file": "_app/immutable/entry/app.BQgSTnW6.js",
"name": "entry/app",
"src": ".svelte-kit/generated/client-optimized/app.js",
"isEntry": true,
"imports": [
"_w9TiaPO3.js",
"_Dp6gZg7-.js",
"_Zxz7OfLJ.js",
"_B3yT6szo.js"
],
"dynamicImports": [
".svelte-kit/generated/client-optimized/nodes/0.js",
".svelte-kit/generated/client-optimized/nodes/1.js",
".svelte-kit/generated/client-optimized/nodes/2.js"
]
},
".svelte-kit/generated/client-optimized/nodes/0.js": {
"file": "_app/immutable/nodes/0.pSvET1Gs.js",
"name": "nodes/0",
"src": ".svelte-kit/generated/client-optimized/nodes/0.js",
"isEntry": true,
"isDynamicEntry": true,
"imports": [
"_Zxz7OfLJ.js",
"_w9TiaPO3.js"
]
},
".svelte-kit/generated/client-optimized/nodes/1.js": {
"file": "_app/immutable/nodes/1.CHdn8i-6.js",
"name": "nodes/1",
"src": ".svelte-kit/generated/client-optimized/nodes/1.js",
"isEntry": true,
"isDynamicEntry": true,
"imports": [
"_Zxz7OfLJ.js",
"_CZFlbmy6.js",
"_w9TiaPO3.js",
"_Dp6gZg7-.js",
"_BHfX2tkW.js"
]
},
".svelte-kit/generated/client-optimized/nodes/2.js": {
"file": "_app/immutable/nodes/2.Bd-zYXpb.js",
"name": "nodes/2",
"src": ".svelte-kit/generated/client-optimized/nodes/2.js",
"isEntry": true,
"isDynamicEntry": true,
"imports": [
"_Zxz7OfLJ.js",
"_CZFlbmy6.js",
"_w9TiaPO3.js",
"_CEUsAAFn.js"
]
},
"_B3yT6szo.js": {
"file": "_app/immutable/chunks/B3yT6szo.js",
"name": "index-client",
"imports": [
"_w9TiaPO3.js"
]
},
"_BHfX2tkW.js": {
"file": "_app/immutable/chunks/BHfX2tkW.js",
"name": "entry",
"imports": [
"_w9TiaPO3.js",
"_B3yT6szo.js"
]
},
"_CEUsAAFn.js": {
"file": "_app/immutable/chunks/CEUsAAFn.js",
"name": "svelte-head",
"imports": [
"_w9TiaPO3.js"
]
},
"_CZFlbmy6.js": {
"file": "_app/immutable/chunks/CZFlbmy6.js",
"name": "legacy",
"imports": [
"_w9TiaPO3.js"
]
},
"_Dp6gZg7-.js": {
"file": "_app/immutable/chunks/Dp6gZg7-.js",
"name": "render",
"imports": [
"_w9TiaPO3.js",
"_CEUsAAFn.js",
"_Zxz7OfLJ.js"
]
},
"_Zxz7OfLJ.js": {
"file": "_app/immutable/chunks/Zxz7OfLJ.js",
"name": "disclose-version",
"imports": [
"_w9TiaPO3.js"
]
},
"_w9TiaPO3.js": {
"file": "_app/immutable/chunks/w9TiaPO3.js",
"name": "runtime"
},
"node_modules/@sveltejs/kit/src/runtime/client/entry.js": {
"file": "_app/immutable/entry/start.XpYumUTw.js",
"name": "entry/start",
"src": "node_modules/@sveltejs/kit/src/runtime/client/entry.js",
"isEntry": true,
"imports": [
"_BHfX2tkW.js"
]
}
}

View File

@@ -0,0 +1 @@
import{m as t,o,u as c,p as u}from"./w9TiaPO3.js";function l(n){throw new Error("https://svelte.dev/e/lifecycle_outside_component")}function r(n){t===null&&l(),o&&t.l!==null?a(t).m.push(n):c(()=>{const e=u(n);if(typeof e=="function")return e})}function a(n){var e=n.l;return e.u??(e.u={a:[],b:[],m:[]})}export{r as o};

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{c as _,b as o,H as f,h as a,a as c,g as d,s as i,d as s,f as r,i as u}from"./w9TiaPO3.js";let e;function g(){e=void 0}function p(h){let t=null,l=a;var n;if(a){for(t=r,e===void 0&&(e=u(document.head));e!==null&&(e.nodeType!==8||e.data!==c);)e=d(e);e===null?i(!1):e=s(d(e))}a||(n=document.head.appendChild(_()));try{o(()=>h(n),f)}finally{l&&(i(!0),e=r,s(t))}}export{p as h,g as r};

View File

@@ -0,0 +1 @@
import{e}from"./w9TiaPO3.js";e();

View File

@@ -0,0 +1 @@
import{q as C,r as R,t as A,v as H,w as M,x as I,y as b,i as P,a as Y,g as j,z as T,s as g,d as D,A as q,f as p,B,C as $,D as z,F,G,I as J,c as K,j as W,J as Q,h as E,K as U,m as X}from"./w9TiaPO3.js";import{r as Z}from"./CEUsAAFn.js";import{b as x}from"./Zxz7OfLJ.js";const rr=["touchstart","touchmove"];function er(r){return rr.includes(r)}const tr=new Set,O=new Set;function m(r){var N;var e=this,s=e.ownerDocument,c=r.type,o=((N=r.composedPath)==null?void 0:N.call(r))||[],t=o[0]||r.target,d=0,_=r.__root;if(_){var u=o.indexOf(_);if(u!==-1&&(e===document||e===window)){r.__root=e;return}var h=o.indexOf(e);if(h===-1)return;u<=h&&(d=u)}if(t=o[d]||r.target,t!==e){C(r,"currentTarget",{configurable:!0,get(){return t||s}});var w=M,i=I;R(null),A(null);try{for(var a,n=[];t!==null;){var f=t.assignedSlot||t.parentNode||t.host||null;try{var l=t["__"+c];if(l!==void 0&&!t.disabled)if(H(l)){var[V,...k]=l;V.apply(t,[r,...k])}else l.call(t,r)}catch(y){a?n.push(y):a=y}if(r.cancelBubble||f===e||f===null)break;t=f}if(a){for(let y of n)queueMicrotask(()=>{throw y});throw a}}finally{r.__root=e,delete r.currentTarget,R(w),A(i)}}}function or(r,e){var s=e==null?"":typeof e=="object"?e+"":e;s!==(r.__t??(r.__t=r.nodeValue))&&(r.__t=s,r.nodeValue=s==null?"":s+"")}function ar(r,e){return L(r,e)}function fr(r,e){b(),e.intro=e.intro??!1;const s=e.target,c=E,o=p;try{for(var t=P(s);t&&(t.nodeType!==8||t.data!==Y);)t=j(t);if(!t)throw T;g(!0),D(t),q();const d=L(r,{...e,anchor:t});if(p===null||p.nodeType!==8||p.data!==B)throw $(),T;return g(!1),d}catch(d){if(d===T)return e.recover===!1&&z(),b(),F(s),g(!1),ar(r,e);throw d}finally{g(c),D(o),Z()}}const v=new Map;function L(r,{target:e,anchor:s,props:c={},events:o,context:t,intro:d=!0}){b();var _=new Set,u=i=>{for(var a=0;a<i.length;a++){var n=i[a];if(!_.has(n)){_.add(n);var f=er(n);e.addEventListener(n,m,{passive:f});var l=v.get(n);l===void 0?(document.addEventListener(n,m,{passive:f}),v.set(n,1)):v.set(n,l+1)}}};u(G(tr)),O.add(u);var h=void 0,w=J(()=>{var i=s??e.appendChild(K());return W(()=>{if(t){Q({});var a=X;a.c=t}o&&(c.$$events=o),E&&x(i,null),h=r(i,c)||{},E&&(I.nodes_end=p),t&&U()}),()=>{var f;for(var a of _){e.removeEventListener(a,m);var n=v.get(a);--n===0?(document.removeEventListener(a,m),v.delete(a)):v.set(a,n)}O.delete(u),i!==s&&((f=i.parentNode)==null||f.removeChild(i))}});return S.set(h,w),h}let S=new WeakMap;function dr(r,e){const s=S.get(r);return s?(S.delete(r),s(e)):Promise.resolve()}export{fr as h,ar as m,or as s,dr as u};

View File

@@ -0,0 +1 @@
import{c as i,i as f,x as u,a0 as v,a1 as p,h as s,f as o,A as h,d as E}from"./w9TiaPO3.js";function T(n){var t=document.createElement("template");return t.innerHTML=n,t.content}function r(n,t){var e=u;e.nodes_start===null&&(e.nodes_start=n,e.nodes_end=t)}function w(n,t){var e=(t&v)!==0,_=(t&p)!==0,a,c=!n.startsWith("<!>");return()=>{if(s)return r(o,null),o;a===void 0&&(a=T(c?n:"<!>"+n),e||(a=f(a)));var d=_?document.importNode(a,!0):a.cloneNode(!0);if(e){var m=f(d),l=d.lastChild;r(m,l)}else r(d,d);return d}}function x(n=""){if(!s){var t=i(n+"");return r(t,t),t}var e=o;return e.nodeType!==3&&(e.before(e=i()),E(e)),r(e,e),e}function M(){if(s)return r(o,null),o;var n=document.createDocumentFragment(),t=document.createComment(""),e=i();return n.append(t,e),r(t,e),n}function N(n,t){if(s){u.nodes_end=o,h();return}n!==null&&n.before(t)}const g="5";typeof window<"u"&&(window.__svelte||(window.__svelte={v:new Set})).v.add(g);export{N as a,r as b,M as c,x as d,w as t};

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{l as o,a as r}from"../chunks/BHfX2tkW.js";export{o as load_css,r as start};

View File

@@ -0,0 +1 @@
import{c as s,a as f}from"../chunks/Zxz7OfLJ.js";import{b as i,E as p,j as c,n as d,k as m,h,f as l,l as u}from"../chunks/w9TiaPO3.js";function v(t,e,...a){var n=t,o=d,r;i(()=>{o!==(o=e())&&(r&&(m(r),r=null),r=c(()=>o(n,...a)))},p),h&&(n=l)}function E(t,e){var a=s(),n=u(a);v(n,()=>e.children),f(t,a)}export{E as component};

View File

@@ -0,0 +1 @@
import{a as b,t as k}from"../chunks/Zxz7OfLJ.js";import"../chunks/CZFlbmy6.js";import{V as x,u as i,m as $,p as y,W as l,X as v,Y as E,N as J,Z as K,J as N,l as R,_ as S,K as U,S as m,U as g,R as V}from"../chunks/w9TiaPO3.js";import{s as d}from"../chunks/Dp6gZg7-.js";import{u as W,s as X,p as s}from"../chunks/BHfX2tkW.js";function Y(n=!1){const e=$,t=e.l.u;if(!t)return;let a=()=>J(e.s);if(n){let o=0,r={};const p=K(()=>{let u=!1;const c=e.s;for(const f in c)c[f]!==r[f]&&(r[f]=c[f],u=!0);return u&&o++,o});a=()=>v(p)}t.b.length&&x(()=>{_(e,a),l(t.b)}),i(()=>{const o=y(()=>t.m.map(E));return()=>{for(const r of o)typeof r=="function"&&r()}}),t.a.length&&i(()=>{_(e,a),l(t.a)})}function _(n,e){if(n.l.s)for(const t of n.l.s)v(t);e()}const Z={get data(){return s.data},get error(){return s.error},get form(){return s.form},get params(){return s.params},get route(){return s.route},get state(){return s.state},get status(){return s.status},get url(){return s.url}};X.updated.check;const h=Z;var j=k("<h1> </h1> <p> </p>",1);function C(n,e){N(e,!1),Y();var t=j(),a=R(t),o=m(a,!0);g(a);var r=V(a,2),p=m(r,!0);g(r),S(()=>{var u;d(o,h.status),d(p,(u=h.error)==null?void 0:u.message)}),b(n,t),U()}export{C as component};

View File

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
{"version":"1741895723022"}

View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1,70 @@
{
".svelte-kit/generated/server/internal.js": {
"file": "internal.js",
"name": "internal",
"src": ".svelte-kit/generated/server/internal.js",
"isEntry": true,
"imports": [
"_internal.js"
]
},
"_equality.js": {
"file": "chunks/equality.js",
"name": "equality"
},
"_exports.js": {
"file": "chunks/exports.js",
"name": "exports",
"imports": [
"_equality.js"
]
},
"_index.js": {
"file": "chunks/index.js",
"name": "index"
},
"_internal.js": {
"file": "chunks/internal.js",
"name": "internal",
"imports": [
"_equality.js",
"_index.js"
]
},
"node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte": {
"file": "entries/fallbacks/error.svelte.js",
"name": "entries/fallbacks/error.svelte",
"src": "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte",
"isEntry": true,
"imports": [
"_index.js",
"_equality.js",
"_exports.js"
]
},
"node_modules/@sveltejs/kit/src/runtime/components/svelte-5/layout.svelte": {
"file": "entries/fallbacks/layout.svelte.js",
"name": "entries/fallbacks/layout.svelte",
"src": "node_modules/@sveltejs/kit/src/runtime/components/svelte-5/layout.svelte",
"isEntry": true
},
"node_modules/@sveltejs/kit/src/runtime/server/index.js": {
"file": "index.js",
"name": "index",
"src": "node_modules/@sveltejs/kit/src/runtime/server/index.js",
"isEntry": true,
"imports": [
"_internal.js",
"_exports.js"
]
},
"src/routes/+page.svelte": {
"file": "entries/pages/_page.svelte.js",
"name": "entries/pages/_page.svelte",
"src": "src/routes/+page.svelte",
"isEntry": true,
"imports": [
"_index.js"
]
}
}

View File

@@ -0,0 +1,27 @@
var is_array = Array.isArray;
var index_of = Array.prototype.indexOf;
var array_from = Array.from;
var define_property = Object.defineProperty;
var get_descriptor = Object.getOwnPropertyDescriptor;
const noop = () => {
};
function equals(value) {
return value === this.v;
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || a !== null && typeof a === "object" || typeof a === "function";
}
function safe_equals(value) {
return !safe_not_equal(value, this.v);
}
export {
is_array as a,
array_from as b,
safe_not_equal as c,
define_property as d,
equals as e,
get_descriptor as g,
index_of as i,
noop as n,
safe_equals as s
};

View File

@@ -0,0 +1,229 @@
import { n as noop, c as safe_not_equal } from "./equality.js";
import "clsx";
const internal = new URL("sveltekit-internal://");
function resolve(base, path) {
if (path[0] === "/" && path[1] === "/") return path;
let url = new URL(base, internal);
url = new URL(path, url);
return url.protocol === internal.protocol ? url.pathname + url.search + url.hash : url.href;
}
function normalize_path(path, trailing_slash) {
if (path === "/" || trailing_slash === "ignore") return path;
if (trailing_slash === "never") {
return path.endsWith("/") ? path.slice(0, -1) : path;
} else if (trailing_slash === "always" && !path.endsWith("/")) {
return path + "/";
}
return path;
}
function decode_pathname(pathname) {
return pathname.split("%25").map(decodeURI).join("%25");
}
function decode_params(params) {
for (const key in params) {
params[key] = decodeURIComponent(params[key]);
}
return params;
}
function make_trackable(url, callback, search_params_callback, allow_hash = false) {
const tracked = new URL(url);
Object.defineProperty(tracked, "searchParams", {
value: new Proxy(tracked.searchParams, {
get(obj, key) {
if (key === "get" || key === "getAll" || key === "has") {
return (param) => {
search_params_callback(param);
return obj[key](param);
};
}
callback();
const value = Reflect.get(obj, key);
return typeof value === "function" ? value.bind(obj) : value;
}
}),
enumerable: true,
configurable: true
});
const tracked_url_properties = ["href", "pathname", "search", "toString", "toJSON"];
if (allow_hash) tracked_url_properties.push("hash");
for (const property of tracked_url_properties) {
Object.defineProperty(tracked, property, {
get() {
callback();
return url[property];
},
enumerable: true,
configurable: true
});
}
{
tracked[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
return inspect(url, opts);
};
tracked.searchParams[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
return inspect(url.searchParams, opts);
};
}
if (!allow_hash) {
disable_hash(tracked);
}
return tracked;
}
function disable_hash(url) {
allow_nodejs_console_log(url);
Object.defineProperty(url, "hash", {
get() {
throw new Error(
"Cannot access event.url.hash. Consider using `page.url.hash` inside a component instead"
);
}
});
}
function disable_search(url) {
allow_nodejs_console_log(url);
for (const property of ["search", "searchParams"]) {
Object.defineProperty(url, property, {
get() {
throw new Error(`Cannot access url.${property} on a page with prerendering enabled`);
}
});
}
}
function allow_nodejs_console_log(url) {
{
url[Symbol.for("nodejs.util.inspect.custom")] = (depth, opts, inspect) => {
return inspect(new URL(url), opts);
};
}
}
const subscriber_queue = [];
function readable(value, start) {
return {
subscribe: writable(value, start).subscribe
};
}
function writable(value, start = noop) {
let stop = null;
const subscribers = /* @__PURE__ */ new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) {
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(
/** @type {T} */
value
));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set, update) || noop;
}
run(
/** @type {T} */
value
);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0 && stop) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
function validator(expected) {
function validate(module, file) {
if (!module) return;
for (const key in module) {
if (key[0] === "_" || expected.has(key)) continue;
const values = [...expected.values()];
const hint = hint_for_supported_files(key, file?.slice(file.lastIndexOf("."))) ?? `valid exports are ${values.join(", ")}, or anything with a '_' prefix`;
throw new Error(`Invalid export '${key}'${file ? ` in ${file}` : ""} (${hint})`);
}
}
return validate;
}
function hint_for_supported_files(key, ext = ".js") {
const supported_files = [];
if (valid_layout_exports.has(key)) {
supported_files.push(`+layout${ext}`);
}
if (valid_page_exports.has(key)) {
supported_files.push(`+page${ext}`);
}
if (valid_layout_server_exports.has(key)) {
supported_files.push(`+layout.server${ext}`);
}
if (valid_page_server_exports.has(key)) {
supported_files.push(`+page.server${ext}`);
}
if (valid_server_exports.has(key)) {
supported_files.push(`+server${ext}`);
}
if (supported_files.length > 0) {
return `'${key}' is a valid export in ${supported_files.slice(0, -1).join(", ")}${supported_files.length > 1 ? " or " : ""}${supported_files.at(-1)}`;
}
}
const valid_layout_exports = /* @__PURE__ */ new Set([
"load",
"prerender",
"csr",
"ssr",
"trailingSlash",
"config"
]);
const valid_page_exports = /* @__PURE__ */ new Set([...valid_layout_exports, "entries"]);
const valid_layout_server_exports = /* @__PURE__ */ new Set([...valid_layout_exports]);
const valid_page_server_exports = /* @__PURE__ */ new Set([...valid_layout_server_exports, "actions", "entries"]);
const valid_server_exports = /* @__PURE__ */ new Set([
"GET",
"POST",
"PATCH",
"PUT",
"DELETE",
"OPTIONS",
"HEAD",
"fallback",
"prerender",
"trailingSlash",
"config",
"entries"
]);
const validate_layout_exports = validator(valid_layout_exports);
const validate_page_exports = validator(valid_page_exports);
const validate_layout_server_exports = validator(valid_layout_server_exports);
const validate_page_server_exports = validator(valid_page_server_exports);
const validate_server_exports = validator(valid_server_exports);
export {
decode_params as a,
resolve as b,
decode_pathname as c,
disable_search as d,
validate_layout_exports as e,
validate_page_server_exports as f,
validate_page_exports as g,
validate_server_exports as h,
make_trackable as m,
normalize_path as n,
readable as r,
validate_layout_server_exports as v,
writable as w
};

View File

@@ -0,0 +1,109 @@
import "clsx";
const HYDRATION_START = "[";
const HYDRATION_END = "]";
const HYDRATION_ERROR = {};
function lifecycle_outside_component(name) {
{
throw new Error(`https://svelte.dev/e/lifecycle_outside_component`);
}
}
var current_component = null;
function getContext(key) {
const context_map = get_or_init_context_map();
const result = (
/** @type {T} */
context_map.get(key)
);
return result;
}
function setContext(key, context) {
get_or_init_context_map().set(key, context);
return context;
}
function get_or_init_context_map(name) {
if (current_component === null) {
lifecycle_outside_component();
}
return current_component.c ??= new Map(get_parent_context(current_component) || void 0);
}
function push(fn) {
current_component = { p: current_component, c: null, d: null };
}
function pop() {
var component = (
/** @type {Component} */
current_component
);
var ondestroy = component.d;
if (ondestroy) {
on_destroy.push(...ondestroy);
}
current_component = component.p;
}
function get_parent_context(component_context) {
let parent = component_context.p;
while (parent !== null) {
const context_map = parent.c;
if (context_map !== null) {
return context_map;
}
parent = parent.p;
}
return null;
}
const BLOCK_OPEN = `<!--${HYDRATION_START}-->`;
const BLOCK_CLOSE = `<!--${HYDRATION_END}-->`;
let on_destroy = [];
function render(component, options = {}) {
const payload = { out: "", css: /* @__PURE__ */ new Set(), head: { title: "", out: "" } };
const prev_on_destroy = on_destroy;
on_destroy = [];
payload.out += BLOCK_OPEN;
if (options.context) {
push();
current_component.c = options.context;
}
component(payload, options.props ?? {}, {}, {});
if (options.context) {
pop();
}
payload.out += BLOCK_CLOSE;
for (const cleanup of on_destroy) cleanup();
on_destroy = prev_on_destroy;
let head2 = payload.head.out + payload.head.title;
for (const { hash, code } of payload.css) {
head2 += `<style id="${hash}">${code}</style>`;
}
return {
head: head2,
html: payload.out,
body: payload.out
};
}
function head(payload, fn) {
const head_payload = payload.head;
head_payload.out += BLOCK_OPEN;
fn(head_payload);
head_payload.out += BLOCK_CLOSE;
}
function bind_props(props_parent, props_now) {
for (const key in props_now) {
const initial_value = props_parent[key];
const value = props_now[key];
if (initial_value === void 0 && value !== void 0 && Object.getOwnPropertyDescriptor(props_parent, key)?.set) {
props_parent[key] = value;
}
}
}
export {
HYDRATION_ERROR as H,
HYDRATION_START as a,
HYDRATION_END as b,
pop as c,
bind_props as d,
getContext as g,
head as h,
push as p,
render as r,
setContext as s
};

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,132 @@
import "clsx";
import { g as getContext, c as pop, p as push } from "../../chunks/index.js";
import { n as noop } from "../../chunks/equality.js";
import { w as writable } from "../../chunks/exports.js";
const CONTENT_REGEX = /[&<]/g;
function escape_html(value, is_attr) {
const str = String(value ?? "");
const pattern = CONTENT_REGEX;
pattern.lastIndex = 0;
let escaped = "";
let last = 0;
while (pattern.test(str)) {
const i = pattern.lastIndex - 1;
const ch = str[i];
escaped += str.substring(last, i) + (ch === "&" ? "&amp;" : ch === '"' ? "&quot;" : "&lt;");
last = i + 1;
}
return escaped + str.substring(last);
}
const SNAPSHOT_KEY = "sveltekit:snapshot";
const SCROLL_KEY = "sveltekit:scroll";
function notifiable_store(value) {
const store = writable(value);
let ready = true;
function notify() {
ready = true;
store.update((val) => val);
}
function set(new_value) {
ready = false;
store.set(new_value);
}
function subscribe(run) {
let old_value;
return store.subscribe((new_value) => {
if (old_value === void 0 || ready && new_value !== old_value) {
run(old_value = new_value);
}
});
}
return { notify, set, subscribe };
}
function create_updated_store() {
const { set, subscribe } = writable(false);
{
return {
subscribe,
// eslint-disable-next-line @typescript-eslint/require-await
check: async () => false
};
}
}
let updated;
const is_legacy = noop.toString().includes("$$") || /function \w+\(\) \{\}/.test(noop.toString());
if (is_legacy) {
({
data: {},
form: null,
error: null,
params: {},
route: { id: null },
state: {},
status: -1,
url: new URL("https://example.com")
});
updated = { current: false };
} else {
updated = new class Updated {
current = false;
}();
}
function get(key, parse = JSON.parse) {
try {
return parse(sessionStorage[key]);
} catch {
}
}
get(SCROLL_KEY) ?? {};
get(SNAPSHOT_KEY) ?? {};
const stores = {
url: /* @__PURE__ */ notifiable_store({}),
page: /* @__PURE__ */ notifiable_store({}),
navigating: /* @__PURE__ */ writable(
/** @type {import('@sveltejs/kit').Navigation | null} */
null
),
updated: /* @__PURE__ */ create_updated_store()
};
({
get current() {
return updated.current;
},
check: stores.updated.check
});
function context() {
return getContext("__request__");
}
const page$1 = {
get data() {
return context().page.data;
},
get error() {
return context().page.error;
},
get form() {
return context().page.form;
},
get params() {
return context().page.params;
},
get route() {
return context().page.route;
},
get state() {
return context().page.state;
},
get status() {
return context().page.status;
},
get url() {
return context().page.url;
}
};
const page = page$1;
function Error$1($$payload, $$props) {
push();
$$payload.out += `<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`;
pop();
}
export {
Error$1 as default
};

View File

@@ -0,0 +1,9 @@
import "clsx";
function Layout($$payload, $$props) {
let { children } = $$props;
children($$payload);
$$payload.out += `<!---->`;
}
export {
Layout as default
};

View File

File diff suppressed because one or more lines are too long

View File

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,13 @@
import { i, e, l, m, n, q, f, h, k, j } from "./chunks/internal.js";
export {
i as get_hooks,
e as options,
l as set_assets,
m as set_building,
n as set_manifest,
q as set_prerendering,
f as set_private_env,
h as set_public_env,
k as set_read_implementation,
j as set_safe_public_env
};

View File

@@ -0,0 +1,36 @@
export const manifest = (() => {
function __memo(fn) {
let value;
return () => value ??= (value = fn());
}
return {
appDir: "_app",
appPath: "_app",
assets: new Set(["favicon.png"]),
mimeTypes: {".png":"image/png"},
_: {
client: {start:"_app/immutable/entry/start.XpYumUTw.js",app:"_app/immutable/entry/app.BQgSTnW6.js",imports:["_app/immutable/entry/start.XpYumUTw.js","_app/immutable/chunks/BHfX2tkW.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/B3yT6szo.js","_app/immutable/entry/app.BQgSTnW6.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/Dp6gZg7-.js","_app/immutable/chunks/CEUsAAFn.js","_app/immutable/chunks/Zxz7OfLJ.js","_app/immutable/chunks/B3yT6szo.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
nodes: [
__memo(() => import('./nodes/0.js')),
__memo(() => import('./nodes/1.js')),
__memo(() => import('./nodes/2.js'))
],
routes: [
{
id: "/",
pattern: /^\/$/,
params: [],
page: { layouts: [0,], errors: [1,], leaf: 2 },
endpoint: null
}
],
prerendered_routes: new Set([]),
matchers: async () => {
return { };
},
server_assets: {}
}
}
})();

View File

@@ -0,0 +1,36 @@
export const manifest = (() => {
function __memo(fn) {
let value;
return () => value ??= (value = fn());
}
return {
appDir: "_app",
appPath: "_app",
assets: new Set(["favicon.png"]),
mimeTypes: {".png":"image/png"},
_: {
client: {start:"_app/immutable/entry/start.XpYumUTw.js",app:"_app/immutable/entry/app.BQgSTnW6.js",imports:["_app/immutable/entry/start.XpYumUTw.js","_app/immutable/chunks/BHfX2tkW.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/B3yT6szo.js","_app/immutable/entry/app.BQgSTnW6.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/Dp6gZg7-.js","_app/immutable/chunks/CEUsAAFn.js","_app/immutable/chunks/Zxz7OfLJ.js","_app/immutable/chunks/B3yT6szo.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
nodes: [
__memo(() => import('./nodes/0.js')),
__memo(() => import('./nodes/1.js')),
__memo(() => import('./nodes/2.js'))
],
routes: [
{
id: "/",
pattern: /^\/$/,
params: [],
page: { layouts: [0,], errors: [1,], leaf: 2 },
endpoint: null
}
],
prerendered_routes: new Set([]),
matchers: async () => {
return { };
},
server_assets: {}
}
}
})();

View File

@@ -0,0 +1,8 @@
export const index = 0;
let component_cache;
export const component = async () => component_cache ??= (await import('../entries/fallbacks/layout.svelte.js')).default;
export const imports = ["_app/immutable/nodes/0.pSvET1Gs.js","_app/immutable/chunks/Zxz7OfLJ.js","_app/immutable/chunks/w9TiaPO3.js"];
export const stylesheets = [];
export const fonts = [];

View File

@@ -0,0 +1,8 @@
export const index = 1;
let component_cache;
export const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;
export const imports = ["_app/immutable/nodes/1.CHdn8i-6.js","_app/immutable/chunks/Zxz7OfLJ.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/CZFlbmy6.js","_app/immutable/chunks/Dp6gZg7-.js","_app/immutable/chunks/CEUsAAFn.js","_app/immutable/chunks/BHfX2tkW.js","_app/immutable/chunks/B3yT6szo.js"];
export const stylesheets = [];
export const fonts = [];

View File

@@ -0,0 +1,8 @@
export const index = 2;
let component_cache;
export const component = async () => component_cache ??= (await import('../entries/pages/_page.svelte.js')).default;
export const imports = ["_app/immutable/nodes/2.Bd-zYXpb.js","_app/immutable/chunks/Zxz7OfLJ.js","_app/immutable/chunks/w9TiaPO3.js","_app/immutable/chunks/CZFlbmy6.js","_app/immutable/chunks/CEUsAAFn.js"];
export const stylesheets = [];
export const fonts = [];

BIN
src/lib/drone/graphing.jpg Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 259 KiB

BIN
src/lib/drone/top.jpg Normal file
View File

Binary file not shown.

After

Width:  |  Height:  |  Size: 389 KiB

View File

@@ -44,7 +44,33 @@
</ul>
</div>
<div class="align-left card">
<div id="UAV" class = "align-left card">
<div style="float: right; padding: 20px;">
<img src="/src/lib/drone/graphing.jpg" style="width: 10vw;" alt="Testing Input Response"/>
<p align="center">
Testing Input Response
</p>
<img src="/src/lib/drone/top.jpg" style="width: 10vw;" alt="Internal View"/>
<p align="center">
Internal View
</p>
</div>
<h1>Designed and Built a UAV</h1>
<p>
I chose to build a drone from scratch for my AP Physics final project. We were given an open ended assignment to <i>build something cool</i> and I wanted a drone. My choice was much more ambitious than the course required, and took quite a while to complete.<br/><br/>
For the drones frame I finally had an excuse to purchase a 3d printer. I modelled the frame and arms modularly to support future upgrades and replacements from damage, reducing the cost of operation. Initially I was using some 3d printed torodial propellers due to their higher efficiency and lower sounds usage. Due to safety concerns of the propellers not withstanding tension at higher RPMs and exploding I switched to arcylic propellers. A challenge in designing the frame was leaving enough room to contain the volume of the wires. I went with the Elegoo Neptune 3 as the printer was open-source and had a much better cost-to-utility than proprietary printers such as the Ender series. I am not sponsored I just really like the printer.<br/><br/>
</p>
<p>
The flight computer was the most difficult part to program. Using an ultrasonic distance sensor, gyroscope, and accelerometer the drone has enough information to probably never crash. The autopilot is implemented on an Arduino UNO using a <a href="https://en.wikipedia.org/wiki/Proportional%E2%80%93integral%E2%80%93derivative_controller">PID controller</a> for stabolization. The autopilot quality is currently impacted every time the drones mass distribution changes, which can be fixed with a reinforcement machine learning algorithm. For the higher level programming such as flight automation, video transmission and WiFi communications I used a Raspberry Pi Pico. There is also a 2.4GHz line of sight receiver for manual control. A future upgrade may contain a SIM card for near-infinite remote control connection, but drone regulations would make this difficult.<br/><br/>
The power system is the most physically challenging portion of the drone. The motors took 14.6 Volts, while the UNO microcontroller took 5 Volts, and the Pico and most sensors run at 3.3 Volts. All of the power to the motors ran through the power distribution board, which I modified to also output the lower voltages and used Bidirectional Logic Level Converters to shift between 3.3 and 5V signals where needed. A potentional flaw with having all the power coming from the same source is spikes in energy consumption to the motors may cause the microcomputers to receive too little power, which could be fixed with a capacitor. Luckily, I havn't experienced this yet as the 2C discharge rate on the 2.5Ah capacity battery is more than enough. Having a battery this big does mean it takes up about half the internal electronics volume and is half of the drones mass, but it can also maintain full throttle for half an hour making for long flights.<br/><br/>
The motors I used were a bit overkill for a 1.1kg drone, as going past 20% throttle sends it shooting through the sky -- which is not a bad issue to have. Here's the technical numbers behind that: I have propellers with a 6cm radius on motors with a 2450KV rating (2450 rpm per volt) at peaking at 14.6 Volts. From this the tip speed is computer to be 225m/s under no load at max throttle, quite a lot more than what is safe or nessecary to get into the air.
</p>
</div>
<div class="align-right card">
<h1>Work Experience</h1>
<ul>
<li>
@@ -55,12 +81,12 @@
<li>Design schedules based on many parameters include age, level, class size, siblings in adjacent classes, given availibility, and more soft requirements</li>
<li>Send swimming lesson application confirmations</li>
</ol>
<p>Implementing the reception and confirmation of lessons was striaghtforward enough with a Flask site using Stripe for payments, and Firebase service for sending confirmation emails. The difficult part was building the schedule, which is a form of the <a href="https://en.wikipedia.org/wiki/Nurse_scheduling_problem" >Nurse Scheduling Problem</a>. As there were at max a few hundred students per schedule, I solved this using a recursive algorithm and scoring system to choose the best generated option.</p>
<p>Implementing the reception and confirmation of lessons was striaghtforward enough with a Flask site using Stripe for payments, and Firebase service for sending confirmation emails. The difficult part was building the schedule, which is a form of the <a href="https://en.wikipedia.org/wiki/Nurse_scheduling_problem">NP-Hard Nurse Scheduling Problem</a>. As there were at max a few hundred students per schedule, I solved this using a recursive algorithm and scoring system to choose the best generated option.</p>
</li>
</ul>
</div>
<div class="align-right card">
<div class="align-left card">
<h1>Volunteering</h1>
<p>I volunteer within the Computer Science, Mathematics, and Statistics department at the University of Toronto as a Computer Science Ambassador to help cultivate interest in the Mathematical Sciences in high school students, as well as providing direction for first year students within the programs.</p>
</div>