@akashjs/runtime 0.1.2 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/dist/animate.cjs +2 -0
  2. package/dist/animate.cjs.map +1 -0
  3. package/dist/animate.js +2 -0
  4. package/dist/animate.js.map +1 -0
  5. package/dist/chunk-2UTALKTF.js +5 -0
  6. package/dist/chunk-2UTALKTF.js.map +1 -0
  7. package/dist/chunk-2X7GUBTG.cjs +2 -0
  8. package/dist/chunk-2X7GUBTG.cjs.map +1 -0
  9. package/dist/chunk-3HWR5MIF.js +2 -0
  10. package/dist/chunk-3HWR5MIF.js.map +1 -0
  11. package/dist/chunk-3Q7GK4DL.cjs +2 -0
  12. package/dist/chunk-3Q7GK4DL.cjs.map +1 -0
  13. package/dist/chunk-6G3EALVL.js +2 -0
  14. package/dist/chunk-6G3EALVL.js.map +1 -0
  15. package/dist/chunk-AQDP6FRO.cjs +5 -0
  16. package/dist/chunk-AQDP6FRO.cjs.map +1 -0
  17. package/dist/chunk-FB3CM2UH.cjs +2 -0
  18. package/dist/chunk-FB3CM2UH.cjs.map +1 -0
  19. package/dist/chunk-FX7RHVM5.js +2 -0
  20. package/dist/chunk-FX7RHVM5.js.map +1 -0
  21. package/dist/chunk-IH54XQBC.cjs +2 -0
  22. package/dist/chunk-IH54XQBC.cjs.map +1 -0
  23. package/dist/chunk-IXRAKXD7.js +2 -0
  24. package/dist/chunk-IXRAKXD7.js.map +1 -0
  25. package/dist/chunk-ONEN7EMK.cjs +2 -0
  26. package/dist/chunk-ONEN7EMK.cjs.map +1 -0
  27. package/dist/chunk-PGZQFMX2.cjs +32 -0
  28. package/dist/chunk-PGZQFMX2.cjs.map +1 -0
  29. package/dist/chunk-Q3E2UVUK.js +2 -0
  30. package/dist/chunk-Q3E2UVUK.js.map +1 -0
  31. package/dist/chunk-TPFWKMCK.js +2 -0
  32. package/dist/chunk-TPFWKMCK.js.map +1 -0
  33. package/dist/chunk-TXBFQLNL.js +32 -0
  34. package/dist/chunk-TXBFQLNL.js.map +1 -0
  35. package/dist/chunk-UID3D5XB.js +2 -0
  36. package/dist/chunk-UID3D5XB.js.map +1 -0
  37. package/dist/chunk-Y5HEEST4.cjs +2 -0
  38. package/dist/chunk-Y5HEEST4.cjs.map +1 -0
  39. package/dist/chunk-YZORCUDS.cjs +2 -0
  40. package/dist/chunk-YZORCUDS.cjs.map +1 -0
  41. package/dist/core.cjs +2 -0
  42. package/dist/core.cjs.map +1 -0
  43. package/dist/core.js +2 -0
  44. package/dist/core.js.map +1 -0
  45. package/dist/index.cjs +52 -5454
  46. package/dist/index.cjs.map +1 -1
  47. package/dist/index.js +52 -4575
  48. package/dist/index.js.map +1 -1
  49. package/dist/machine.cjs +2 -0
  50. package/dist/machine.cjs.map +1 -0
  51. package/dist/machine.js +2 -0
  52. package/dist/machine.js.map +1 -0
  53. package/dist/offline.cjs +2 -0
  54. package/dist/offline.cjs.map +1 -0
  55. package/dist/offline.js +2 -0
  56. package/dist/offline.js.map +1 -0
  57. package/dist/pwa.cjs +2 -0
  58. package/dist/pwa.cjs.map +1 -0
  59. package/dist/pwa.js +2 -0
  60. package/dist/pwa.js.map +1 -0
  61. package/dist/ssr.cjs +2 -0
  62. package/dist/ssr.cjs.map +1 -0
  63. package/dist/ssr.js +2 -0
  64. package/dist/ssr.js.map +1 -0
  65. package/dist/store.cjs +2 -0
  66. package/dist/store.cjs.map +1 -0
  67. package/dist/store.js +2 -0
  68. package/dist/store.js.map +1 -0
  69. package/dist/sync.cjs +2 -0
  70. package/dist/sync.cjs.map +1 -0
  71. package/dist/sync.js +2 -0
  72. package/dist/sync.js.map +1 -0
  73. package/dist/test.cjs +4 -369
  74. package/dist/test.cjs.map +1 -1
  75. package/dist/test.js +4 -165
  76. package/dist/test.js.map +1 -1
  77. package/package.json +31 -4
  78. package/dist/chunk-D3IR22HI.js +0 -662
  79. package/dist/chunk-D3IR22HI.js.map +0 -1
package/dist/index.js CHANGED
@@ -1,3017 +1,45 @@
1
- import { defineComponent, signal, onError, nodeToDOM, effect, onUnmount, computed, batch, provide } from './chunk-D3IR22HI.js';
2
- export { For, Show, akashError, batch, bindProperty, bindText, bindVisible, cloneTemplate, computed, createContext, createElement, createText, defineComponent, effect, flushSync, formatError, getAllErrorCodes, getErrorDef, inject, insert, nodeToDOM, onError, onMount, onUnmount, provide, ref, renderConditional, renderList, setProperty, signal, untrack } from './chunk-D3IR22HI.js';
3
-
4
- // src/slots.ts
5
- function renderSlot(slot, fallback) {
6
- if (slot) {
7
- const content = slot();
8
- return nodeToDOM(content);
9
- }
10
- if (fallback) {
11
- return nodeToDOM(fallback());
12
- }
13
- return document.createComment("empty slot");
14
- }
15
- function hasSlot(slot) {
16
- if (!slot) return false;
17
- const content = slot();
18
- if (content == null || content === false) return false;
19
- if (typeof content === "string" && content.trim() === "") return false;
20
- return true;
21
- }
22
- function createSlots(props, slotNames) {
23
- const slots = {};
24
- for (const name of slotNames) {
25
- const value = props[name];
26
- if (typeof value === "function") {
27
- slots[name] = value;
28
- }
29
- }
30
- return slots;
31
- }
32
-
33
- // src/error-boundary.ts
34
- var ErrorBoundary = defineComponent((ctx) => {
35
- const error = signal(null);
36
- onError((err) => {
37
- error.set(err);
38
- });
39
- function retry() {
40
- error.set(null);
41
- }
42
- return () => {
43
- const currentError = error();
44
- if (currentError) {
45
- return nodeToDOM(ctx.props.fallback(currentError, retry));
46
- }
47
- return nodeToDOM(ctx.children());
48
- };
49
- });
50
-
51
- // src/suspense.ts
52
- var currentSuspenseCtx = null;
53
- function getSuspenseContext() {
54
- return currentSuspenseCtx;
55
- }
56
- function registerPending(promise) {
57
- if (currentSuspenseCtx) {
58
- currentSuspenseCtx.addPending(promise);
59
- }
60
- }
61
- var Suspense = defineComponent((ctx) => {
62
- const resolved = signal(false);
63
- const pending = [];
64
- const suspenseCtx = {
65
- addPending(promise) {
66
- pending.push(promise);
67
- },
68
- isResolved: () => resolved()
69
- };
70
- const prevCtx = currentSuspenseCtx;
71
- currentSuspenseCtx = suspenseCtx;
72
- let childrenNode;
73
- try {
74
- childrenNode = ctx.children();
75
- } finally {
76
- currentSuspenseCtx = prevCtx;
77
- }
78
- if (pending.length > 0) {
79
- Promise.all(pending).then(() => {
80
- resolved.set(true);
81
- });
82
- } else {
83
- resolved.set(true);
84
- }
85
- return () => {
86
- const container = document.createElement("div");
87
- container.setAttribute("data-akash-suspense", "");
88
- container.style.display = "contents";
89
- if (resolved()) {
90
- container.appendChild(nodeToDOM(childrenNode));
91
- } else {
92
- container.appendChild(nodeToDOM(ctx.props.fallback()));
93
- }
94
- effect(() => {
95
- if (resolved()) {
96
- while (container.firstChild) {
97
- container.removeChild(container.firstChild);
98
- }
99
- container.appendChild(nodeToDOM(childrenNode));
100
- }
101
- });
102
- return container;
103
- };
104
- });
105
-
106
- // src/hydration.ts
107
- var isHydrating = false;
108
- var hydrateWalker = null;
109
- function isHydrationActive() {
110
- return isHydrating;
111
- }
112
- function hydrate(options) {
113
- const { container, component, props = {} } = options;
114
- isHydrating = true;
115
- hydrateWalker = document.createTreeWalker(
116
- container,
117
- NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_TEXT
118
- );
119
- try {
120
- component(props);
121
- } finally {
122
- isHydrating = false;
123
- hydrateWalker = null;
124
- }
125
- return () => {
126
- };
127
- }
128
- function claimElement(tag) {
129
- if (!isHydrating || !hydrateWalker) return null;
130
- let node = hydrateWalker.nextNode();
131
- while (node) {
132
- if (node instanceof HTMLElement && node.tagName.toLowerCase() === tag.toLowerCase()) {
133
- return node;
134
- }
135
- node = hydrateWalker.nextNode();
136
- }
137
- return null;
138
- }
139
- function claimText() {
140
- if (!isHydrating || !hydrateWalker) return null;
141
- let node = hydrateWalker.nextNode();
142
- while (node) {
143
- if (node instanceof Text) {
144
- return node;
145
- }
146
- node = hydrateWalker.nextNode();
147
- }
148
- return null;
149
- }
150
- function progressiveHydrate(options) {
151
- const { target, component, props, rootMargin = "200px" } = options;
152
- if (typeof IntersectionObserver === "undefined") {
153
- return hydrate({ container: target, component, props });
154
- }
155
- let disposed = false;
156
- const observer = new IntersectionObserver(
157
- (entries2) => {
158
- for (const entry of entries2) {
159
- if (entry.isIntersecting && !disposed) {
160
- observer.disconnect();
161
- hydrate({ container: target, component, props });
162
- }
163
- }
164
- },
165
- { rootMargin }
166
- );
167
- observer.observe(target);
168
- return () => {
169
- disposed = true;
170
- observer.disconnect();
171
- };
172
- }
173
- var HYDRATE_ATTR = "data-akash-hydrate";
174
- function findHydrationBoundaries(root = document.body) {
175
- return Array.from(root.querySelectorAll(`[${HYDRATE_ATTR}]`));
176
- }
177
-
178
- // src/ssr.ts
179
- var ESCAPE_MAP = {
180
- "&": "&",
181
- "<": "&lt;",
182
- ">": "&gt;",
183
- '"': "&quot;",
184
- "'": "&#39;"
185
- };
186
- function escapeHtml(str) {
187
- return str.replace(/[&<>"']/g, (ch) => ESCAPE_MAP[ch]);
188
- }
189
- var isSSR = false;
190
- function isServerRendering() {
191
- return isSSR;
192
- }
193
- async function renderToString(component, props) {
194
- isSSR = true;
195
- try {
196
- const node = renderComponent(component, props ?? {});
197
- return nodeToHtml(node);
198
- } finally {
199
- isSSR = false;
200
- }
201
- }
202
- function renderToStringSync(component, props) {
203
- isSSR = true;
204
- try {
205
- const node = renderComponent(component, props ?? {});
206
- return nodeToHtml(node);
207
- } finally {
208
- isSSR = false;
209
- }
210
- }
211
- function renderToStream(component, props) {
212
- return new ReadableStream({
213
- start(controller) {
214
- isSSR = true;
215
- try {
216
- const node = renderComponent(component, props ?? {});
217
- const html = nodeToHtml(node);
218
- controller.enqueue(html);
219
- controller.close();
220
- } catch (err) {
221
- controller.error(err);
222
- } finally {
223
- isSSR = false;
224
- }
225
- }
226
- });
227
- }
228
- function renderComponent(component, props) {
229
- return { type: "raw", html: `<!-- SSR placeholder for ${component.name || "component"} -->` };
230
- }
231
- function ssrElement(tag, attrs, children) {
232
- const processedAttrs = {};
233
- if (attrs) {
234
- for (const [key, value] of Object.entries(attrs)) {
235
- if (value === true) {
236
- processedAttrs[key] = "";
237
- } else if (value !== false && value != null) {
238
- processedAttrs[key] = String(value);
239
- }
240
- }
241
- }
242
- return {
243
- type: "element",
244
- tag,
245
- attrs: processedAttrs,
246
- children: children ?? []
247
- };
248
- }
249
- function ssrText(content) {
250
- return { type: "text", content };
251
- }
252
- function ssrRaw(html) {
253
- return { type: "raw", html };
254
- }
255
- var VOID_ELEMENTS = /* @__PURE__ */ new Set([
256
- "area",
257
- "base",
258
- "br",
259
- "col",
260
- "embed",
261
- "hr",
262
- "img",
263
- "input",
264
- "link",
265
- "meta",
266
- "param",
267
- "source",
268
- "track",
269
- "wbr"
270
- ]);
271
- function nodeToHtml(node) {
272
- switch (node.type) {
273
- case "text":
274
- return escapeHtml(node.content);
275
- case "raw":
276
- return node.html;
277
- case "element": {
278
- const { tag, attrs, children } = node;
279
- let html = `<${tag}`;
280
- for (const [key, value] of Object.entries(attrs)) {
281
- if (value === "") {
282
- html += ` ${key}`;
283
- } else {
284
- html += ` ${key}="${escapeHtml(value)}"`;
285
- }
286
- }
287
- if (VOID_ELEMENTS.has(tag)) {
288
- html += " />";
289
- return html;
290
- }
291
- html += ">";
292
- for (const child of children) {
293
- html += nodeToHtml(child);
294
- }
295
- html += `</${tag}>`;
296
- return html;
297
- }
298
- }
299
- }
300
- function renderNodes(nodes) {
301
- return nodes.map(nodeToHtml).join("");
302
- }
303
-
304
- // src/store.ts
305
- var storeInstances = /* @__PURE__ */ new Map();
306
- function defineStore(id, definition) {
307
- return () => {
308
- if (storeInstances.has(id)) {
309
- return storeInstances.get(id);
310
- }
311
- const initialState = definition.state();
312
- const store = createStoreInstance(id, initialState, definition);
313
- storeInstances.set(id, store);
314
- return store;
315
- };
316
- }
317
- function createStoreInstance(id, initialState, definition) {
318
- const stateSignals = {};
319
- const stateKeys = Object.keys(initialState);
320
- for (const key of stateKeys) {
321
- stateSignals[key] = signal(initialState[key]);
322
- }
323
- const getterComputeds = {};
324
- if (definition.getters) {
325
- for (const [key, getterFn] of Object.entries(definition.getters)) {
326
- getterComputeds[key] = computed(
327
- () => getterFn(stateSignals)
328
- );
329
- }
330
- }
331
- const store = { $id: id };
332
- for (const key of stateKeys) {
333
- store[key] = stateSignals[key];
334
- }
335
- for (const [key, comp] of Object.entries(getterComputeds)) {
336
- store[key] = comp;
337
- }
338
- if (definition.actions) {
339
- for (const [key, actionFn] of Object.entries(definition.actions)) {
340
- store[key] = (...args) => actionFn.apply(stateSignals, args);
341
- }
342
- }
343
- store.$reset = () => {
344
- const fresh = definition.state();
345
- for (const key of stateKeys) {
346
- stateSignals[key].set(fresh[key]);
347
- }
348
- };
349
- store.$snapshot = () => {
350
- const snapshot = {};
351
- for (const key of stateKeys) {
352
- snapshot[key] = stateSignals[key]();
353
- }
354
- return snapshot;
355
- };
356
- const subscribers = /* @__PURE__ */ new Set();
357
- store.$subscribe = (callback) => {
358
- subscribers.add(callback);
359
- return () => subscribers.delete(callback);
360
- };
361
- return store;
362
- }
363
- function clearStores() {
364
- storeInstances.clear();
365
- }
366
-
367
- // src/transition.ts
368
- function getTransitionClasses(name) {
369
- return {
370
- enterFrom: `${name}-enter-from`,
371
- enterActive: `${name}-enter-active`,
372
- enterTo: `${name}-enter-to`,
373
- exitFrom: `${name}-exit-from`,
374
- exitActive: `${name}-exit-active`,
375
- exitTo: `${name}-exit-to`
376
- };
377
- }
378
- function enterTransition(el, classes, duration) {
379
- return new Promise((resolve) => {
380
- el.classList.add(classes.enterFrom, classes.enterActive);
381
- void el.offsetHeight;
382
- el.classList.remove(classes.enterFrom);
383
- el.classList.add(classes.enterTo);
384
- const onEnd = () => {
385
- el.classList.remove(classes.enterActive, classes.enterTo);
386
- el.removeEventListener("transitionend", onEnd);
387
- resolve();
388
- };
389
- if (duration !== void 0) {
390
- setTimeout(onEnd, duration);
391
- } else {
392
- el.addEventListener("transitionend", onEnd, { once: true });
393
- setTimeout(onEnd, 5e3);
394
- }
395
- });
396
- }
397
- function exitTransition(el, classes, duration) {
398
- return new Promise((resolve) => {
399
- el.classList.add(classes.exitFrom, classes.exitActive);
400
- void el.offsetHeight;
401
- el.classList.remove(classes.exitFrom);
402
- el.classList.add(classes.exitTo);
403
- const onEnd = () => {
404
- el.classList.remove(classes.exitActive, classes.exitTo);
405
- el.removeEventListener("transitionend", onEnd);
406
- resolve();
407
- };
408
- if (duration !== void 0) {
409
- setTimeout(onEnd, duration);
410
- } else {
411
- el.addEventListener("transitionend", onEnd, { once: true });
412
- setTimeout(onEnd, 5e3);
413
- }
414
- });
415
- }
416
- var Transition = defineComponent((ctx) => {
417
- const name = ctx.props.name ?? "akash";
418
- const classes = getTransitionClasses(name);
419
- return () => {
420
- const container = document.createElement("div");
421
- container.style.display = "contents";
422
- if (ctx.props.when) {
423
- const content = nodeToDOM(ctx.children());
424
- container.appendChild(content);
425
- if (content instanceof HTMLElement) {
426
- ctx.props.onEnter?.(content);
427
- enterTransition(content, classes, ctx.props.duration).then(() => {
428
- ctx.props.onAfterEnter?.(content);
429
- });
430
- }
431
- }
432
- return container;
433
- };
434
- });
435
- function generateTransitionCSS(name, options = {}) {
436
- const {
437
- property = "all",
438
- duration = "0.3s",
439
- easing = "ease"
440
- } = options;
441
- return `
442
- .${name}-enter-active,
443
- .${name}-exit-active {
444
- transition: ${property} ${duration} ${easing};
1
+ export{a as createMachine}from'./chunk-6G3EALVL.js';export{b as generateSWScript,a as registerServiceWorker,c as subscribePush}from'./chunk-TXBFQLNL.js';import {A,y,u,x,h}from'./chunk-2UTALKTF.js';export{t as For,s as Show,b as akashError,o as bindProperty,n as bindText,p as bindVisible,l as cloneTemplate,g as createContext,j as createElement,k as createText,A as defineComponent,a as formatError,d as getAllErrorCodes,e as getCurrentScope,c as getErrorDef,i as inject,v as insert,u as nodeToDOM,y as onError,w as onMount,x as onUnmount,h as provide,z as ref,q as renderConditional,r as renderList,f as runInScope,m as setProperty}from'./chunk-2UTALKTF.js';export{b as clearStores,a as defineStore}from'./chunk-TPFWKMCK.js';export{b as isServerRendering,i as nodeToHtml,j as renderNodes,e as renderToStream,c as renderToString,d as renderToStringSync,f as ssrElement,h as ssrRaw,g as ssrText}from'./chunk-3HWR5MIF.js';export{a as LWWRegister,c as createLocalTransport,d as createSync,b as createWebSocketTransport}from'./chunk-UID3D5XB.js';export{a as createOfflineStore}from'./chunk-IXRAKXD7.js';import {c,e,d,a}from'./chunk-FX7RHVM5.js';export{a as batch,d as computed,e as effect,b as flushSync,c as signal,f as untrack}from'./chunk-FX7RHVM5.js';export{a as animate,d as animateGroup,c as animateSequence,e as animateSpring,b as animateStagger,g as defineStates,f as keyframes}from'./chunk-Q3E2UVUK.js';function Jt(e,t){if(e){let n=e();return u(n)}return t?u(t()):document.createComment("empty slot")}function Yt(e){if(!e)return false;let t=e();return !(t==null||t===false||typeof t=="string"&&t.trim()==="")}function Xt(e,t){let n={};for(let r of t){let o=e[r];typeof o=="function"&&(n[r]=o);}return n}var Zt=A(e=>{let t=c(null);y(r=>{t.set(r);});function n(){t.set(null);}return ()=>{let r=t();return r?u(e.props.fallback(r,n)):u(e.children())}});var H=null;function en(){return H}function tn(e){H&&H.addPending(e);}var nn=A(e$1=>{let t=c(false),n=[],r={addPending(s){n.push(s);},isResolved:()=>t()},o=H;H=r;let i;try{i=e$1.children();}finally{H=o;}return n.length>0?Promise.all(n).then(()=>{t.set(true);}):t.set(true),()=>{let s=document.createElement("div");return s.setAttribute("data-akash-suspense",""),s.style.display="contents",t()?s.appendChild(u(i)):s.appendChild(u(e$1.props.fallback())),e(()=>{if(t()){for(;s.firstChild;)s.removeChild(s.firstChild);s.appendChild(u(i));}}),s}});var N=false,O=null;function rn(){return N}function J(e){let{container:t,component:n,props:r={}}=e;N=true,O=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT|NodeFilter.SHOW_TEXT);try{n(r);}finally{N=false,O=null;}return ()=>{}}function on(e){if(!N||!O)return null;let t=O.nextNode();for(;t;){if(t instanceof HTMLElement&&t.tagName.toLowerCase()===e.toLowerCase())return t;t=O.nextNode();}return null}function sn(){if(!N||!O)return null;let e=O.nextNode();for(;e;){if(e instanceof Text)return e;e=O.nextNode();}return null}function an(e){let{target:t,component:n,props:r,rootMargin:o="200px"}=e;if(typeof IntersectionObserver>"u")return J({container:t,component:n,props:r});let i=false,s=new IntersectionObserver(a=>{for(let c of a)c.isIntersecting&&!i&&(s.disconnect(),J({container:t,component:n,props:r}));},{rootMargin:o});return s.observe(t),()=>{i=true,s.disconnect();}}var pe="data-akash-hydrate";function cn(e=document.body){return Array.from(e.querySelectorAll(`[${pe}]`))}function fe(e){return {enterFrom:`${e}-enter-from`,enterActive:`${e}-enter-active`,enterTo:`${e}-enter-to`,exitFrom:`${e}-exit-from`,exitActive:`${e}-exit-active`,exitTo:`${e}-exit-to`}}function me(e,t,n){return new Promise(r=>{e.classList.add(t.enterFrom,t.enterActive),e.offsetHeight,e.classList.remove(t.enterFrom),e.classList.add(t.enterTo);let o=()=>{e.classList.remove(t.enterActive,t.enterTo),e.removeEventListener("transitionend",o),r();};n!==void 0?setTimeout(o,n):(e.addEventListener("transitionend",o,{once:true}),setTimeout(o,5e3));})}function ln(e,t,n){return new Promise(r=>{e.classList.add(t.exitFrom,t.exitActive),e.offsetHeight,e.classList.remove(t.exitFrom),e.classList.add(t.exitTo);let o=()=>{e.classList.remove(t.exitActive,t.exitTo),e.removeEventListener("transitionend",o),r();};n!==void 0?setTimeout(o,n):(e.addEventListener("transitionend",o,{once:true}),setTimeout(o,5e3));})}var un=A(e=>{let t=e.props.name??"akash",n=fe(t);return ()=>{let r=document.createElement("div");if(r.style.display="contents",e.props.when){let o=u(e.children());r.appendChild(o),o instanceof HTMLElement&&(e.props.onEnter?.(o),me(o,n,e.props.duration).then(()=>{e.props.onAfterEnter?.(o);}));}return r}});function dn(e,t={}){let{property:n="all",duration:r="0.3s",easing:o="ease"}=t;return `
2
+ .${e}-enter-active,
3
+ .${e}-exit-active {
4
+ transition: ${n} ${r} ${o};
445
5
  }
446
6
 
447
- .${name}-enter-from,
448
- .${name}-exit-to {
7
+ .${e}-enter-from,
8
+ .${e}-exit-to {
449
9
  opacity: 0;
450
10
  }
451
11
 
452
- .${name}-enter-to,
453
- .${name}-exit-from {
12
+ .${e}-enter-to,
13
+ .${e}-exit-from {
454
14
  opacity: 1;
455
15
  }
456
- `.trim();
457
- }
458
-
459
- // src/head.ts
460
- var ssrHeadTags = [];
461
- function collectSSRHead() {
462
- const tags = ssrHeadTags;
463
- ssrHeadTags = [];
464
- return tags;
465
- }
466
- function renderHeadToString(configs) {
467
- let html = "";
468
- const title = configs.reduce((t, c) => c.title ?? t, "");
469
- const titleTemplate = configs.reduce((t, c) => c.titleTemplate ?? t, "");
470
- if (title) {
471
- const finalTitle = titleTemplate ? titleTemplate.replace("%s", title) : title;
472
- html += `<title>${finalTitle}</title>
473
- `;
474
- }
475
- for (const config of configs) {
476
- for (const meta of config.meta ?? []) {
477
- html += " <meta";
478
- if (meta.name) html += ` name="${meta.name}"`;
479
- if (meta.property) html += ` property="${meta.property}"`;
480
- if (meta.httpEquiv) html += ` http-equiv="${meta.httpEquiv}"`;
481
- html += ` content="${meta.content}"`;
482
- html += " />\n";
483
- }
484
- }
485
- for (const config of configs) {
486
- for (const link of config.link ?? []) {
487
- html += ` <link rel="${link.rel}" href="${link.href}"`;
488
- if (link.type) html += ` type="${link.type}"`;
489
- html += " />\n";
490
- }
491
- }
492
- return html;
493
- }
494
- var MANAGED_ATTR = "data-akash-head";
495
- function useHead(config) {
496
- const getConfig = typeof config === "function" ? config : () => config;
497
- if (typeof document === "undefined") {
498
- ssrHeadTags.push(getConfig());
499
- return;
500
- }
501
- const managedElements = [];
502
- const dispose = effect(() => {
503
- const cfg = getConfig();
504
- for (const el of managedElements) {
505
- el.remove();
506
- }
507
- managedElements.length = 0;
508
- if (cfg.title) {
509
- const title = cfg.titleTemplate ? cfg.titleTemplate.replace("%s", cfg.title) : cfg.title;
510
- document.title = title;
511
- }
512
- for (const meta of cfg.meta ?? []) {
513
- const el = document.createElement("meta");
514
- el.setAttribute(MANAGED_ATTR, "");
515
- if (meta.name) el.setAttribute("name", meta.name);
516
- if (meta.property) el.setAttribute("property", meta.property);
517
- if (meta.httpEquiv) el.setAttribute("http-equiv", meta.httpEquiv);
518
- el.setAttribute("content", meta.content);
519
- document.head.appendChild(el);
520
- managedElements.push(el);
521
- }
522
- for (const link of cfg.link ?? []) {
523
- const el = document.createElement("link");
524
- el.setAttribute(MANAGED_ATTR, "");
525
- el.setAttribute("rel", link.rel);
526
- el.setAttribute("href", link.href);
527
- if (link.type) el.setAttribute("type", link.type);
528
- document.head.appendChild(el);
529
- managedElements.push(el);
530
- }
531
- for (const script of cfg.script ?? []) {
532
- const el = document.createElement("script");
533
- el.setAttribute(MANAGED_ATTR, "");
534
- if (script.src) el.setAttribute("src", script.src);
535
- if (script.type) el.setAttribute("type", script.type);
536
- if (script.async) el.setAttribute("async", "");
537
- if (script.defer) el.setAttribute("defer", "");
538
- if (script.innerHTML) el.textContent = script.innerHTML;
539
- document.head.appendChild(el);
540
- managedElements.push(el);
541
- }
542
- if (cfg.htmlAttrs) {
543
- for (const [key, value] of Object.entries(cfg.htmlAttrs)) {
544
- document.documentElement.setAttribute(key, value);
545
- }
546
- }
547
- if (cfg.bodyAttrs) {
548
- for (const [key, value] of Object.entries(cfg.bodyAttrs)) {
549
- document.body.setAttribute(key, value);
550
- }
551
- }
552
- });
553
- try {
554
- onUnmount(() => {
555
- dispose();
556
- for (const el of managedElements) {
557
- el.remove();
558
- }
559
- });
560
- } catch {
561
- }
562
- }
563
-
564
- // src/plugin.ts
565
- function definePlugin(plugin) {
566
- return plugin;
567
- }
568
- function createApp(rootComponent, rootProps) {
569
- const plugins = [];
570
- const errorHandlers = [];
571
- const beforeMountHooks = [];
572
- const appConfig = {};
573
- let mountedNode = null;
574
- let containerEl = null;
575
- const pluginCtx = {
576
- provide(key, value) {
577
- provide(key, value);
578
- },
579
- onError(handler) {
580
- errorHandlers.push(handler);
581
- },
582
- onBeforeMount(hook) {
583
- beforeMountHooks.push(hook);
584
- },
585
- config: appConfig
586
- };
587
- const app = {
588
- use(plugin) {
589
- plugins.push(plugin);
590
- return app;
591
- },
592
- config(key, value) {
593
- appConfig[key] = value;
594
- return app;
595
- },
596
- mount(selector) {
597
- containerEl = typeof selector === "string" ? document.querySelector(selector) : selector;
598
- if (!containerEl) {
599
- throw new Error(
600
- `[AkashJS] Mount target not found: ${selector}`
601
- );
602
- }
603
- for (const plugin of plugins) {
604
- plugin.setup(pluginCtx);
605
- }
606
- for (const hook of beforeMountHooks) {
607
- hook();
608
- }
609
- try {
610
- mountedNode = rootComponent(rootProps ?? {});
611
- containerEl.appendChild(mountedNode);
612
- } catch (err) {
613
- const e = err instanceof Error ? err : new Error(String(err));
614
- if (errorHandlers.length > 0) {
615
- for (const handler of errorHandlers) {
616
- handler(e);
617
- }
618
- } else {
619
- throw e;
620
- }
621
- }
622
- },
623
- unmount() {
624
- if (mountedNode && containerEl) {
625
- containerEl.removeChild(mountedNode);
626
- mountedNode = null;
627
- }
628
- }
629
- };
630
- return app;
631
- }
632
-
633
- // src/composables.ts
634
- function useInterval(ms, options) {
635
- const count = signal(0);
636
- const isActive = signal(options?.immediate !== false);
637
- let timer = null;
638
- function start() {
639
- stop();
640
- timer = setInterval(() => count.update((c) => c + 1), ms);
641
- }
642
- function stop() {
643
- if (timer) {
644
- clearInterval(timer);
645
- timer = null;
646
- }
647
- }
648
- if (isActive()) start();
649
- return {
650
- count: (() => count()),
651
- isActive: (() => isActive()),
652
- pause() {
653
- isActive.set(false);
654
- stop();
655
- },
656
- resume() {
657
- isActive.set(true);
658
- start();
659
- },
660
- reset() {
661
- count.set(0);
662
- },
663
- dispose() {
664
- stop();
665
- }
666
- };
667
- }
668
- function useTimeout(ms) {
669
- const ready = signal(false);
670
- let timer = null;
671
- function start() {
672
- stop();
673
- ready.set(false);
674
- timer = setTimeout(() => ready.set(true), ms);
675
- }
676
- function stop() {
677
- if (timer) {
678
- clearTimeout(timer);
679
- timer = null;
680
- }
681
- }
682
- start();
683
- return {
684
- ready: (() => ready()),
685
- restart() {
686
- start();
687
- },
688
- dispose() {
689
- stop();
690
- }
691
- };
692
- }
693
- function useDebounce(source, delay) {
694
- const debounced = signal(source());
695
- let timer = null;
696
- effect(() => {
697
- const value = source();
698
- if (timer) clearTimeout(timer);
699
- timer = setTimeout(() => debounced.set(value), delay);
700
- });
701
- return (() => debounced());
702
- }
703
- function useThrottle(source, interval) {
704
- const throttled = signal(source());
705
- let lastUpdate = 0;
706
- let timer = null;
707
- effect(() => {
708
- const value = source();
709
- const now = Date.now();
710
- const elapsed = now - lastUpdate;
711
- if (elapsed >= interval) {
712
- throttled.set(value);
713
- lastUpdate = now;
714
- } else {
715
- if (timer) clearTimeout(timer);
716
- timer = setTimeout(() => {
717
- throttled.set(value);
718
- lastUpdate = Date.now();
719
- }, interval - elapsed);
720
- }
721
- });
722
- return (() => throttled());
723
- }
724
- function useCounter(initial = 0) {
725
- const count = signal(initial);
726
- return {
727
- count: (() => count()),
728
- inc(delta = 1) {
729
- count.update((c) => c + delta);
730
- },
731
- dec(delta = 1) {
732
- count.update((c) => c - delta);
733
- },
734
- set(value) {
735
- count.set(value);
736
- },
737
- reset() {
738
- count.set(initial);
739
- }
740
- };
741
- }
742
- function useToggle(initial = false) {
743
- const value = signal(initial);
744
- return {
745
- value: (() => value()),
746
- toggle() {
747
- value.update((v) => !v);
748
- },
749
- setTrue() {
750
- value.set(true);
751
- },
752
- setFalse() {
753
- value.set(false);
754
- }
755
- };
756
- }
757
- function usePrevious(source) {
758
- let lastValue;
759
- const tracked = signal(void 0);
760
- effect(() => {
761
- const current = source();
762
- tracked.set(lastValue);
763
- lastValue = current;
764
- });
765
- return (() => tracked());
766
- }
767
-
768
- // src/browser.ts
769
- function useMediaQuery(query) {
770
- if (typeof window === "undefined") {
771
- return (() => false);
772
- }
773
- const mql = window.matchMedia(query);
774
- const matches = signal(mql.matches);
775
- const handler = (e) => matches.set(e.matches);
776
- mql.addEventListener("change", handler);
777
- return (() => matches());
778
- }
779
- var DEFAULT_BREAKPOINTS = {
780
- sm: 640,
781
- md: 768,
782
- lg: 1024,
783
- xl: 1280,
784
- "2xl": 1536
785
- };
786
- function useBreakpoint(breakpoints = DEFAULT_BREAKPOINTS) {
787
- const sorted = Object.entries(breakpoints).sort((a, b) => a[1] - b[1]);
788
- const width = signal(typeof window !== "undefined" ? window.innerWidth : 1024);
789
- if (typeof window !== "undefined") {
790
- const handler = () => width.set(window.innerWidth);
791
- window.addEventListener("resize", handler, { passive: true });
792
- }
793
- function current() {
794
- const w = width();
795
- let result = "";
796
- for (const [name, min] of sorted) {
797
- if (w >= min) result = name;
798
- }
799
- return result || sorted[0]?.[0] || "";
800
- }
801
- function gte(name) {
802
- const bp = breakpoints[name];
803
- return bp !== void 0 && width() >= bp;
804
- }
805
- function lt(name) {
806
- const bp = breakpoints[name];
807
- return bp !== void 0 && width() < bp;
808
- }
809
- return { current, gte, lt, width: (() => width()) };
810
- }
811
- function useStorage(key, initialValue, storage = "local") {
812
- const store = typeof window !== "undefined" ? storage === "local" ? localStorage : sessionStorage : null;
813
- let startValue = initialValue;
814
- if (store) {
815
- try {
816
- const raw = store.getItem(key);
817
- if (raw !== null) startValue = JSON.parse(raw);
818
- } catch {
819
- }
820
- }
821
- const state = signal(startValue);
822
- if (store) {
823
- effect(() => {
824
- const value = state();
825
- try {
826
- store.setItem(key, JSON.stringify(value));
827
- } catch {
828
- }
829
- });
830
- if (typeof window !== "undefined") {
831
- window.addEventListener("storage", (e) => {
832
- if (e.key === key && e.newValue !== null) {
833
- try {
834
- state.set(JSON.parse(e.newValue));
835
- } catch {
836
- }
837
- }
838
- });
839
- }
840
- }
841
- return state;
842
- }
843
- function useClipboard(options) {
844
- const text = signal("");
845
- const copied = signal(false);
846
- const timeout = options?.timeout ?? 2e3;
847
- let timer = null;
848
- async function copy(value) {
849
- if (typeof navigator === "undefined" || !navigator.clipboard) return;
850
- await navigator.clipboard.writeText(value);
851
- text.set(value);
852
- copied.set(true);
853
- if (timer) clearTimeout(timer);
854
- timer = setTimeout(() => copied.set(false), timeout);
855
- }
856
- return {
857
- text: (() => text()),
858
- copied: (() => copied()),
859
- copy
860
- };
861
- }
862
- function useOnline() {
863
- if (typeof window === "undefined") {
864
- return (() => true);
865
- }
866
- const online = signal(navigator.onLine);
867
- window.addEventListener("online", () => online.set(true));
868
- window.addEventListener("offline", () => online.set(false));
869
- return (() => online());
870
- }
871
- function useGeolocation(options) {
872
- const state = signal({
873
- latitude: null,
874
- longitude: null,
875
- accuracy: null,
876
- error: null,
877
- loading: true
878
- });
879
- if (typeof navigator !== "undefined" && navigator.geolocation) {
880
- navigator.geolocation.watchPosition(
881
- (pos) => {
882
- state.set({
883
- latitude: pos.coords.latitude,
884
- longitude: pos.coords.longitude,
885
- accuracy: pos.coords.accuracy,
886
- error: null,
887
- loading: false
888
- });
889
- },
890
- (err) => {
891
- state.set({
892
- latitude: null,
893
- longitude: null,
894
- accuracy: null,
895
- error: err,
896
- loading: false
897
- });
898
- },
899
- options
900
- );
901
- } else {
902
- state.set({ ...state(), loading: false });
903
- }
904
- return (() => state());
905
- }
906
- function useWindowSize() {
907
- const width = signal(typeof window !== "undefined" ? window.innerWidth : 0);
908
- const height = signal(typeof window !== "undefined" ? window.innerHeight : 0);
909
- if (typeof window !== "undefined") {
910
- window.addEventListener("resize", () => {
911
- width.set(window.innerWidth);
912
- height.set(window.innerHeight);
913
- }, { passive: true });
914
- }
915
- return {
916
- width: (() => width()),
917
- height: (() => height())
918
- };
919
- }
920
- function useClickOutside(target, handler, options = {}) {
921
- if (typeof document === "undefined") return () => {
922
- };
923
- const {
924
- events = ["pointerdown"],
925
- ignore = [],
926
- active = true
927
- } = options;
928
- let isActive = active;
929
- function getTarget() {
930
- return typeof target === "function" ? target() : target;
931
- }
932
- function shouldIgnore(event) {
933
- const eventTarget = event.target;
934
- if (!eventTarget) return false;
935
- for (const pattern of ignore) {
936
- if (typeof pattern === "string") {
937
- if (eventTarget.closest(pattern)) return true;
938
- } else {
939
- if (pattern === eventTarget || pattern.contains(eventTarget)) return true;
940
- }
941
- }
942
- return false;
943
- }
944
- function listener(event) {
945
- if (!isActive) return;
946
- const el = getTarget();
947
- if (!el) return;
948
- const eventTarget = event.target;
949
- if (el === eventTarget || el.contains(eventTarget)) return;
950
- if (shouldIgnore(event)) return;
951
- handler(event);
952
- }
953
- for (const eventName of events) {
954
- document.addEventListener(eventName, listener, { passive: true, capture: true });
955
- }
956
- const dispose = () => {
957
- for (const eventName of events) {
958
- document.removeEventListener(eventName, listener, { capture: true });
959
- }
960
- };
961
- dispose.enable = () => {
962
- isActive = true;
963
- };
964
- dispose.disable = () => {
965
- isActive = false;
966
- };
967
- return dispose;
968
- }
969
-
970
- // src/portal.ts
971
- var Portal = defineComponent((ctx) => {
972
- let container = null;
973
- let mountedNode = null;
974
- function getTarget() {
975
- const target = ctx.props.target;
976
- if (!target) return document.body;
977
- if (typeof target === "string") {
978
- return document.querySelector(target) ?? document.body;
979
- }
980
- return target;
981
- }
982
- onUnmount(() => {
983
- if (mountedNode && container) {
984
- container.removeChild(mountedNode);
985
- }
986
- });
987
- return () => {
988
- container = getTarget();
989
- const content = ctx.children();
990
- mountedNode = nodeToDOM(content);
991
- container.appendChild(mountedNode);
992
- return document.createComment("portal");
993
- };
994
- });
995
-
996
- // src/toast.ts
997
- var idCounter = 0;
998
- function createToaster(options = {}) {
999
- const {
1000
- maxVisible = 5,
1001
- defaultDuration = 3e3,
1002
- position = "top-right"
1003
- } = options;
1004
- const toasts = signal([]);
1005
- const timers = /* @__PURE__ */ new Map();
1006
- function add(type, message, opts) {
1007
- const id = `toast-${++idCounter}`;
1008
- const duration = opts?.duration ?? defaultDuration;
1009
- const dismissible = opts?.dismissible ?? true;
1010
- const toast = {
1011
- id,
1012
- type,
1013
- message,
1014
- duration,
1015
- dismissible,
1016
- createdAt: Date.now()
1017
- };
1018
- toasts.update((list) => {
1019
- const next = [...list, toast];
1020
- if (next.length > maxVisible) {
1021
- const removed = next.shift();
1022
- clearTimer(removed.id);
1023
- }
1024
- return next;
1025
- });
1026
- if (duration > 0) {
1027
- const timer = setTimeout(() => dismiss(id), duration);
1028
- timers.set(id, timer);
1029
- }
1030
- return id;
1031
- }
1032
- function dismiss(id) {
1033
- clearTimer(id);
1034
- toasts.update((list) => list.filter((t) => t.id !== id));
1035
- }
1036
- function dismissAll() {
1037
- for (const [id] of timers) {
1038
- clearTimer(id);
1039
- }
1040
- toasts.set([]);
1041
- }
1042
- function clearTimer(id) {
1043
- const timer = timers.get(id);
1044
- if (timer) {
1045
- clearTimeout(timer);
1046
- timers.delete(id);
1047
- }
1048
- }
1049
- return {
1050
- toasts: (() => toasts()),
1051
- position,
1052
- success: (msg, opts) => add("success", msg, opts),
1053
- error: (msg, opts) => add("error", msg, opts),
1054
- info: (msg, opts) => add("info", msg, opts),
1055
- warning: (msg, opts) => add("warning", msg, opts),
1056
- add,
1057
- dismiss,
1058
- dismissAll
1059
- };
1060
- }
1061
-
1062
- // src/theme.ts
1063
- function useTheme(config = {}) {
1064
- const {
1065
- themes = {
1066
- light: {},
1067
- dark: {}
1068
- },
1069
- storageKey = "akash-theme",
1070
- attribute = "data-theme",
1071
- syncSystem = true
1072
- } = config;
1073
- const themeNames = Object.keys(themes);
1074
- function getSystemTheme() {
1075
- if (typeof window === "undefined") return config.defaultTheme ?? "light";
1076
- return window.matchMedia("(prefers-color-scheme: dark)").matches ? "dark" : "light";
1077
- }
1078
- function getInitialTheme() {
1079
- if (typeof window !== "undefined" && storageKey) {
1080
- const stored = localStorage.getItem(storageKey);
1081
- if (stored && themeNames.includes(stored)) return stored;
1082
- }
1083
- return config.defaultTheme ?? getSystemTheme();
1084
- }
1085
- const current = signal(getInitialTheme());
1086
- const isDark = computed(() => current() === "dark");
1087
- function applyTheme(name) {
1088
- if (typeof document === "undefined") return;
1089
- document.documentElement.setAttribute(attribute, name);
1090
- const vars = themes[name];
1091
- if (vars) {
1092
- for (const [key, value] of Object.entries(vars)) {
1093
- document.documentElement.style.setProperty(key, value);
1094
- }
1095
- }
1096
- document.documentElement.classList.remove(...themeNames);
1097
- document.documentElement.classList.add(name);
1098
- }
1099
- effect(() => {
1100
- const name = current();
1101
- applyTheme(name);
1102
- if (typeof window !== "undefined" && storageKey) {
1103
- localStorage.setItem(storageKey, name);
1104
- }
1105
- });
1106
- if (syncSystem && typeof window !== "undefined") {
1107
- const mql = window.matchMedia("(prefers-color-scheme: dark)");
1108
- mql.addEventListener("change", (e) => {
1109
- const stored = localStorage.getItem(storageKey);
1110
- if (!stored) {
1111
- current.set(e.matches ? "dark" : "light");
1112
- }
1113
- });
1114
- }
1115
- return {
1116
- current: () => current(),
1117
- isDark,
1118
- set(theme) {
1119
- if (themeNames.includes(theme)) {
1120
- current.set(theme);
1121
- }
1122
- },
1123
- toggle() {
1124
- current.set(isDark() ? "light" : "dark");
1125
- },
1126
- setSystem() {
1127
- if (typeof window !== "undefined" && storageKey) {
1128
- localStorage.removeItem(storageKey);
1129
- }
1130
- current.set(getSystemTheme());
1131
- },
1132
- themes: themeNames
1133
- };
1134
- }
1135
-
1136
- // src/virtual-list.ts
1137
- function calculateRange(scrollTop, containerHeight, itemHeight, totalItems, overscan = 3) {
1138
- const firstVisible = Math.floor(scrollTop / itemHeight);
1139
- const visibleCount = Math.ceil(containerHeight / itemHeight);
1140
- const start = Math.max(0, firstVisible - overscan);
1141
- const end = Math.min(totalItems, firstVisible + visibleCount + overscan);
1142
- return {
1143
- start,
1144
- end,
1145
- totalHeight: totalItems * itemHeight,
1146
- offsetTop: start * itemHeight
1147
- };
1148
- }
1149
- function useVirtualList(options) {
1150
- const scrollTop = signal(0);
1151
- const containerHeight = signal(options.containerHeight ?? 400);
1152
- const overscan = options.overscan ?? 3;
1153
- const range = computed(() => {
1154
- return calculateRange(
1155
- scrollTop(),
1156
- containerHeight(),
1157
- options.itemHeight,
1158
- options.items().length,
1159
- overscan
1160
- );
1161
- });
1162
- const visibleItems = computed(() => {
1163
- const r = range();
1164
- return options.items().slice(r.start, r.end).map((item, i) => ({
1165
- item,
1166
- index: r.start + i
1167
- }));
1168
- });
1169
- function onScroll(e) {
1170
- const target = e.target;
1171
- scrollTop.set(target.scrollTop);
1172
- }
1173
- function setContainerHeight(height) {
1174
- containerHeight.set(height);
1175
- }
1176
- return {
1177
- range,
1178
- visibleItems,
1179
- onScroll,
1180
- setContainerHeight,
1181
- scrollTop: (() => scrollTop())
1182
- };
1183
- }
1184
- var VirtualFor = defineComponent((ctx) => {
1185
- const {
1186
- itemHeight,
1187
- containerHeight: fixedHeight,
1188
- overscan = 3
1189
- } = ctx.props;
1190
- const scrollTop = signal(0);
1191
- return () => {
1192
- const items = ctx.props.each;
1193
- const height = fixedHeight ?? 400;
1194
- const r = calculateRange(scrollTop(), height, itemHeight, items.length, overscan);
1195
- const outer = document.createElement("div");
1196
- outer.style.height = `${height}px`;
1197
- outer.style.overflow = "auto";
1198
- outer.style.position = "relative";
1199
- outer.addEventListener("scroll", () => {
1200
- scrollTop.set(outer.scrollTop);
1201
- }, { passive: true });
1202
- const inner = document.createElement("div");
1203
- inner.style.height = `${r.totalHeight}px`;
1204
- inner.style.position = "relative";
1205
- const content = document.createElement("div");
1206
- content.style.position = "absolute";
1207
- content.style.top = `${r.offsetTop}px`;
1208
- content.style.left = "0";
1209
- content.style.right = "0";
1210
- for (let i = r.start; i < r.end; i++) {
1211
- const item = items[i];
1212
- if (!item) continue;
1213
- const row = nodeToDOM(ctx.props.children(item, i));
1214
- if (row instanceof HTMLElement) {
1215
- row.style.height = `${itemHeight}px`;
1216
- }
1217
- content.appendChild(row);
1218
- }
1219
- inner.appendChild(content);
1220
- outer.appendChild(inner);
1221
- return outer;
1222
- };
1223
- });
1224
-
1225
- // src/async-component.ts
1226
- function defineAsyncComponent(loaderOrOptions) {
1227
- const options = typeof loaderOrOptions === "function" ? { loader: loaderOrOptions } : loaderOrOptions;
1228
- const {
1229
- loader,
1230
- loading: loadingFn,
1231
- error: errorFn,
1232
- timeout,
1233
- delay = 200
1234
- } = options;
1235
- let resolvedComp = null;
1236
- let loadPromise = null;
1237
- let loadError = null;
1238
- function startLoad() {
1239
- if (loadPromise) return loadPromise;
1240
- loadPromise = loader().then((mod) => {
1241
- resolvedComp = mod.default;
1242
- }).catch((err) => {
1243
- loadError = err instanceof Error ? err : new Error(String(err));
1244
- });
1245
- return loadPromise;
1246
- }
1247
- return defineComponent((ctx) => {
1248
- const state = signal("loading");
1249
- const showLoading = signal(false);
1250
- startLoad().then(() => {
1251
- if (loadError) {
1252
- state.set("error");
1253
- } else {
1254
- state.set("ready");
1255
- }
1256
- });
1257
- let delayTimer = null;
1258
- if (delay > 0) {
1259
- delayTimer = setTimeout(() => showLoading.set(true), delay);
1260
- } else {
1261
- showLoading.set(true);
1262
- }
1263
- let timeoutTimer = null;
1264
- if (timeout) {
1265
- timeoutTimer = setTimeout(() => {
1266
- if (state() === "loading") {
1267
- loadError = new Error(`Async component timed out after ${timeout}ms`);
1268
- state.set("error");
1269
- }
1270
- }, timeout);
1271
- }
1272
- return () => {
1273
- const s = state();
1274
- if (s !== "loading") {
1275
- if (delayTimer) clearTimeout(delayTimer);
1276
- if (timeoutTimer) clearTimeout(timeoutTimer);
1277
- }
1278
- if (s === "ready" && resolvedComp) {
1279
- return resolvedComp(ctx.props);
1280
- }
1281
- if (s === "error" && errorFn && loadError) {
1282
- return nodeToDOM(errorFn(loadError));
1283
- }
1284
- if (s === "loading" && showLoading() && loadingFn) {
1285
- return nodeToDOM(loadingFn());
1286
- }
1287
- return document.createComment("async-loading");
1288
- };
1289
- });
1290
- }
1291
-
1292
- // src/reconcile.ts
1293
- function longestIncreasingSubsequence(arr) {
1294
- const n = arr.length;
1295
- if (n === 0) return [];
1296
- const tails = [];
1297
- const predecessors = new Array(n).fill(-1);
1298
- const indices = [];
1299
- for (let i = 0; i < n; i++) {
1300
- const value = arr[i];
1301
- if (value === -1) continue;
1302
- let lo = 0;
1303
- let hi = tails.length;
1304
- while (lo < hi) {
1305
- const mid = lo + hi >> 1;
1306
- if (tails[mid] < value) {
1307
- lo = mid + 1;
1308
- } else {
1309
- hi = mid;
1310
- }
1311
- }
1312
- tails[lo] = value;
1313
- indices[lo] = i;
1314
- if (lo > 0) {
1315
- predecessors[i] = indices[lo - 1];
1316
- }
1317
- }
1318
- const result = new Array(tails.length);
1319
- let k = indices[tails.length - 1];
1320
- for (let i = tails.length - 1; i >= 0; i--) {
1321
- result[i] = k;
1322
- k = predecessors[k];
1323
- }
1324
- return result;
1325
- }
1326
- function reconcileKeys(oldKeys, newKeys) {
1327
- const ops = [];
1328
- const oldKeyMap = /* @__PURE__ */ new Map();
1329
- for (let i = 0; i < oldKeys.length; i++) {
1330
- oldKeyMap.set(oldKeys[i], i);
1331
- }
1332
- const newToOld = new Array(newKeys.length);
1333
- for (let i = 0; i < newKeys.length; i++) {
1334
- newToOld[i] = oldKeyMap.get(newKeys[i]) ?? -1;
1335
- }
1336
- const newKeySet = new Set(newKeys);
1337
- for (let i = 0; i < oldKeys.length; i++) {
1338
- if (!newKeySet.has(oldKeys[i])) {
1339
- ops.push({ type: "remove", oldIndex: i });
1340
- }
1341
- }
1342
- const lis = new Set(longestIncreasingSubsequence(newToOld));
1343
- for (let i = 0; i < newKeys.length; i++) {
1344
- if (newToOld[i] === -1) {
1345
- ops.push({ type: "insert", newIndex: i });
1346
- } else if (!lis.has(i)) {
1347
- ops.push({ type: "move", newIndex: i, oldIndex: newToOld[i] });
1348
- }
1349
- }
1350
- return ops;
1351
- }
1352
- function countOps(oldKeys, newKeys) {
1353
- const ops = reconcileKeys(oldKeys, newKeys);
1354
- let inserts = 0, moves = 0, removes = 0;
1355
- for (const op of ops) {
1356
- if (op.type === "insert") inserts++;
1357
- else if (op.type === "move") moves++;
1358
- else removes++;
1359
- }
1360
- return { inserts, moves, removes };
1361
- }
1362
-
1363
- // src/leak-detector.ts
1364
- var tracking = false;
1365
- var activeEffects = /* @__PURE__ */ new Map();
1366
- var effectIdCounter = 0;
1367
- function enableLeakDetection() {
1368
- tracking = true;
1369
- }
1370
- function disableLeakDetection() {
1371
- tracking = false;
1372
- activeEffects.clear();
1373
- }
1374
- function isLeakDetectionEnabled() {
1375
- return tracking;
1376
- }
1377
- function trackEffect(componentName) {
1378
- if (!tracking) return -1;
1379
- const id = ++effectIdCounter;
1380
- activeEffects.set(id, {
1381
- id,
1382
- createdAt: Date.now(),
1383
- stackTrace: captureStack(),
1384
- componentName: componentName ?? null,
1385
- disposed: false
1386
- });
1387
- return id;
1388
- }
1389
- function untrackEffect(id) {
1390
- if (!tracking || id === -1) return;
1391
- const record = activeEffects.get(id);
1392
- if (record) {
1393
- record.disposed = true;
1394
- activeEffects.delete(id);
1395
- }
1396
- }
1397
- function getActiveEffects() {
1398
- return Array.from(activeEffects.values());
1399
- }
1400
- function checkForLeaks(thresholdMs = 3e4) {
1401
- if (!tracking) return [];
1402
- const now = Date.now();
1403
- const warnings = [];
1404
- for (const record of activeEffects.values()) {
1405
- if (!record.disposed && now - record.createdAt > thresholdMs) {
1406
- warnings.push({
1407
- effectId: record.id,
1408
- age: now - record.createdAt,
1409
- componentName: record.componentName,
1410
- stackTrace: record.stackTrace
1411
- });
1412
- }
1413
- }
1414
- return warnings;
1415
- }
1416
- function reportLeaks(thresholdMs = 3e4) {
1417
- const leaks = checkForLeaks(thresholdMs);
1418
- if (leaks.length === 0) return;
1419
- console.warn(
1420
- `[AkashJS] ${leaks.length} potential effect leak(s) detected:`
1421
- );
1422
- for (const leak of leaks) {
1423
- const component = leak.componentName ? ` in ${leak.componentName}` : "";
1424
- console.warn(
1425
- ` Effect #${leak.effectId}${component} \u2014 active for ${(leak.age / 1e3).toFixed(1)}s`
1426
- );
1427
- if (leak.stackTrace) {
1428
- console.warn(` Created at:
1429
- ${leak.stackTrace}`);
1430
- }
1431
- }
1432
- }
1433
- function getLeakDetectionStats() {
1434
- return {
1435
- enabled: tracking,
1436
- activeCount: activeEffects.size,
1437
- totalTracked: effectIdCounter
1438
- };
1439
- }
1440
- function captureStack() {
1441
- try {
1442
- const err = new Error();
1443
- const stack = err.stack;
1444
- if (!stack) return null;
1445
- const lines = stack.split("\n");
1446
- return lines.slice(3, 8).join("\n");
1447
- } catch {
1448
- return null;
1449
- }
1450
- }
1451
-
1452
- // src/perf.ts
1453
- var profiling = false;
1454
- var entries = [];
1455
- var profileStart = 0;
1456
- function startProfiling() {
1457
- profiling = true;
1458
- entries = [];
1459
- profileStart = performance.now();
1460
- }
1461
- function stopProfiling() {
1462
- profiling = false;
1463
- const endTime = performance.now();
1464
- return {
1465
- entries: [...entries],
1466
- totalDuration: endTime - profileStart,
1467
- startTime: profileStart,
1468
- endTime
1469
- };
1470
- }
1471
- function isProfiling() {
1472
- return profiling;
1473
- }
1474
- function recordPerfEntry(type, name, duration) {
1475
- if (!profiling) return;
1476
- entries.push({
1477
- type,
1478
- name,
1479
- duration,
1480
- timestamp: performance.now()
1481
- });
1482
- }
1483
- function getProfileSummary(profile) {
1484
- const renders = profile.entries.filter((e) => e.type === "render");
1485
- const effects = profile.entries.filter((e) => e.type === "effect");
1486
- const signalUpdates = profile.entries.filter((e) => e.type === "signal-update");
1487
- const computeds = profile.entries.filter((e) => e.type === "computed");
1488
- const avg = (arr) => arr.length > 0 ? arr.reduce((s, e) => s + e.duration, 0) / arr.length : 0;
1489
- const slowest = (arr) => arr.length > 0 ? arr.reduce((s, e) => e.duration > s.duration ? e : s) : null;
1490
- return {
1491
- totalRenders: renders.length,
1492
- totalEffects: effects.length,
1493
- totalSignalUpdates: signalUpdates.length,
1494
- totalComputedEvals: computeds.length,
1495
- avgRenderTime: avg(renders),
1496
- avgEffectTime: avg(effects),
1497
- slowestRender: slowest(renders),
1498
- slowestEffect: slowest(effects)
1499
- };
1500
- }
1501
- function measureSync(name, fn) {
1502
- const start = performance.now();
1503
- const result = fn();
1504
- const duration = performance.now() - start;
1505
- recordPerfEntry("render", name, duration);
1506
- return { result, duration };
1507
- }
1508
- async function measureAsync(name, fn) {
1509
- const start = performance.now();
1510
- const result = await fn();
1511
- const duration = performance.now() - start;
1512
- recordPerfEntry("render", name, duration);
1513
- return { result, duration };
1514
- }
1515
- function createTimer(name) {
1516
- let startTime = 0;
1517
- let dur = 0;
1518
- return {
1519
- start() {
1520
- startTime = performance.now();
1521
- },
1522
- stop() {
1523
- dur = performance.now() - startTime;
1524
- recordPerfEntry("render", name, dur);
1525
- },
1526
- get duration() {
1527
- return dur;
1528
- }
1529
- };
1530
- }
1531
- function formatProfile(profile) {
1532
- const summary = getProfileSummary(profile);
1533
- let out = "\n Performance Profile\n";
1534
- out += " " + "\u2500".repeat(50) + "\n";
1535
- out += ` Duration: ${profile.totalDuration.toFixed(1)} ms
1536
- `;
1537
- out += ` Renders: ${summary.totalRenders} (avg ${summary.avgRenderTime.toFixed(2)} ms)
1538
- `;
1539
- out += ` Effects: ${summary.totalEffects} (avg ${summary.avgEffectTime.toFixed(2)} ms)
1540
- `;
1541
- out += ` Signal updates: ${summary.totalSignalUpdates}
1542
- `;
1543
- out += ` Computed evals: ${summary.totalComputedEvals}
1544
- `;
1545
- if (summary.slowestRender) {
1546
- out += ` Slowest render: ${summary.slowestRender.name} (${summary.slowestRender.duration.toFixed(2)} ms)
1547
- `;
1548
- }
1549
- if (summary.slowestEffect) {
1550
- out += ` Slowest effect: ${summary.slowestEffect.name} (${summary.slowestEffect.duration.toFixed(2)} ms)
1551
- `;
1552
- }
1553
- out += " " + "\u2500".repeat(50) + "\n";
1554
- return out;
1555
- }
1556
-
1557
- // src/a11y.ts
1558
- var FOCUSABLE_SELECTOR = [
1559
- "a[href]",
1560
- "button:not([disabled])",
1561
- "input:not([disabled])",
1562
- "select:not([disabled])",
1563
- "textarea:not([disabled])",
1564
- '[tabindex]:not([tabindex="-1"])',
1565
- "[contenteditable]"
1566
- ].join(", ");
1567
- function useFocusTrap(container, options = {}) {
1568
- const {
1569
- initialFocus,
1570
- returnFocus = true,
1571
- escapeDeactivates = true,
1572
- allowOutsideClick = false,
1573
- onDeactivate
1574
- } = options;
1575
- const active = signal(false);
1576
- let previouslyFocused = null;
1577
- function getContainer() {
1578
- return typeof container === "function" ? container() : container;
1579
- }
1580
- function getFocusableElements() {
1581
- const el = getContainer();
1582
- if (!el) return [];
1583
- return Array.from(el.querySelectorAll(FOCUSABLE_SELECTOR));
1584
- }
1585
- function handleKeyDown(e) {
1586
- if (e.key === "Escape" && escapeDeactivates) {
1587
- e.preventDefault();
1588
- deactivate();
1589
- onDeactivate?.();
1590
- return;
1591
- }
1592
- if (e.key !== "Tab") return;
1593
- const focusable = getFocusableElements();
1594
- if (focusable.length === 0) return;
1595
- const first = focusable[0];
1596
- const last = focusable[focusable.length - 1];
1597
- if (e.shiftKey) {
1598
- if (document.activeElement === first) {
1599
- e.preventDefault();
1600
- last.focus();
1601
- }
1602
- } else {
1603
- if (document.activeElement === last) {
1604
- e.preventDefault();
1605
- first.focus();
1606
- }
1607
- }
1608
- }
1609
- function handleFocusOut(e) {
1610
- if (!active() || allowOutsideClick) return;
1611
- const el = getContainer();
1612
- if (!el) return;
1613
- const relatedTarget = e.relatedTarget;
1614
- if (relatedTarget && !el.contains(relatedTarget)) {
1615
- const focusable = getFocusableElements();
1616
- if (focusable.length > 0) {
1617
- focusable[0].focus();
1618
- }
1619
- }
1620
- }
1621
- function activate() {
1622
- if (active()) return;
1623
- active.set(true);
1624
- previouslyFocused = document.activeElement;
1625
- document.addEventListener("keydown", handleKeyDown, true);
1626
- const el = getContainer();
1627
- if (el) {
1628
- el.addEventListener("focusout", handleFocusOut);
1629
- }
1630
- requestAnimationFrame(() => {
1631
- if (initialFocus) {
1632
- const target = typeof initialFocus === "string" ? getContainer()?.querySelector(initialFocus) : initialFocus;
1633
- target?.focus();
1634
- } else {
1635
- const focusable = getFocusableElements();
1636
- if (focusable.length > 0) focusable[0].focus();
1637
- }
1638
- });
1639
- }
1640
- function deactivate() {
1641
- if (!active()) return;
1642
- active.set(false);
1643
- document.removeEventListener("keydown", handleKeyDown, true);
1644
- const el = getContainer();
1645
- if (el) {
1646
- el.removeEventListener("focusout", handleFocusOut);
1647
- }
1648
- if (returnFocus && previouslyFocused) {
1649
- previouslyFocused.focus();
1650
- previouslyFocused = null;
1651
- }
1652
- }
1653
- return {
1654
- activate,
1655
- deactivate,
1656
- active: () => active()
1657
- };
1658
- }
1659
- var announceRegion = null;
1660
- function ensureAnnounceRegion() {
1661
- if (announceRegion && document.body.contains(announceRegion)) {
1662
- return announceRegion;
1663
- }
1664
- const el = document.createElement("div");
1665
- el.setAttribute("role", "status");
1666
- el.setAttribute("aria-live", "polite");
1667
- el.setAttribute("aria-atomic", "true");
1668
- el.style.cssText = [
1669
- "position: absolute",
1670
- "width: 1px",
1671
- "height: 1px",
1672
- "padding: 0",
1673
- "margin: -1px",
1674
- "overflow: hidden",
1675
- "clip: rect(0,0,0,0)",
1676
- "white-space: nowrap",
1677
- "border: 0"
1678
- ].join("; ");
1679
- document.body.appendChild(el);
1680
- announceRegion = el;
1681
- return el;
1682
- }
1683
- function useAnnounce() {
1684
- return (message, politeness = "polite") => {
1685
- if (typeof document === "undefined") return;
1686
- const region = ensureAnnounceRegion();
1687
- region.setAttribute("aria-live", politeness);
1688
- region.textContent = "";
1689
- requestAnimationFrame(() => {
1690
- region.textContent = message;
1691
- });
1692
- };
1693
- }
1694
- function useKeyboard() {
1695
- const bindings = [];
1696
- const activeScopes = /* @__PURE__ */ new Set();
1697
- let listening = false;
1698
- function handleKeyDown(e) {
1699
- for (const binding of bindings) {
1700
- if (binding.scope && !activeScopes.has(binding.scope)) continue;
1701
- if (matchesKey(e, binding.key)) {
1702
- if (binding.preventDefault !== false) {
1703
- e.preventDefault();
1704
- }
1705
- binding.handler(e);
1706
- return;
1707
- }
1708
- }
1709
- }
1710
- function startListening() {
1711
- if (listening) return;
1712
- if (typeof document === "undefined") return;
1713
- document.addEventListener("keydown", handleKeyDown);
1714
- listening = true;
1715
- }
1716
- function bind(key, handler, options) {
1717
- const binding = {
1718
- key,
1719
- handler,
1720
- scope: options?.scope,
1721
- description: options?.description ?? "",
1722
- preventDefault: options?.preventDefault
1723
- };
1724
- bindings.push(binding);
1725
- startListening();
1726
- return () => {
1727
- const idx = bindings.indexOf(binding);
1728
- if (idx !== -1) bindings.splice(idx, 1);
1729
- };
1730
- }
1731
- return {
1732
- bind,
1733
- enableScope(scope) {
1734
- activeScopes.add(scope);
1735
- },
1736
- disableScope(scope) {
1737
- activeScopes.delete(scope);
1738
- },
1739
- getBindings() {
1740
- return bindings.map((b) => ({
1741
- key: formatKeyCombo(b.key),
1742
- description: b.description ?? "",
1743
- scope: b.scope
1744
- }));
1745
- },
1746
- dispose() {
1747
- bindings.length = 0;
1748
- if (typeof document !== "undefined") {
1749
- document.removeEventListener("keydown", handleKeyDown);
1750
- }
1751
- listening = false;
1752
- }
1753
- };
1754
- }
1755
- function matchesKey(e, combo) {
1756
- const parts = combo.toLowerCase().split("+");
1757
- const key = parts.pop();
1758
- const needsMod = parts.includes("mod");
1759
- const needsCtrl = parts.includes("ctrl");
1760
- const needsShift = parts.includes("shift");
1761
- const needsAlt = parts.includes("alt");
1762
- const isMac = typeof navigator !== "undefined" && navigator.platform?.includes("Mac");
1763
- const modPressed = isMac ? e.metaKey : e.ctrlKey;
1764
- if (needsMod && !modPressed) return false;
1765
- if (needsCtrl && !e.ctrlKey) return false;
1766
- if (needsShift && !e.shiftKey) return false;
1767
- if (needsAlt && !e.altKey) return false;
1768
- return e.key.toLowerCase() === key || e.code.toLowerCase() === key;
1769
- }
1770
- function formatKeyCombo(combo) {
1771
- const isMac = typeof navigator !== "undefined" && navigator.platform?.includes("Mac");
1772
- return combo.replace(/mod/gi, isMac ? "\u2318" : "Ctrl").replace(/shift/gi, isMac ? "\u21E7" : "Shift").replace(/alt/gi, isMac ? "\u2325" : "Alt").replace(/\+/g, isMac ? "" : "+");
1773
- }
1774
-
1775
- // src/image.ts
1776
- var Image = defineComponent((ctx) => {
1777
- const loaded = signal(false);
1778
- const errored = signal(false);
1779
- return () => {
1780
- const {
1781
- src,
1782
- alt,
1783
- width,
1784
- height,
1785
- loading = "lazy",
1786
- srcset,
1787
- sizes,
1788
- placeholder,
1789
- blurDataUrl,
1790
- class: className,
1791
- fallbackSrc,
1792
- onLoad,
1793
- onError: onErrorCb
1794
- } = ctx.props;
1795
- const wrapper = document.createElement("div");
1796
- wrapper.style.position = "relative";
1797
- wrapper.style.display = "inline-block";
1798
- wrapper.style.overflow = "hidden";
1799
- if (width) wrapper.style.width = `${width}px`;
1800
- if (height) wrapper.style.height = `${height}px`;
1801
- if (placeholder === "blur" && blurDataUrl && !loaded()) {
1802
- const blur = document.createElement("img");
1803
- blur.src = blurDataUrl;
1804
- blur.alt = "";
1805
- blur.setAttribute("aria-hidden", "true");
1806
- blur.style.cssText = "position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);";
1807
- wrapper.appendChild(blur);
1808
- }
1809
- const img = document.createElement("img");
1810
- img.alt = alt;
1811
- img.loading = loading;
1812
- if (errored() && fallbackSrc) {
1813
- img.src = fallbackSrc;
1814
- } else {
1815
- img.src = src;
1816
- }
1817
- if (srcset) img.srcset = srcset;
1818
- if (sizes) img.sizes = sizes;
1819
- if (width) img.width = width;
1820
- if (height) img.height = height;
1821
- if (className) img.className = className;
1822
- img.style.display = "block";
1823
- img.style.width = "100%";
1824
- img.style.height = "auto";
1825
- img.addEventListener("load", () => {
1826
- loaded.set(true);
1827
- onLoad?.();
1828
- });
1829
- img.addEventListener("error", (e) => {
1830
- errored.set(true);
1831
- onErrorCb?.(e);
1832
- });
1833
- if (loading === "lazy" && typeof IntersectionObserver !== "undefined") {
1834
- img.setAttribute("data-src", img.src);
1835
- const actualSrc = img.src;
1836
- img.removeAttribute("src");
1837
- const observer = new IntersectionObserver(
1838
- (entries2) => {
1839
- if (entries2[0].isIntersecting) {
1840
- img.src = actualSrc;
1841
- observer.disconnect();
1842
- }
1843
- },
1844
- { rootMargin: "200px" }
1845
- );
1846
- requestAnimationFrame(() => {
1847
- if (img.parentElement) {
1848
- observer.observe(img);
1849
- } else {
1850
- img.src = actualSrc;
1851
- }
1852
- });
1853
- }
1854
- wrapper.appendChild(img);
1855
- return wrapper;
1856
- };
1857
- });
1858
-
1859
- // src/infinite-scroll.ts
1860
- function useInfiniteScroll(options) {
1861
- const { onLoadMore, hasMore, rootMargin = "200px", threshold = 0 } = options;
1862
- const loading = signal(false);
1863
- const done = signal(false);
1864
- let observer = null;
1865
- let sentinelEl = null;
1866
- let disposed = false;
1867
- async function handleIntersect() {
1868
- if (loading() || done() || disposed) return;
1869
- if (!hasMore()) {
1870
- done.set(true);
1871
- return;
1872
- }
1873
- loading.set(true);
1874
- try {
1875
- await onLoadMore();
1876
- if (!hasMore()) {
1877
- done.set(true);
1878
- }
1879
- } finally {
1880
- loading.set(false);
1881
- }
1882
- }
1883
- function createObserver(el) {
1884
- if (typeof IntersectionObserver === "undefined") return;
1885
- observer = new IntersectionObserver(
1886
- (entries2) => {
1887
- if (entries2[0]?.isIntersecting) {
1888
- handleIntersect();
1889
- }
1890
- },
1891
- { rootMargin, threshold }
1892
- );
1893
- observer.observe(el);
1894
- }
1895
- function sentinel() {
1896
- if (sentinelEl) return sentinelEl;
1897
- sentinelEl = document.createElement("div");
1898
- sentinelEl.setAttribute("data-akash-sentinel", "");
1899
- sentinelEl.style.height = "1px";
1900
- sentinelEl.setAttribute("aria-hidden", "true");
1901
- requestAnimationFrame(() => {
1902
- if (sentinelEl && !disposed) {
1903
- createObserver(sentinelEl);
1904
- }
1905
- });
1906
- return sentinelEl;
1907
- }
1908
- return {
1909
- sentinel,
1910
- loading: () => loading(),
1911
- done: () => done(),
1912
- reset() {
1913
- done.set(false);
1914
- loading.set(false);
1915
- },
1916
- dispose() {
1917
- disposed = true;
1918
- observer?.disconnect();
1919
- observer = null;
1920
- }
1921
- };
1922
- }
1923
-
1924
- // src/css.ts
1925
- function cx(...inputs) {
1926
- const classes = [];
1927
- for (const input of inputs) {
1928
- if (!input) continue;
1929
- if (typeof input === "string") {
1930
- classes.push(input);
1931
- } else if (Array.isArray(input)) {
1932
- const nested = cx(...input);
1933
- if (nested) classes.push(nested);
1934
- } else if (typeof input === "object") {
1935
- for (const [key, value] of Object.entries(input)) {
1936
- if (value) classes.push(key);
1937
- }
1938
- }
1939
- }
1940
- return classes.join(" ");
1941
- }
1942
- function css(styles) {
1943
- const parts = [];
1944
- for (const [key, value] of Object.entries(styles)) {
1945
- if (value == null) continue;
1946
- const prop = camelToKebab(key);
1947
- const val = typeof value === "number" && !UNITLESS_PROPS.has(key) ? `${value}px` : String(value);
1948
- parts.push(`${prop}: ${val}`);
1949
- }
1950
- return parts.join("; ");
1951
- }
1952
- function applyStyles(el, styles) {
1953
- for (const [key, value] of Object.entries(styles)) {
1954
- if (value == null) {
1955
- el.style.removeProperty(camelToKebab(key));
1956
- } else {
1957
- const val = typeof value === "number" && !UNITLESS_PROPS.has(key) ? `${value}px` : String(value);
1958
- el.style.setProperty(camelToKebab(key), val);
1959
- }
1960
- }
1961
- }
1962
- function camelToKebab(str) {
1963
- return str.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
1964
- }
1965
- var UNITLESS_PROPS = /* @__PURE__ */ new Set([
1966
- "animationIterationCount",
1967
- "boxFlex",
1968
- "boxFlexGroup",
1969
- "boxOrdinalGroup",
1970
- "columnCount",
1971
- "fillOpacity",
1972
- "flex",
1973
- "flexGrow",
1974
- "flexPositive",
1975
- "flexShrink",
1976
- "flexNegative",
1977
- "flexOrder",
1978
- "fontWeight",
1979
- "gridColumn",
1980
- "gridRow",
1981
- "lineClamp",
1982
- "lineHeight",
1983
- "opacity",
1984
- "order",
1985
- "orphans",
1986
- "tabSize",
1987
- "widows",
1988
- "zIndex",
1989
- "zoom"
1990
- ]);
1991
-
1992
- // src/data-table.ts
1993
- function createDataTable(options) {
1994
- const { data, columns, pageSize = 0, initialSort } = options;
1995
- const sortState = signal(initialSort ?? { column: null, direction: null });
1996
- const filterText = signal("");
1997
- const page = signal(1);
1998
- const columnVisibility = signal(
1999
- Object.fromEntries(columns.map((c) => [c.key, c.visible !== false]))
2000
- );
2001
- const visibleColumns = computed(() => {
2002
- const vis = columnVisibility();
2003
- return columns.filter((c) => vis[c.key]);
2004
- });
2005
- const filteredRows = computed(() => {
2006
- const text = filterText().toLowerCase().trim();
2007
- if (!text) return data();
2008
- const filterableCols = columns.filter((c) => c.filterable);
2009
- if (filterableCols.length === 0) return data();
2010
- return data().filter((row) => {
2011
- return filterableCols.some((col) => {
2012
- const value = getNestedValue(row, col.key);
2013
- return String(value).toLowerCase().includes(text);
2014
- });
2015
- });
2016
- });
2017
- const sortedRows = computed(() => {
2018
- const { column, direction } = sortState();
2019
- const rows = [...filteredRows()];
2020
- if (!column || !direction) return rows;
2021
- const colDef = columns.find((c) => c.key === column);
2022
- if (!colDef) return rows;
2023
- return rows.sort((a, b) => {
2024
- if (colDef.compare) {
2025
- const result2 = colDef.compare(a, b);
2026
- return direction === "desc" ? -result2 : result2;
2027
- }
2028
- const aVal = getNestedValue(a, column);
2029
- const bVal = getNestedValue(b, column);
2030
- const result = defaultCompare(aVal, bVal);
2031
- return direction === "desc" ? -result : result;
2032
- });
2033
- });
2034
- const totalRows = computed(() => filteredRows().length);
2035
- const totalPages = computed(() => {
2036
- if (pageSize <= 0) return 1;
2037
- return Math.max(1, Math.ceil(totalRows() / pageSize));
2038
- });
2039
- const paginatedRows = computed(() => {
2040
- const all = sortedRows();
2041
- if (pageSize <= 0) return all;
2042
- const start = (page() - 1) * pageSize;
2043
- return all.slice(start, start + pageSize);
2044
- });
2045
- function sort(columnKey) {
2046
- const current = sortState();
2047
- if (current.column === columnKey) {
2048
- if (current.direction === "asc") {
2049
- sortState.set({ column: columnKey, direction: "desc" });
2050
- } else if (current.direction === "desc") {
2051
- sortState.set({ column: null, direction: null });
2052
- } else {
2053
- sortState.set({ column: columnKey, direction: "asc" });
2054
- }
2055
- } else {
2056
- sortState.set({ column: columnKey, direction: "asc" });
2057
- }
2058
- page.set(1);
2059
- }
2060
- function filter(text) {
2061
- filterText.set(text);
2062
- page.set(1);
2063
- }
2064
- function toggleColumn(key) {
2065
- columnVisibility.update((vis) => ({ ...vis, [key]: !vis[key] }));
2066
- }
2067
- function showColumn(key) {
2068
- columnVisibility.update((vis) => ({ ...vis, [key]: true }));
2069
- }
2070
- function hideColumn(key) {
2071
- columnVisibility.update((vis) => ({ ...vis, [key]: false }));
2072
- }
2073
- return {
2074
- rows: paginatedRows,
2075
- allRows: sortedRows,
2076
- totalRows,
2077
- visibleColumns,
2078
- sortState: () => sortState(),
2079
- filterText: () => filterText(),
2080
- page: () => page(),
2081
- totalPages,
2082
- sort,
2083
- filter,
2084
- toggleColumn,
2085
- showColumn,
2086
- hideColumn,
2087
- nextPage() {
2088
- if (page() < totalPages()) page.update((p) => p + 1);
2089
- },
2090
- prevPage() {
2091
- if (page() > 1) page.update((p) => p - 1);
2092
- },
2093
- goToPage(p) {
2094
- page.set(Math.max(1, Math.min(p, totalPages())));
2095
- },
2096
- reset() {
2097
- sortState.set({ column: null, direction: null });
2098
- filterText.set("");
2099
- page.set(1);
2100
- }
2101
- };
2102
- }
2103
- function getNestedValue(obj, path) {
2104
- return path.split(".").reduce((o, k) => o?.[k], obj);
2105
- }
2106
- function defaultCompare(a, b) {
2107
- if (a == null && b == null) return 0;
2108
- if (a == null) return -1;
2109
- if (b == null) return 1;
2110
- if (typeof a === "number" && typeof b === "number") return a - b;
2111
- return String(a).localeCompare(String(b));
2112
- }
2113
-
2114
- // src/seo.ts
2115
- function useStructuredData(data) {
2116
- const items = Array.isArray(data) ? data : [data];
2117
- for (const item of items) {
2118
- const ld = { "@context": "https://schema.org", ...item };
2119
- useHead({
2120
- script: [
2121
- { type: "application/ld+json", innerHTML: JSON.stringify(ld) }
2122
- ]
2123
- });
2124
- }
2125
- }
2126
- function useOpenGraph(data) {
2127
- const meta = [
2128
- { property: "og:title", content: data.title }
2129
- ];
2130
- if (data.description) meta.push({ property: "og:description", content: data.description });
2131
- if (data.image) meta.push({ property: "og:image", content: data.image });
2132
- if (data.url) meta.push({ property: "og:url", content: data.url });
2133
- if (data.type) meta.push({ property: "og:type", content: data.type });
2134
- if (data.siteName) meta.push({ property: "og:site_name", content: data.siteName });
2135
- if (data.locale) meta.push({ property: "og:locale", content: data.locale });
2136
- useHead({ meta });
2137
- }
2138
- function useTwitterCard(data) {
2139
- const meta = [
2140
- { name: "twitter:title", content: data.title }
2141
- ];
2142
- if (data.card) meta.push({ name: "twitter:card", content: data.card });
2143
- if (data.description) meta.push({ name: "twitter:description", content: data.description });
2144
- if (data.image) meta.push({ name: "twitter:image", content: data.image });
2145
- if (data.site) meta.push({ name: "twitter:site", content: data.site });
2146
- if (data.creator) meta.push({ name: "twitter:creator", content: data.creator });
2147
- useHead({ meta });
2148
- }
2149
- function useSEO(config) {
2150
- const meta = [];
2151
- if (config.description) {
2152
- meta.push({ name: "description", content: config.description });
2153
- }
2154
- if (config.robots) {
2155
- meta.push({ name: "robots", content: config.robots });
2156
- }
2157
- const link = [];
2158
- if (config.canonical) {
2159
- link.push({ rel: "canonical", href: config.canonical });
2160
- }
2161
- useHead({ title: config.title, meta, link });
2162
- if (config.openGraph) useOpenGraph(config.openGraph);
2163
- if (config.twitter) useTwitterCard(config.twitter);
2164
- if (config.structuredData) useStructuredData(config.structuredData);
2165
- }
2166
- function generateSitemap(baseUrl, entries2) {
2167
- let xml = '<?xml version="1.0" encoding="UTF-8"?>\n';
2168
- xml += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
2169
- for (const entry of entries2) {
2170
- xml += " <url>\n";
2171
- xml += ` <loc>${baseUrl}${entry.url}</loc>
2172
- `;
2173
- if (entry.lastmod) xml += ` <lastmod>${entry.lastmod}</lastmod>
2174
- `;
2175
- if (entry.changefreq) xml += ` <changefreq>${entry.changefreq}</changefreq>
2176
- `;
2177
- if (entry.priority != null) xml += ` <priority>${entry.priority}</priority>
2178
- `;
2179
- xml += " </url>\n";
2180
- }
2181
- xml += "</urlset>\n";
2182
- return xml;
2183
- }
2184
-
2185
- // src/sync.ts
2186
- var LWWRegister = class {
2187
- entry;
2188
- constructor(initialValue, peerId) {
2189
- this.entry = { value: initialValue, timestamp: Date.now(), peerId };
2190
- }
2191
- get value() {
2192
- return this.entry.value;
2193
- }
2194
- get timestamp() {
2195
- return this.entry.timestamp;
2196
- }
2197
- set(value, peerId) {
2198
- const ts = Date.now();
2199
- if (peerId === this.entry.peerId || ts > this.entry.timestamp || ts === this.entry.timestamp && peerId > this.entry.peerId) {
2200
- this.entry = { value, timestamp: Math.max(ts, this.entry.timestamp + 1), peerId };
2201
- return true;
2202
- }
2203
- return false;
2204
- }
2205
- merge(remote) {
2206
- if (remote.timestamp > this.entry.timestamp || remote.timestamp === this.entry.timestamp && remote.peerId > this.entry.peerId) {
2207
- this.entry = remote;
2208
- return true;
2209
- }
2210
- return false;
2211
- }
2212
- toEntry() {
2213
- return { ...this.entry };
2214
- }
2215
- };
2216
- function createWebSocketTransport(options) {
2217
- let ws = null;
2218
- const opHandlers = [];
2219
- const presenceHandlers = [];
2220
- return {
2221
- send(op) {
2222
- ws?.send(JSON.stringify({ type: "op", room: options.room, ...op }));
2223
- },
2224
- onReceive(handler) {
2225
- opHandlers.push(handler);
2226
- return () => {
2227
- const i = opHandlers.indexOf(handler);
2228
- if (i !== -1) opHandlers.splice(i, 1);
2229
- };
2230
- },
2231
- onPresence(handler) {
2232
- presenceHandlers.push(handler);
2233
- return () => {
2234
- const i = presenceHandlers.indexOf(handler);
2235
- if (i !== -1) presenceHandlers.splice(i, 1);
2236
- };
2237
- },
2238
- sendPresence(data) {
2239
- ws?.send(JSON.stringify({ type: "presence", room: options.room, data }));
2240
- },
2241
- connect() {
2242
- ws = new WebSocket(options.url, options.protocols);
2243
- ws.onmessage = (e) => {
2244
- try {
2245
- const msg = JSON.parse(e.data);
2246
- if (msg.type === "op") {
2247
- for (const h of opHandlers) h(msg);
2248
- } else if (msg.type === "presence") {
2249
- for (const h of presenceHandlers) h(msg.peerId, msg.data);
2250
- }
2251
- } catch {
2252
- }
2253
- };
2254
- ws.onopen = () => {
2255
- ws?.send(JSON.stringify({ type: "join", room: options.room }));
2256
- };
2257
- },
2258
- disconnect() {
2259
- ws?.close();
2260
- ws = null;
2261
- }
2262
- };
2263
- }
2264
- function createLocalTransport() {
2265
- const opHandlers = [];
2266
- return {
2267
- send(op) {
2268
- for (const h of opHandlers) h(op);
2269
- },
2270
- onReceive(handler) {
2271
- opHandlers.push(handler);
2272
- return () => {
2273
- const i = opHandlers.indexOf(handler);
2274
- if (i !== -1) opHandlers.splice(i, 1);
2275
- };
2276
- },
2277
- connect() {
2278
- },
2279
- disconnect() {
2280
- }
2281
- };
2282
- }
2283
- var peerIdCounter = 0;
2284
- function createSync(roomId, initialState, options = {}) {
2285
- const peerId = options.peerId ?? `peer-${++peerIdCounter}-${Date.now()}`;
2286
- const transport = options.transport ?? createLocalTransport();
2287
- const registers = /* @__PURE__ */ new Map();
2288
- const stateSignals = {};
2289
- for (const [key, value] of Object.entries(initialState)) {
2290
- registers.set(key, new LWWRegister(value, peerId));
2291
- stateSignals[key] = signal(value);
2292
- }
2293
- const state = {};
2294
- for (const key of Object.keys(initialState)) {
2295
- const original = stateSignals[key];
2296
- const register = registers.get(key);
2297
- const proxy = (() => original());
2298
- proxy.set = (value) => {
2299
- register.set(value, peerId);
2300
- original.set(value);
2301
- transport.send({
2302
- type: "set",
2303
- key,
2304
- value,
2305
- timestamp: register.timestamp,
2306
- peerId
2307
- });
2308
- };
2309
- proxy.update = (fn) => {
2310
- proxy.set(fn(original()));
2311
- };
2312
- proxy.peek = () => original.peek();
2313
- state[key] = proxy;
2314
- }
2315
- const peers = signal([]);
2316
- const connected = signal(false);
2317
- const presence = signal({});
2318
- const peerPresenceMap = signal(/* @__PURE__ */ new Map());
2319
- const unsubOps = transport.onReceive((op) => {
2320
- if (op.type === "set" && registers.has(op.key)) {
2321
- const register = registers.get(op.key);
2322
- const merged = register.merge({
2323
- value: op.value,
2324
- timestamp: op.timestamp,
2325
- peerId: op.peerId
2326
- });
2327
- if (merged) {
2328
- stateSignals[op.key].set(op.value);
2329
- }
2330
- }
2331
- });
2332
- const unsubPresence = transport.onPresence?.((remotePeerId, data) => {
2333
- peerPresenceMap.update((map) => {
2334
- const next = new Map(map);
2335
- next.set(remotePeerId, data);
2336
- return next;
2337
- });
2338
- });
2339
- return {
2340
- state,
2341
- peers: () => peers(),
2342
- presence,
2343
- peerPresence: () => peerPresenceMap(),
2344
- peerId,
2345
- connected: () => connected(),
2346
- connect() {
2347
- transport.connect();
2348
- connected.set(true);
2349
- },
2350
- disconnect() {
2351
- transport.disconnect();
2352
- connected.set(false);
2353
- },
2354
- dispose() {
2355
- unsubOps();
2356
- unsubPresence?.();
2357
- transport.disconnect();
2358
- }
2359
- };
2360
- }
2361
-
2362
- // src/offline.ts
2363
- async function openDB(name, version = 1) {
2364
- return new Promise((resolve, reject) => {
2365
- const request = indexedDB.open(name, version);
2366
- request.onupgradeneeded = () => {
2367
- const db = request.result;
2368
- if (!db.objectStoreNames.contains("items")) {
2369
- db.createObjectStore("items");
2370
- }
2371
- if (!db.objectStoreNames.contains("pending")) {
2372
- db.createObjectStore("pending", { autoIncrement: true });
2373
- }
2374
- };
2375
- request.onsuccess = () => resolve(request.result);
2376
- request.onerror = () => reject(request.error);
2377
- });
2378
- }
2379
- async function idbGetAll(db, store) {
2380
- return new Promise((resolve, reject) => {
2381
- const tx = db.transaction(store, "readonly");
2382
- const req = tx.objectStore(store).getAll();
2383
- req.onsuccess = () => resolve(req.result);
2384
- req.onerror = () => reject(req.error);
2385
- });
2386
- }
2387
- async function idbPut(db, store, key, value) {
2388
- return new Promise((resolve, reject) => {
2389
- const tx = db.transaction(store, "readwrite");
2390
- tx.objectStore(store).put(value, key);
2391
- tx.oncomplete = () => resolve();
2392
- tx.onerror = () => reject(tx.error);
2393
- });
2394
- }
2395
- async function idbDelete(db, store, key) {
2396
- return new Promise((resolve, reject) => {
2397
- const tx = db.transaction(store, "readwrite");
2398
- tx.objectStore(store).delete(key);
2399
- tx.oncomplete = () => resolve();
2400
- tx.onerror = () => reject(tx.error);
2401
- });
2402
- }
2403
- async function idbClear(db, store) {
2404
- return new Promise((resolve, reject) => {
2405
- const tx = db.transaction(store, "readwrite");
2406
- tx.objectStore(store).clear();
2407
- tx.oncomplete = () => resolve();
2408
- tx.onerror = () => reject(tx.error);
2409
- });
2410
- }
2411
- function createOfflineStore(name, options = {}) {
2412
- const keyField = options.keyField ?? "id";
2413
- const items = signal([]);
2414
- const pendingOps = signal([]);
2415
- const syncing = signal(false);
2416
- const online = signal(typeof navigator !== "undefined" ? navigator.onLine : true);
2417
- const pending = computed(() => pendingOps().length);
2418
- let db = null;
2419
- let syncTimer = null;
2420
- let disposed = false;
2421
- if (typeof window !== "undefined") {
2422
- window.addEventListener("online", () => {
2423
- online.set(true);
2424
- syncNow();
2425
- });
2426
- window.addEventListener("offline", () => online.set(false));
2427
- }
2428
- async function init() {
2429
- if (typeof indexedDB === "undefined") return;
2430
- try {
2431
- db = await openDB(`akash-offline-${name}`, options.version ?? 1);
2432
- const stored = await idbGetAll(db, "items");
2433
- items.set(stored);
2434
- const ops = await idbGetAll(db, "pending");
2435
- pendingOps.set(ops);
2436
- } catch {
2437
- }
2438
- }
2439
- init();
2440
- if (options.sync) {
2441
- const interval = options.sync.interval ?? 3e4;
2442
- syncTimer = setInterval(() => {
2443
- if (online() && pending() > 0 && !syncing()) {
2444
- syncNow();
2445
- }
2446
- }, interval);
2447
- }
2448
- function getKey(item) {
2449
- return String(item[keyField]);
2450
- }
2451
- function put(item) {
2452
- const key = getKey(item);
2453
- items.update((list) => {
2454
- const idx = list.findIndex((i) => getKey(i) === key);
2455
- if (idx !== -1) {
2456
- const next = [...list];
2457
- next[idx] = item;
2458
- return next;
2459
- }
2460
- return [...list, item];
2461
- });
2462
- queueOp({ type: "put", key, value: item, timestamp: Date.now() });
2463
- if (db) idbPut(db, "items", key, item);
2464
- }
2465
- function remove(key) {
2466
- items.update((list) => list.filter((i) => getKey(i) !== key));
2467
- queueOp({ type: "delete", key, timestamp: Date.now() });
2468
- if (db) idbDelete(db, "items", key);
2469
- }
2470
- function queueOp(op) {
2471
- pendingOps.update((ops) => [...ops, op]);
2472
- if (db) {
2473
- const tx = db.transaction("pending", "readwrite");
2474
- tx.objectStore("pending").add(op);
2475
- }
2476
- }
2477
- async function syncNow() {
2478
- if (!options.sync || syncing() || disposed) return;
2479
- const ops = pendingOps();
2480
- if (ops.length === 0) return;
2481
- syncing.set(true);
2482
- const fetchFn = options.sync.fetch ?? globalThis.fetch.bind(globalThis);
2483
- try {
2484
- const response = await fetchFn(options.sync.url, {
2485
- method: "POST",
2486
- headers: {
2487
- "Content-Type": "application/json",
2488
- ...options.sync.headers
2489
- },
2490
- body: JSON.stringify({ ops })
2491
- });
2492
- if (response.ok) {
2493
- pendingOps.set([]);
2494
- if (db) await idbClear(db, "pending");
2495
- const serverResponse = await fetchFn(options.sync.url, {
2496
- headers: options.sync.headers
2497
- });
2498
- if (serverResponse.ok) {
2499
- const serverItems = await serverResponse.json();
2500
- items.set(serverItems);
2501
- if (db) {
2502
- await idbClear(db, "items");
2503
- for (const item of serverItems) {
2504
- await idbPut(db, "items", getKey(item), item);
2505
- }
2506
- }
2507
- }
2508
- }
2509
- } catch {
2510
- } finally {
2511
- syncing.set(false);
2512
- }
2513
- }
2514
- return {
2515
- items: () => items(),
2516
- get(key) {
2517
- return items().find((i) => getKey(i) === key);
2518
- },
2519
- put,
2520
- add: put,
2521
- update(key, partial) {
2522
- const existing = items().find((i) => getKey(i) === key);
2523
- if (existing) put({ ...existing, ...partial });
2524
- },
2525
- remove,
2526
- clear() {
2527
- items.set([]);
2528
- pendingOps.set([]);
2529
- if (db) {
2530
- idbClear(db, "items");
2531
- idbClear(db, "pending");
2532
- }
2533
- },
2534
- pending,
2535
- syncing: () => syncing(),
2536
- online: () => online(),
2537
- sync: syncNow,
2538
- dispose() {
2539
- disposed = true;
2540
- if (syncTimer) clearInterval(syncTimer);
2541
- db?.close();
2542
- }
2543
- };
2544
- }
2545
-
2546
- // src/pipes.ts
2547
- function pipe(value, transform, ...args) {
2548
- return transform(value, ...args);
2549
- }
2550
- function chain(...pipes) {
2551
- return (value, ...args) => {
2552
- let result = value;
2553
- for (const p of pipes) {
2554
- result = p(result, ...args);
2555
- }
2556
- return result;
2557
- };
2558
- }
2559
- function definePipe(fn) {
2560
- return fn;
2561
- }
2562
- var uppercase = (value) => String(value).toUpperCase();
2563
- var lowercase = (value) => String(value).toLowerCase();
2564
- var capitalize = (value) => {
2565
- const s = String(value);
2566
- return s.charAt(0).toUpperCase() + s.slice(1);
2567
- };
2568
- var titleCase = (value) => {
2569
- return String(value).replace(/\b\w/g, (c) => c.toUpperCase());
2570
- };
2571
- var trim = (value) => String(value).trim();
2572
- var truncate = (value, maxLength = 50, suffix = "...") => {
2573
- const s = String(value);
2574
- if (s.length <= maxLength) return s;
2575
- return s.slice(0, maxLength - suffix.length) + suffix;
2576
- };
2577
- var date = (value, format = "medium", locale) => {
2578
- const d = value instanceof Date ? value : new Date(value);
2579
- if (isNaN(d.getTime())) return String(value);
2580
- if (format === "iso") return d.toISOString();
2581
- const loc = locale ?? "en-US";
2582
- const options = {
2583
- short: { year: "2-digit", month: "numeric", day: "numeric" },
2584
- medium: { year: "numeric", month: "numeric", day: "numeric" },
2585
- long: { year: "numeric", month: "long", day: "numeric" },
2586
- full: { weekday: "long", year: "numeric", month: "long", day: "numeric" },
2587
- time: { hour: "numeric", minute: "2-digit" }
2588
- };
2589
- return new Intl.DateTimeFormat(loc, options[format]).format(d);
2590
- };
2591
- var currency = (value, currencyCode = "USD", locale) => {
2592
- return new Intl.NumberFormat(locale ?? "en-US", {
2593
- style: "currency",
2594
- currency: currencyCode
2595
- }).format(Number(value));
2596
- };
2597
- var number = (value, digitsInfo, locale) => {
2598
- const opts = {};
2599
- if (digitsInfo) {
2600
- const [min, max] = digitsInfo.split("-").map(Number);
2601
- opts.minimumFractionDigits = min;
2602
- opts.maximumFractionDigits = max ?? min;
2603
- }
2604
- return new Intl.NumberFormat(locale ?? "en-US", opts).format(Number(value));
2605
- };
2606
- var percent = (value, decimals = 0, locale) => {
2607
- return new Intl.NumberFormat(locale ?? "en-US", {
2608
- style: "percent",
2609
- minimumFractionDigits: decimals,
2610
- maximumFractionDigits: decimals
2611
- }).format(Number(value));
2612
- };
2613
- var json = (value, indent = 2) => {
2614
- return JSON.stringify(value, null, indent);
2615
- };
2616
- var plural = (value, singular, pluralForm) => {
2617
- const p = pluralForm ?? `${singular}s`;
2618
- return `${value} ${value === 1 ? singular : p}`;
2619
- };
2620
- var relativeTime = (value, locale) => {
2621
- const d = value instanceof Date ? value.getTime() : Number(value);
2622
- const diff = d - Date.now();
2623
- const absDiff = Math.abs(diff);
2624
- const units = [
2625
- [6e4, "second"],
2626
- [36e5, "minute"],
2627
- [864e5, "hour"],
2628
- [2592e6, "day"],
2629
- [31536e6, "month"],
2630
- [Infinity, "year"]
2631
- ];
2632
- const divisors = {
2633
- second: 1e3,
2634
- minute: 6e4,
2635
- hour: 36e5,
2636
- day: 864e5,
2637
- month: 2592e6,
2638
- year: 31536e6
2639
- };
2640
- let unit = "second";
2641
- for (const [threshold, u] of units) {
2642
- if (absDiff < threshold) {
2643
- unit = u;
2644
- break;
2645
- }
2646
- }
2647
- const n = Math.round(diff / divisors[unit]);
2648
- if (typeof Intl !== "undefined" && Intl.RelativeTimeFormat) {
2649
- return new Intl.RelativeTimeFormat(locale ?? "en", { numeric: "auto" }).format(n, unit);
2650
- }
2651
- const abs = Math.abs(n);
2652
- const suffix = n < 0 ? "ago" : "from now";
2653
- return `${abs} ${unit}${abs !== 1 ? "s" : ""} ${suffix}`;
2654
- };
2655
-
2656
- // src/directive.ts
2657
- function defineDirective(hooks) {
2658
- return { _type: "directive", hooks };
2659
- }
2660
- function directiveFromFn(fn) {
2661
- return defineDirective({
2662
- mounted(el, binding) {
2663
- const cleanup = fn(el, binding);
2664
- if (typeof cleanup === "function") {
2665
- el.__directiveCleanup = cleanup;
2666
- }
2667
- },
2668
- unmounted(el) {
2669
- el.__directiveCleanup?.();
2670
- }
2671
- });
2672
- }
2673
- var DIRECTIVE_KEY = /* @__PURE__ */ Symbol("akash.directives");
2674
- function applyDirective(el, directive, value, options) {
2675
- const binding = {
2676
- value,
2677
- arg: options?.arg,
2678
- modifiers: options?.modifiers
2679
- };
2680
- const states = el[DIRECTIVE_KEY] ?? [];
2681
- states.push({ directive, binding });
2682
- el[DIRECTIVE_KEY] = states;
2683
- directive.hooks.mounted?.(el, binding);
2684
- }
2685
- function updateDirective(el, directive, newValue) {
2686
- const states = el[DIRECTIVE_KEY] ?? [];
2687
- const state = states.find((s) => s.directive === directive);
2688
- if (state) {
2689
- const oldValue = state.binding.value;
2690
- state.binding = { ...state.binding, value: newValue, oldValue };
2691
- directive.hooks.updated?.(el, state.binding);
2692
- }
2693
- }
2694
- function removeDirectives(el) {
2695
- const states = el[DIRECTIVE_KEY] ?? [];
2696
- for (const state of states) {
2697
- state.directive.hooks.unmounted?.(el, state.binding);
2698
- }
2699
- delete el[DIRECTIVE_KEY];
2700
- }
2701
- var vAutoFocus = defineDirective({
2702
- mounted(el) {
2703
- requestAnimationFrame(() => el.focus());
2704
- }
2705
- });
2706
- var vClickOutside = defineDirective({
2707
- mounted(el, { value: handler }) {
2708
- const listener = (e) => {
2709
- if (!el.contains(e.target)) handler();
2710
- };
2711
- document.addEventListener("click", listener, true);
2712
- el.__vClickOutside = listener;
2713
- },
2714
- unmounted(el) {
2715
- document.removeEventListener("click", el.__vClickOutside, true);
2716
- delete el.__vClickOutside;
2717
- }
2718
- });
2719
- var vLongPress = defineDirective({
2720
- mounted(el, { value }) {
2721
- let timer = null;
2722
- const duration = value.duration ?? 500;
2723
- const start = () => {
2724
- timer = setTimeout(value.handler, duration);
2725
- };
2726
- const cancel = () => {
2727
- if (timer) {
2728
- clearTimeout(timer);
2729
- timer = null;
2730
- }
2731
- };
2732
- el.addEventListener("pointerdown", start);
2733
- el.addEventListener("pointerup", cancel);
2734
- el.addEventListener("pointerleave", cancel);
2735
- el.__vLongPress = { start, cancel };
2736
- },
2737
- unmounted(el) {
2738
- const fns = el.__vLongPress;
2739
- if (fns) {
2740
- el.removeEventListener("pointerdown", fns.start);
2741
- el.removeEventListener("pointerup", fns.cancel);
2742
- el.removeEventListener("pointerleave", fns.cancel);
2743
- }
2744
- }
2745
- });
2746
- var vIntersect = defineDirective({
2747
- mounted(el, { value: callback }) {
2748
- const observer = new IntersectionObserver((entries2) => {
2749
- callback(entries2[0].isIntersecting);
2750
- });
2751
- observer.observe(el);
2752
- el.__vIntersect = observer;
2753
- },
2754
- unmounted(el) {
2755
- el.__vIntersect?.disconnect();
2756
- }
2757
- });
2758
- var vResize = defineDirective({
2759
- mounted(el, { value: callback }) {
2760
- const observer = new ResizeObserver((entries2) => {
2761
- callback(entries2[0]);
2762
- });
2763
- observer.observe(el);
2764
- el.__vResize = observer;
2765
- },
2766
- unmounted(el) {
2767
- el.__vResize?.disconnect();
2768
- }
2769
- });
2770
-
2771
- // src/pwa.ts
2772
- function registerServiceWorker(swUrl, options = {}) {
2773
- const registered = signal(false);
2774
- const updateAvailable = signal(false);
2775
- const offline = signal(!navigator.onLine);
2776
- let registration = null;
2777
- window.addEventListener("online", () => offline.set(false));
2778
- window.addEventListener("offline", () => offline.set(true));
2779
- const ready = new Promise((resolve, reject) => {
2780
- if (!("serviceWorker" in navigator)) {
2781
- reject(new Error("Service workers not supported"));
2782
- return;
2783
- }
2784
- navigator.serviceWorker.register(swUrl, { scope: options.scope }).then((reg) => {
2785
- registration = reg;
2786
- registered.set(true);
2787
- options.onReady?.(reg);
2788
- resolve(reg);
2789
- reg.addEventListener("updatefound", () => {
2790
- const newWorker = reg.installing;
2791
- if (!newWorker) return;
2792
- newWorker.addEventListener("statechange", () => {
2793
- if (newWorker.state === "installed" && navigator.serviceWorker.controller) {
2794
- updateAvailable.set(true);
2795
- options.onUpdate?.(reg);
2796
- if (options.autoReload) {
2797
- newWorker.postMessage({ type: "SKIP_WAITING" });
2798
- window.location.reload();
2799
- }
2800
- }
2801
- });
2802
- });
2803
- }).catch((err) => {
2804
- options.onError?.(err);
2805
- reject(err);
2806
- });
2807
- });
2808
- return {
2809
- registered: () => registered(),
2810
- updateAvailable: () => updateAvailable(),
2811
- offline: () => offline(),
2812
- ready,
2813
- async update() {
2814
- if (registration) {
2815
- await registration.update();
2816
- }
2817
- },
2818
- skipWaiting() {
2819
- if (registration?.waiting) {
2820
- registration.waiting.postMessage({ type: "SKIP_WAITING" });
2821
- window.location.reload();
2822
- }
2823
- },
2824
- async unregister() {
2825
- if (registration) {
2826
- return registration.unregister();
2827
- }
2828
- return false;
2829
- }
2830
- };
2831
- }
2832
- function generateSWScript(routes) {
2833
- let script = `// Auto-generated service worker by AkashJS
2834
- const CACHE_VERSION = 'v1';
2835
-
2836
- self.addEventListener('install', (event) => {
2837
- self.skipWaiting();
2838
- });
2839
-
2840
- self.addEventListener('activate', (event) => {
2841
- event.waitUntil(clients.claim());
2842
- });
2843
-
2844
- self.addEventListener('message', (event) => {
2845
- if (event.data?.type === 'SKIP_WAITING') {
2846
- self.skipWaiting();
2847
- }
2848
- });
2849
-
2850
- self.addEventListener('fetch', (event) => {
2851
- const url = new URL(event.request.url);
2852
- `;
2853
- for (const route of routes) {
2854
- const pattern = route.match instanceof RegExp ? route.match.toString() : `new RegExp(${JSON.stringify(route.match.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"))})`;
2855
- const cacheName = route.cacheName ?? "akash-cache";
2856
- script += `
2857
- if (${pattern}.test(url.pathname)) {
2858
- event.respondWith(${generateStrategyCode(route.strategy, cacheName)});
2859
- return;
2860
- }
2861
- `;
2862
- }
2863
- script += `
2864
- // Default: network-first
2865
- event.respondWith(
2866
- fetch(event.request).catch(() => caches.match(event.request))
2867
- );
2868
- });
2869
- `;
2870
- return script;
2871
- }
2872
- function generateStrategyCode(strategy, cacheName) {
2873
- switch (strategy) {
2874
- case "cache-first":
2875
- return `caches.match(event.request).then(cached => cached || fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }))`;
2876
- case "network-first":
2877
- return `fetch(event.request).then(response => { const clone = response.clone(); caches.open('${cacheName}').then(cache => cache.put(event.request, clone)); return response; }).catch(() => caches.match(event.request))`;
2878
- case "stale-while-revalidate":
2879
- return `caches.match(event.request).then(cached => { const fetchPromise = fetch(event.request).then(response => { caches.open('${cacheName}').then(cache => cache.put(event.request, response.clone())); return response; }); return cached || fetchPromise; })`;
2880
- case "network-only":
2881
- return `fetch(event.request)`;
2882
- case "cache-only":
2883
- return `caches.match(event.request)`;
2884
- }
2885
- }
2886
- async function subscribePush(registration, vapidPublicKey) {
2887
- const permission = await Notification.requestPermission();
2888
- if (permission !== "granted") return null;
2889
- const subscription = await registration.pushManager.subscribe({
2890
- userVisibleOnly: true,
2891
- applicationServerKey: urlBase64ToUint8Array(vapidPublicKey)
2892
- });
2893
- return subscription;
2894
- }
2895
- function urlBase64ToUint8Array(base64String) {
2896
- const padding = "=".repeat((4 - base64String.length % 4) % 4);
2897
- const base64 = (base64String + padding).replace(/-/g, "+").replace(/_/g, "/");
2898
- const rawData = atob(base64);
2899
- return Uint8Array.from(rawData, (char) => char.charCodeAt(0));
2900
- }
2901
-
2902
- // src/web-component.ts
2903
- function defineCustomElement(tagName, component, options = {}) {
2904
- const { props = [], shadow = true, styles } = options;
2905
- class AkashElement extends HTMLElement {
2906
- static get observedAttributes() {
2907
- return props;
2908
- }
2909
- _root;
2910
- _mounted = false;
2911
- _props = {};
2912
- constructor() {
2913
- super();
2914
- this._root = shadow ? this.attachShadow({ mode: "open" }) : this;
2915
- }
2916
- connectedCallback() {
2917
- for (const prop of props) {
2918
- const attr = this.getAttribute(prop);
2919
- if (attr !== null) {
2920
- this._props[prop] = parseAttributeValue(attr);
2921
- }
2922
- }
2923
- this._render();
2924
- this._mounted = true;
2925
- }
2926
- disconnectedCallback() {
2927
- while (this._root.firstChild) {
2928
- this._root.removeChild(this._root.firstChild);
2929
- }
2930
- this._mounted = false;
2931
- }
2932
- attributeChangedCallback(name, _oldValue, newValue) {
2933
- this._props[name] = newValue !== null ? parseAttributeValue(newValue) : void 0;
2934
- if (this._mounted) {
2935
- this._render();
2936
- }
2937
- }
2938
- _render() {
2939
- while (this._root.firstChild) {
2940
- this._root.removeChild(this._root.firstChild);
2941
- }
2942
- if (shadow && styles) {
2943
- const styleEl = document.createElement("style");
2944
- styleEl.textContent = styles;
2945
- this._root.appendChild(styleEl);
2946
- }
2947
- const node = component(this._props);
2948
- this._root.appendChild(node);
2949
- }
2950
- // Allow programmatic prop setting
2951
- setProps(newProps) {
2952
- Object.assign(this._props, newProps);
2953
- if (this._mounted) this._render();
2954
- }
2955
- }
2956
- if (typeof customElements !== "undefined" && !customElements.get(tagName)) {
2957
- if (options.extends) {
2958
- customElements.define(tagName, AkashElement, { extends: options.extends });
2959
- } else {
2960
- customElements.define(tagName, AkashElement);
2961
- }
2962
- }
2963
- return AkashElement;
2964
- }
2965
- function toCustomElement(component, options = {}) {
2966
- const { props = [], shadow = true, styles } = options;
2967
- return class extends HTMLElement {
2968
- static get observedAttributes() {
2969
- return props;
2970
- }
2971
- _root;
2972
- _mounted = false;
2973
- _props = {};
2974
- constructor() {
2975
- super();
2976
- this._root = shadow ? this.attachShadow({ mode: "open" }) : this;
2977
- }
2978
- connectedCallback() {
2979
- for (const prop of props) {
2980
- const attr = this.getAttribute(prop);
2981
- if (attr !== null) this._props[prop] = parseAttributeValue(attr);
2982
- }
2983
- this._render();
2984
- this._mounted = true;
2985
- }
2986
- disconnectedCallback() {
2987
- while (this._root.firstChild) this._root.removeChild(this._root.firstChild);
2988
- this._mounted = false;
2989
- }
2990
- attributeChangedCallback(name, _old, val) {
2991
- this._props[name] = val !== null ? parseAttributeValue(val) : void 0;
2992
- if (this._mounted) this._render();
2993
- }
2994
- _render() {
2995
- while (this._root.firstChild) this._root.removeChild(this._root.firstChild);
2996
- if (shadow && styles) {
2997
- const s = document.createElement("style");
2998
- s.textContent = styles;
2999
- this._root.appendChild(s);
3000
- }
3001
- this._root.appendChild(component(this._props));
3002
- }
3003
- };
3004
- }
3005
- function parseAttributeValue(value) {
3006
- try {
3007
- return JSON.parse(value);
3008
- } catch {
3009
- return value;
3010
- }
3011
- }
3012
-
3013
- // src/ssg.ts
3014
- var DEFAULT_TEMPLATE = `<!DOCTYPE html>
16
+ `.trim()}var X=[];function pn(){let e=X;return X=[],e}function fn(e){let t="",n=e.reduce((o,i)=>i.title??o,""),r=e.reduce((o,i)=>i.titleTemplate??o,"");if(n){let o=r?r.replace("%s",n):n;t+=`<title>${o}</title>
17
+ `;}for(let o of e)for(let i of o.meta??[])t+=" <meta",i.name&&(t+=` name="${i.name}"`),i.property&&(t+=` property="${i.property}"`),i.httpEquiv&&(t+=` http-equiv="${i.httpEquiv}"`),t+=` content="${i.content}"`,t+=` />
18
+ `;for(let o of e)for(let i of o.link??[])t+=` <link rel="${i.rel}" href="${i.href}"`,i.type&&(t+=` type="${i.type}"`),t+=` />
19
+ `;return t}var Y="data-akash-head";function j(e$1){let t=typeof e$1=="function"?e$1:()=>e$1;if(typeof document>"u"){X.push(t());return}let n=[],r=e(()=>{let o=t();for(let i of n)i.remove();if(n.length=0,o.title){let i=o.titleTemplate?o.titleTemplate.replace("%s",o.title):o.title;document.title=i;}for(let i of o.meta??[]){let s=document.createElement("meta");s.setAttribute(Y,""),i.name&&s.setAttribute("name",i.name),i.property&&s.setAttribute("property",i.property),i.httpEquiv&&s.setAttribute("http-equiv",i.httpEquiv),s.setAttribute("content",i.content),document.head.appendChild(s),n.push(s);}for(let i of o.link??[]){let s=document.createElement("link");s.setAttribute(Y,""),s.setAttribute("rel",i.rel),s.setAttribute("href",i.href),i.type&&s.setAttribute("type",i.type),document.head.appendChild(s),n.push(s);}for(let i of o.script??[]){let s=document.createElement("script");s.setAttribute(Y,""),i.src&&s.setAttribute("src",i.src),i.type&&s.setAttribute("type",i.type),i.async&&s.setAttribute("async",""),i.defer&&s.setAttribute("defer",""),i.innerHTML&&(s.textContent=i.innerHTML),document.head.appendChild(s),n.push(s);}if(o.htmlAttrs)for(let[i,s]of Object.entries(o.htmlAttrs))document.documentElement.setAttribute(i,s);if(o.bodyAttrs)for(let[i,s]of Object.entries(o.bodyAttrs))document.body.setAttribute(i,s);});try{x(()=>{r();for(let o of n)o.remove();});}catch{}}function mn(e){return e}function gn(e,t){let n=[],r=[],o=[],i={},s=null,a=null,c={provide(d,u){h(d,u);},onError(d){r.push(d);},onBeforeMount(d){o.push(d);},config:i},l={use(d){return n.push(d),l},config(d,u){return i[d]=u,l},mount(d){if(a=typeof d=="string"?document.querySelector(d):d,!a)throw new Error(`[AkashJS] Mount target not found: ${d}`);for(let u of n)u.setup(c);for(let u of o)u();try{s=e(t??{}),a.appendChild(s);}catch(u){let f=u instanceof Error?u:new Error(String(u));if(r.length>0)for(let p of r)p(f);else throw f}},unmount(){s&&a&&(a.removeChild(s),s=null);}};return l}function yn(e,t){let n=c(0),r=c(t?.immediate!==false),o=null;function i(){s(),o=setInterval(()=>n.update(a=>a+1),e);}function s(){o&&(clearInterval(o),o=null);}return r()&&i(),{count:(()=>n()),isActive:(()=>r()),pause(){r.set(false),s();},resume(){r.set(true),i();},reset(){n.set(0);},dispose(){s();}}}function hn(e){let t=c(false),n=null;function r(){o(),t.set(false),n=setTimeout(()=>t.set(true),e);}function o(){n&&(clearTimeout(n),n=null);}return r(),{ready:(()=>t()),restart(){r();},dispose(){o();}}}function Tn(e$1,t){let n=c(e$1()),r=null;return e(()=>{let o=e$1();return r&&clearTimeout(r),r=setTimeout(()=>n.set(o),t),()=>{r&&clearTimeout(r);}}),(()=>n())}function vn(e$1,t){let n=c(e$1()),r=0,o=null;return e(()=>{let i=e$1(),s=Date.now(),a=s-r;return a>=t?(n.set(i),r=s):(o&&clearTimeout(o),o=setTimeout(()=>{n.set(i),r=Date.now();},t-a)),()=>{o&&clearTimeout(o);}}),(()=>n())}function bn(e=0){let t=c(e);return {count:(()=>t()),inc(n=1){t.update(r=>r+n);},dec(n=1){t.update(r=>r-n);},set(n){t.set(n);},reset(){t.set(e);}}}function wn(e=false){let t=c(e);return {value:(()=>t()),toggle(){t.update(n=>!n);},setTrue(){t.set(true);},setFalse(){t.set(false);}}}function xn(e$1){let t,n=c(void 0);return e(()=>{let r=e$1();n.set(t),t=r;}),(()=>n())}function Sn(e){if(typeof window>"u")return(()=>false);let t=window.matchMedia(e),n=c(t.matches),r=o=>n.set(o.matches);return t.addEventListener("change",r),(()=>n())}var En={sm:640,md:768,lg:1024,xl:1280,"2xl":1536};function Pn(e=En){let t=Object.entries(e).sort((s,a)=>s[1]-a[1]),n=c(typeof window<"u"?window.innerWidth:1024);if(typeof window<"u"){let s=()=>n.set(window.innerWidth);window.addEventListener("resize",s,{passive:true});}function r(){let s=n(),a="";for(let[c,l]of t)s>=l&&(a=c);return a||t[0]?.[0]||""}function o(s){let a=e[s];return a!==void 0&&n()>=a}function i(s){let a=e[s];return a!==void 0&&n()<a}return {current:r,gte:o,lt:i,width:(()=>n())}}function kn(e$1,t,n="local"){let r=typeof window<"u"?n==="local"?localStorage:sessionStorage:null,o=t;if(r)try{let s=r.getItem(e$1);s!==null&&(o=JSON.parse(s));}catch{}let i=c(o);return r&&(e(()=>{let s=i();try{r.setItem(e$1,JSON.stringify(s));}catch{}}),typeof window<"u"&&window.addEventListener("storage",s=>{if(s.key===e$1&&s.newValue!==null)try{i.set(JSON.parse(s.newValue));}catch{}})),i}function Cn(e){let t=c(""),n=c(false),r=e?.timeout??2e3,o=null;async function i(s){typeof navigator>"u"||!navigator.clipboard||(await navigator.clipboard.writeText(s),t.set(s),n.set(true),o&&clearTimeout(o),o=setTimeout(()=>n.set(false),r));}return {text:(()=>t()),copied:(()=>n()),copy:i}}function An(){if(typeof window>"u")return(()=>true);let e=c(navigator.onLine);return window.addEventListener("online",()=>e.set(true)),window.addEventListener("offline",()=>e.set(false)),(()=>e())}function Rn(e){let t=c({latitude:null,longitude:null,accuracy:null,error:null,loading:true});return typeof navigator<"u"&&navigator.geolocation?navigator.geolocation.watchPosition(n=>{t.set({latitude:n.coords.latitude,longitude:n.coords.longitude,accuracy:n.coords.accuracy,error:null,loading:false});},n=>{t.set({latitude:null,longitude:null,accuracy:null,error:n,loading:false});},e):t.set({...t(),loading:false}),(()=>t())}function On(){let e=c(typeof window<"u"?window.innerWidth:0),t=c(typeof window<"u"?window.innerHeight:0);return typeof window<"u"&&window.addEventListener("resize",()=>{e.set(window.innerWidth),t.set(window.innerHeight);},{passive:true}),{width:(()=>e()),height:(()=>t())}}function Ln(e,t,n={}){if(typeof document>"u")return ()=>{};let{events:r=["pointerdown"],ignore:o=[],active:i=true}=n,s=i;function a(){return typeof e=="function"?e():e}function c(u){let f=u.target;if(!f)return false;for(let p of o)if(typeof p=="string"){if(f.closest(p))return true}else if(p===f||p.contains(f))return true;return false}function l(u){if(!s)return;let f=a();if(!f)return;let p=u.target;f===p||f.contains(p)||c(u)||t(u);}for(let u of r)document.addEventListener(u,l,{passive:true,capture:true});let d=()=>{for(let u of r)document.removeEventListener(u,l,{capture:true});};return d.enable=()=>{s=true;},d.disable=()=>{s=false;},d}var Dn=A(e=>{let t=null,n=null;function r(){let o=e.props.target;return o?typeof o=="string"?document.querySelector(o)??document.body:o:document.body}return x(()=>{n&&t&&t.removeChild(n);}),()=>{t=r();let o=e.children();return n=u(o),t.appendChild(n),document.createComment("portal")}});var Mn=0;function In(e={}){let{maxVisible:t=5,defaultDuration:n=3e3,position:r="top-right"}=e,o=c([]),i=new Map;function s(d,u,f){let p=`toast-${++Mn}`,y=f?.duration??n,T=f?.dismissible??true,m={id:p,type:d,message:u,duration:y,dismissible:T,createdAt:Date.now()};if(o.update(h=>{let b=[...h,m];if(b.length>t){let P=b.shift();l(P.id);}return b}),y>0){let h=setTimeout(()=>a(p),y);i.set(p,h);}return p}function a(d){l(d),o.update(u=>u.filter(f=>f.id!==d));}function c$1(){for(let[d]of i)l(d);o.set([]);}function l(d){let u=i.get(d);u&&(clearTimeout(u),i.delete(d));}return {toasts:(()=>o()),position:r,success:(d,u)=>s("success",d,u),error:(d,u)=>s("error",d,u),info:(d,u)=>s("info",d,u),warning:(d,u)=>s("warning",d,u),add:s,dismiss:a,dismissAll:c$1}}function Hn(e$1={}){let{themes:t={light:{},dark:{}},storageKey:n="akash-theme",attribute:r="data-theme",syncSystem:o=true}=e$1,i=Object.keys(t);function s(){return typeof window>"u"?e$1.defaultTheme??"light":window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function a(){if(typeof window<"u"&&n){let u=localStorage.getItem(n);if(u&&i.includes(u))return u}return e$1.defaultTheme??s()}let c$1=c(a()),l=d(()=>c$1()==="dark");function d$1(u){if(typeof document>"u")return;document.documentElement.setAttribute(r,u);let f=t[u];if(f)for(let[p,y]of Object.entries(f))document.documentElement.style.setProperty(p,y);document.documentElement.classList.remove(...i),document.documentElement.classList.add(u);}return e(()=>{let u=c$1();d$1(u),typeof window<"u"&&n&&localStorage.setItem(n,u);}),o&&typeof window<"u"&&window.matchMedia("(prefers-color-scheme: dark)").addEventListener("change",f=>{localStorage.getItem(n)||c$1.set(f.matches?"dark":"light");}),{current:()=>c$1(),isDark:l,set(u){i.includes(u)&&c$1.set(u);},toggle(){c$1.set(l()?"light":"dark");},setSystem(){typeof window<"u"&&n&&localStorage.removeItem(n),c$1.set(s());},themes:i}}function Z(e,t,n,r,o=3){let i=Math.floor(e/n),s=Math.ceil(t/n),a=Math.max(0,i-o),c=Math.min(r,i+s+o);return {start:a,end:c,totalHeight:r*n,offsetTop:a*n}}function jn(e){let t=c(0),n=c(e.containerHeight??400),r=e.overscan??3,o=d(()=>Z(t(),n(),e.itemHeight,e.items().length,r)),i=d(()=>{let c=o();return e.items().slice(c.start,c.end).map((l,d)=>({item:l,index:c.start+d}))});function s(c){let l=c.target;t.set(l.scrollTop);}function a(c){n.set(c);}return {range:o,visibleItems:i,onScroll:s,setContainerHeight:a,scrollTop:(()=>t())}}var Fn=A(e=>{let{itemHeight:t,containerHeight:n,overscan:r=3}=e.props,o=c(0);return ()=>{let i=e.props.each,s=n??400,a=Z(o(),s,t,i.length,r),c=document.createElement("div");c.style.height=`${s}px`,c.style.overflow="auto",c.style.position="relative",c.addEventListener("scroll",()=>{o.set(c.scrollTop);},{passive:true});let l=document.createElement("div");l.style.height=`${a.totalHeight}px`,l.style.position="relative";let d=document.createElement("div");d.style.position="absolute",d.style.top=`${a.offsetTop}px`,d.style.left="0",d.style.right="0";for(let u$1=a.start;u$1<a.end;u$1++){let f=i[u$1];if(!f)continue;let p=u(e.props.children(f,u$1));p instanceof HTMLElement&&(p.style.height=`${t}px`),d.appendChild(p);}return l.appendChild(d),c.appendChild(l),c}});function Nn(e){let t=typeof e=="function"?{loader:e}:e,{loader:n,loading:r,error:o,timeout:i,delay:s=200}=t,a=null,c$1=null,l=null;function d(){return c$1||(c$1=n().then(u=>{a=u.default;}).catch(u=>{l=u instanceof Error?u:new Error(String(u));}),c$1)}return A(u$1=>{let f=c("loading"),p=c(false);d().then(()=>{l?f.set("error"):f.set("ready");});let y=null;s>0?y=setTimeout(()=>p.set(true),s):p.set(true);let T=null;return i&&(T=setTimeout(()=>{f()==="loading"&&(l=new Error(`Async component timed out after ${i}ms`),f.set("error"));},i)),()=>{let m=f();return m!=="loading"&&(y&&clearTimeout(y),T&&clearTimeout(T)),m==="ready"&&a?a(u$1.props):m==="error"&&o&&l?u(o(l)):m==="loading"&&p()&&r?u(r()):document.createComment("async-loading")}})}function ge(e){let t=e.length;if(t===0)return [];let n=[],r=new Array(t).fill(-1),o=[];for(let a=0;a<t;a++){let c=e[a];if(c===-1)continue;let l=0,d=n.length;for(;l<d;){let u=l+d>>1;n[u]<c?l=u+1:d=u;}n[l]=c,o[l]=a,l>0&&(r[a]=o[l-1]);}let i=new Array(n.length),s=o[n.length-1];for(let a=n.length-1;a>=0;a--)i[a]=s,s=r[s];return i}function ye(e,t){let n=[],r=new Map;for(let a=0;a<e.length;a++)r.set(e[a],a);let o=new Array(t.length);for(let a=0;a<t.length;a++)o[a]=r.get(t[a])??-1;let i=new Set(t);for(let a=0;a<e.length;a++)i.has(e[a])||n.push({type:"remove",oldIndex:a});let s=new Set(ge(o));for(let a=0;a<t.length;a++)o[a]===-1?n.push({type:"insert",newIndex:a}):s.has(a)||n.push({type:"move",newIndex:a,oldIndex:o[a]});return n}function $n(e,t){let n=ye(e,t),r=0,o=0,i=0;for(let s of n)s.type==="insert"?r++:s.type==="move"?o++:i++;return {inserts:r,moves:o,removes:i}}var M=false,D=new Map,he=0;function _n(){M=true;}function Kn(){M=false,D.clear();}function Vn(){return M}function zn(e){if(!M)return -1;let t=++he;return D.set(t,{id:t,createdAt:Date.now(),stackTrace:Gn(),componentName:e??null,disposed:false}),t}function Wn(e){if(!M||e===-1)return;let t=D.get(e);t&&(t.disposed=true,D.delete(e));}function qn(){return Array.from(D.values())}function Te(e=3e4){if(!M)return [];let t=Date.now(),n=[];for(let r of D.values())!r.disposed&&t-r.createdAt>e&&n.push({effectId:r.id,age:t-r.createdAt,componentName:r.componentName,stackTrace:r.stackTrace});return n}function Bn(e=3e4){let t=Te(e);if(t.length!==0){console.warn(`[AkashJS] ${t.length} potential effect leak(s) detected:`);for(let n of t){let r=n.componentName?` in ${n.componentName}`:"";console.warn(` Effect #${n.effectId}${r} \u2014 active for ${(n.age/1e3).toFixed(1)}s`),n.stackTrace&&console.warn(` Created at:
20
+ ${n.stackTrace}`);}}}function Un(){return {enabled:M,activeCount:D.size,totalTracked:he}}function Gn(){try{let t=new Error().stack;return t?t.split(`
21
+ `).slice(3,8).join(`
22
+ `):null}catch{return null}}var V=false,te=[],ee=0;function Qn(){V=true,te=[],ee=performance.now();}function Jn(){V=false;let e=performance.now();return {entries:[...te],totalDuration:e-ee,startTime:ee,endTime:e}}function Yn(){return V}function z(e,t,n){V&&te.push({type:e,name:t,duration:n,timestamp:performance.now()});}function ve(e){let t=e.entries.filter(a=>a.type==="render"),n=e.entries.filter(a=>a.type==="effect"),r=e.entries.filter(a=>a.type==="signal-update"),o=e.entries.filter(a=>a.type==="computed"),i=a=>a.length>0?a.reduce((c,l)=>c+l.duration,0)/a.length:0,s=a=>a.length>0?a.reduce((c,l)=>l.duration>c.duration?l:c):null;return {totalRenders:t.length,totalEffects:n.length,totalSignalUpdates:r.length,totalComputedEvals:o.length,avgRenderTime:i(t),avgEffectTime:i(n),slowestRender:s(t),slowestEffect:s(n)}}function Xn(e,t){let n=performance.now(),r=t(),o=performance.now()-n;return z("render",e,o),{result:r,duration:o}}async function Zn(e,t){let n=performance.now(),r=await t(),o=performance.now()-n;return z("render",e,o),{result:r,duration:o}}function er(e){let t=0,n=0;return {start(){t=performance.now();},stop(){n=performance.now()-t,z("render",e,n);},get duration(){return n}}}function tr(e){let t=ve(e),n=`
23
+ Performance Profile
24
+ `;return n+=" "+"\u2500".repeat(50)+`
25
+ `,n+=` Duration: ${e.totalDuration.toFixed(1)} ms
26
+ `,n+=` Renders: ${t.totalRenders} (avg ${t.avgRenderTime.toFixed(2)} ms)
27
+ `,n+=` Effects: ${t.totalEffects} (avg ${t.avgEffectTime.toFixed(2)} ms)
28
+ `,n+=` Signal updates: ${t.totalSignalUpdates}
29
+ `,n+=` Computed evals: ${t.totalComputedEvals}
30
+ `,t.slowestRender&&(n+=` Slowest render: ${t.slowestRender.name} (${t.slowestRender.duration.toFixed(2)} ms)
31
+ `),t.slowestEffect&&(n+=` Slowest effect: ${t.slowestEffect.name} (${t.slowestEffect.duration.toFixed(2)} ms)
32
+ `),n+=" "+"\u2500".repeat(50)+`
33
+ `,n}var nr=["a[href]","button:not([disabled])","input:not([disabled])","select:not([disabled])","textarea:not([disabled])",'[tabindex]:not([tabindex="-1"])',"[contenteditable]"].join(", ");function rr(e,t={}){let{initialFocus:n,returnFocus:r=true,escapeDeactivates:o=true,allowOutsideClick:i=false,onDeactivate:s}=t,a=c(false),c$1=null;function l(){return typeof e=="function"?e():e}function d(){let T=l();return T?Array.from(T.querySelectorAll(nr)):[]}function u(T){if(T.key==="Escape"&&o){T.preventDefault(),y(),s?.();return}if(T.key!=="Tab")return;let m=d();if(m.length===0)return;let h=m[0],b=m[m.length-1];T.shiftKey?document.activeElement===h&&(T.preventDefault(),b.focus()):document.activeElement===b&&(T.preventDefault(),h.focus());}function f(T){if(!a()||i)return;let m=l();if(!m)return;let h=T.relatedTarget;if(h&&!m.contains(h)){let b=d();b.length>0&&b[0].focus();}}function p(){if(a())return;a.set(true),c$1=document.activeElement,document.addEventListener("keydown",u,true);let T=l();T&&T.addEventListener("focusout",f),requestAnimationFrame(()=>{if(n)(typeof n=="string"?l()?.querySelector(n):n)?.focus();else {let m=d();m.length>0&&m[0].focus();}});}function y(){if(!a())return;a.set(false),document.removeEventListener("keydown",u,true);let T=l();T&&T.removeEventListener("focusout",f),r&&c$1&&(c$1.focus(),c$1=null);}return {activate:p,deactivate:y,active:()=>a()}}var W=null;function or(){if(W&&document.body.contains(W))return W;let e=document.createElement("div");return e.setAttribute("role","status"),e.setAttribute("aria-live","polite"),e.setAttribute("aria-atomic","true"),e.style.cssText=["position: absolute","width: 1px","height: 1px","padding: 0","margin: -1px","overflow: hidden","clip: rect(0,0,0,0)","white-space: nowrap","border: 0"].join("; "),document.body.appendChild(e),W=e,e}function ir(){return (e,t="polite")=>{if(typeof document>"u")return;let n=or();n.setAttribute("aria-live",t),n.textContent="",requestAnimationFrame(()=>{n.textContent=e;});}}function sr(){let e=[],t=new Set,n=false;function r(s){for(let a of e)if(!(a.scope&&!t.has(a.scope))&&ar(s,a.key)){a.preventDefault!==false&&s.preventDefault(),a.handler(s);return}}function o(){n||typeof document>"u"||(document.addEventListener("keydown",r),n=true);}function i(s,a,c){let l={key:s,handler:a,scope:c?.scope,description:c?.description??"",preventDefault:c?.preventDefault};return e.push(l),o(),()=>{let d=e.indexOf(l);d!==-1&&e.splice(d,1);}}return {bind:i,enableScope(s){t.add(s);},disableScope(s){t.delete(s);},getBindings(){return e.map(s=>({key:cr(s.key),description:s.description??"",scope:s.scope}))},dispose(){e.length=0,typeof document<"u"&&document.removeEventListener("keydown",r),n=false;}}}function ar(e,t){let n=t.toLowerCase().split("+"),r=n.pop(),o=n.includes("mod"),i=n.includes("ctrl"),s=n.includes("shift"),a=n.includes("alt"),l=typeof navigator<"u"&&navigator.platform?.includes("Mac")?e.metaKey:e.ctrlKey;return o&&!l||i&&!e.ctrlKey||s&&!e.shiftKey||a&&!e.altKey?false:e.key.toLowerCase()===r||e.code.toLowerCase()===r}function cr(e){let t=typeof navigator<"u"&&navigator.platform?.includes("Mac");return e.replace(/mod/gi,t?"\u2318":"Ctrl").replace(/shift/gi,t?"\u21E7":"Shift").replace(/alt/gi,t?"\u2325":"Alt").replace(/\+/g,t?"":"+")}var lr=A(e=>{let t=c(false),n=c(false);return ()=>{let{src:r,alt:o,width:i,height:s,loading:a="lazy",srcset:c,sizes:l,placeholder:d,blurDataUrl:u,class:f,fallbackSrc:p,onLoad:y,onError:T}=e.props,m=document.createElement("div");if(m.style.position="relative",m.style.display="inline-block",m.style.overflow="hidden",i&&(m.style.width=`${i}px`),s&&(m.style.height=`${s}px`),d==="blur"&&u&&!t()){let b=document.createElement("img");b.src=u,b.alt="",b.setAttribute("aria-hidden","true"),b.style.cssText="position:absolute;inset:0;width:100%;height:100%;object-fit:cover;filter:blur(20px);transform:scale(1.1);",m.appendChild(b);}let h=document.createElement("img");if(h.alt=o,h.loading=a,n()&&p?h.src=p:h.src=r,c&&(h.srcset=c),l&&(h.sizes=l),i&&(h.width=i),s&&(h.height=s),f&&(h.className=f),h.style.display="block",h.style.width="100%",h.style.height="auto",h.addEventListener("load",()=>{t.set(true),y?.();}),h.addEventListener("error",b=>{n.set(true),T?.(b);}),a==="lazy"&&typeof IntersectionObserver<"u"){h.setAttribute("data-src",h.src);let b=h.src;h.removeAttribute("src");let P=new IntersectionObserver(v=>{v[0].isIntersecting&&(h.src=b,P.disconnect());},{rootMargin:"200px"});requestAnimationFrame(()=>{h.parentElement?P.observe(h):h.src=b;});}return m.appendChild(h),m}});function ur(e){let{onLoadMore:t,hasMore:n,rootMargin:r="200px",threshold:o=0}=e,i=c(false),s=c(false),a=null,c$1=null,l=false;async function d(){if(!(i()||s()||l)){if(!n()){s.set(true);return}i.set(true);try{await t(),n()||s.set(!0);}finally{i.set(false);}}}function u(p){typeof IntersectionObserver>"u"||(a=new IntersectionObserver(y=>{y[0]?.isIntersecting&&d();},{rootMargin:r,threshold:o}),a.observe(p));}function f(){return c$1||(c$1=document.createElement("div"),c$1.setAttribute("data-akash-sentinel",""),c$1.style.height="1px",c$1.setAttribute("aria-hidden","true"),requestAnimationFrame(()=>{c$1&&!l&&u(c$1);}),c$1)}return {sentinel:f,loading:()=>i(),done:()=>s(),reset(){s.set(false),i.set(false);},dispose(){l=true,a?.disconnect(),a=null;}}}function be(...e){let t=[];for(let n of e)if(n){if(typeof n=="string")t.push(n);else if(Array.isArray(n)){let r=be(...n);r&&t.push(r);}else if(typeof n=="object")for(let[r,o]of Object.entries(n))o&&t.push(r);}return t.join(" ")}function dr(e){let t=[];for(let[n,r]of Object.entries(e)){if(r==null)continue;let o=ne(n),i=typeof r=="number"&&!we.has(n)?`${r}px`:String(r);t.push(`${o}: ${i}`);}return t.join("; ")}function pr(e,t){for(let[n,r]of Object.entries(t))if(r==null)e.style.removeProperty(ne(n));else {let o=typeof r=="number"&&!we.has(n)?`${r}px`:String(r);e.style.setProperty(ne(n),o);}}function ne(e){return e.replace(/[A-Z]/g,t=>`-${t.toLowerCase()}`)}var we=new Set(["animationIterationCount","boxFlex","boxFlexGroup","boxOrdinalGroup","columnCount","fillOpacity","flex","flexGrow","flexPositive","flexShrink","flexNegative","flexOrder","fontWeight","gridColumn","gridRow","lineClamp","lineHeight","opacity","order","orphans","tabSize","widows","zIndex","zoom"]);function fr(e){let{data:t,columns:n,pageSize:r=0,initialSort:o}=e,i=c(o??{column:null,direction:null}),s=c(""),a=c(1),c$1=c(Object.fromEntries(n.map(v=>[v.key,v.visible!==false]))),l=d(()=>{let v=c$1();return n.filter(x=>v[x.key])}),d$1=d(()=>{let v=s().toLowerCase().trim();if(!v)return t();let x=n.filter(k=>k.filterable);return x.length===0?t():t().filter(k=>x.some(A=>{let R=re(k,A.key);return String(R).toLowerCase().includes(v)}))}),u=d(()=>{let{column:v,direction:x}=i(),k=[...d$1()];if(!v||!x)return k;let A=n.find(R=>R.key===v);return A?k.sort((R,ce)=>{if(A.compare){let ue=A.compare(R,ce);return x==="desc"?-ue:ue}let Ye=re(R,v),Xe=re(ce,v),le=mr(Ye,Xe);return x==="desc"?-le:le}):k}),f=d(()=>d$1().length),p=d(()=>r<=0?1:Math.max(1,Math.ceil(f()/r))),y=d(()=>{let v=u();if(r<=0)return v;let x=(a()-1)*r;return v.slice(x,x+r)});function T(v){let x=i();x.column===v?x.direction==="asc"?i.set({column:v,direction:"desc"}):x.direction==="desc"?i.set({column:null,direction:null}):i.set({column:v,direction:"asc"}):i.set({column:v,direction:"asc"}),a.set(1);}function m(v){s.set(v),a.set(1);}function h(v){c$1.update(x=>({...x,[v]:!x[v]}));}function b(v){c$1.update(x=>({...x,[v]:true}));}function P(v){c$1.update(x=>({...x,[v]:false}));}return {rows:y,allRows:u,totalRows:f,visibleColumns:l,sortState:()=>i(),filterText:()=>s(),page:()=>a(),totalPages:p,sort:T,filter:m,toggleColumn:h,showColumn:b,hideColumn:P,nextPage(){a()<p()&&a.update(v=>v+1);},prevPage(){a()>1&&a.update(v=>v-1);},goToPage(v){a.set(Math.max(1,Math.min(v,p())));},reset(){i.set({column:null,direction:null}),s.set(""),a.set(1);}}}function re(e,t){return t.split(".").reduce((n,r)=>n?.[r],e)}function mr(e,t){return e==null&&t==null?0:e==null?-1:t==null?1:typeof e=="number"&&typeof t=="number"?e-t:String(e).localeCompare(String(t))}function xe(e){let t=Array.isArray(e)?e:[e];for(let n of t){let r={"@context":"https://schema.org",...n};j({script:[{type:"application/ld+json",innerHTML:JSON.stringify(r)}]});}}function Se(e){let t=[{property:"og:title",content:e.title}];e.description&&t.push({property:"og:description",content:e.description}),e.image&&t.push({property:"og:image",content:e.image}),e.url&&t.push({property:"og:url",content:e.url}),e.type&&t.push({property:"og:type",content:e.type}),e.siteName&&t.push({property:"og:site_name",content:e.siteName}),e.locale&&t.push({property:"og:locale",content:e.locale}),j({meta:t});}function Ee(e){let t=[{name:"twitter:title",content:e.title}];e.card&&t.push({name:"twitter:card",content:e.card}),e.description&&t.push({name:"twitter:description",content:e.description}),e.image&&t.push({name:"twitter:image",content:e.image}),e.site&&t.push({name:"twitter:site",content:e.site}),e.creator&&t.push({name:"twitter:creator",content:e.creator}),j({meta:t});}function gr(e){let t=[];e.description&&t.push({name:"description",content:e.description}),e.robots&&t.push({name:"robots",content:e.robots});let n=[];e.canonical&&n.push({rel:"canonical",href:e.canonical}),j({title:e.title,meta:t,link:n}),e.openGraph&&Se(e.openGraph),e.twitter&&Ee(e.twitter),e.structuredData&&xe(e.structuredData);}function yr(e,t){let n=`<?xml version="1.0" encoding="UTF-8"?>
34
+ `;n+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
35
+ `;for(let r of t)n+=` <url>
36
+ `,n+=` <loc>${e}${r.url}</loc>
37
+ `,r.lastmod&&(n+=` <lastmod>${r.lastmod}</lastmod>
38
+ `),r.changefreq&&(n+=` <changefreq>${r.changefreq}</changefreq>
39
+ `),r.priority!=null&&(n+=` <priority>${r.priority}</priority>
40
+ `),n+=` </url>
41
+ `;return n+=`</urlset>
42
+ `,n}function hr(e,t,...n){return t(e,...n)}function Tr(...e){return (t,...n)=>{let r=t;for(let o of e)r=o(r,...n);return r}}function vr(e){return e}var br=e=>String(e).toUpperCase(),wr=e=>String(e).toLowerCase(),xr=e=>{let t=String(e);return t.charAt(0).toUpperCase()+t.slice(1)},Sr=e=>String(e).replace(/\b\w/g,t=>t.toUpperCase()),Er=e=>String(e).trim(),Pr=(e,t=50,n="...")=>{let r=String(e);return r.length<=t?r:r.slice(0,t-n.length)+n},kr=(e,t="medium",n)=>{let r=e instanceof Date?e:new Date(e);if(isNaN(r.getTime()))return String(e);if(t==="iso")return r.toISOString();let o=n??"en-US",i={short:{year:"2-digit",month:"numeric",day:"numeric"},medium:{year:"numeric",month:"numeric",day:"numeric"},long:{year:"numeric",month:"long",day:"numeric"},full:{weekday:"long",year:"numeric",month:"long",day:"numeric"},time:{hour:"numeric",minute:"2-digit"}};return new Intl.DateTimeFormat(o,i[t]).format(r)},Cr=(e,t="USD",n)=>new Intl.NumberFormat(n??"en-US",{style:"currency",currency:t}).format(Number(e)),Ar=(e,t,n)=>{let r={};if(t){let[o,i]=t.split("-").map(Number);r.minimumFractionDigits=o,r.maximumFractionDigits=i??o;}return new Intl.NumberFormat(n??"en-US",r).format(Number(e))},Rr=(e,t=0,n)=>new Intl.NumberFormat(n??"en-US",{style:"percent",minimumFractionDigits:t,maximumFractionDigits:t}).format(Number(e)),Or=(e,t=2)=>JSON.stringify(e,null,t),Lr=(e,t,n)=>{let r=n??`${t}s`;return `${e} ${e===1?t:r}`},Dr=(e,t)=>{let r=(e instanceof Date?e.getTime():Number(e))-Date.now(),o=Math.abs(r),i=[[6e4,"second"],[36e5,"minute"],[864e5,"hour"],[2592e6,"day"],[31536e6,"month"],[1/0,"year"]],s={second:1e3,minute:6e4,hour:36e5,day:864e5,month:2592e6,year:31536e6},a="second";for(let[u,f]of i)if(o<u){a=f;break}let c=Math.round(r/s[a]);if(typeof Intl<"u"&&Intl.RelativeTimeFormat)return new Intl.RelativeTimeFormat(t??"en",{numeric:"auto"}).format(c,a);let l=Math.abs(c),d=c<0?"ago":"from now";return `${l} ${a}${l!==1?"s":""} ${d}`};function I(e){return {_type:"directive",hooks:e}}function Mr(e){return I({mounted(t,n){let r=e(t,n);typeof r=="function"&&(t.__directiveCleanup=r);},unmounted(t){t.__directiveCleanup?.();}})}var $=Symbol("akash.directives");function Ir(e,t,n,r){let o={value:n,arg:r?.arg,modifiers:r?.modifiers},i=e[$]??[];i.push({directive:t,binding:o}),e[$]=i,t.hooks.mounted?.(e,o);}function Hr(e,t,n){let o=(e[$]??[]).find(i=>i.directive===t);if(o){let i=o.binding.value;o.binding={...o.binding,value:n,oldValue:i},t.hooks.updated?.(e,o.binding);}}function jr(e){let t=e[$]??[];for(let n of t)n.directive.hooks.unmounted?.(e,n.binding);delete e[$];}var Fr=I({mounted(e){requestAnimationFrame(()=>e.focus());}}),Nr=I({mounted(e,{value:t}){let n=r=>{e.contains(r.target)||t();};document.addEventListener("click",n,true),e.__vClickOutside=n;},unmounted(e){document.removeEventListener("click",e.__vClickOutside,true),delete e.__vClickOutside;}}),$r=I({mounted(e,{value:t}){let n=null,r=t.duration??500,o=()=>{n=setTimeout(t.handler,r);},i=()=>{n&&(clearTimeout(n),n=null);};e.addEventListener("pointerdown",o),e.addEventListener("pointerup",i),e.addEventListener("pointerleave",i),e.__vLongPress={start:o,cancel:i};},unmounted(e){let t=e.__vLongPress;t&&(e.removeEventListener("pointerdown",t.start),e.removeEventListener("pointerup",t.cancel),e.removeEventListener("pointerleave",t.cancel));}}),_r=I({mounted(e,{value:t}){let n=new IntersectionObserver(r=>{t(r[0].isIntersecting);});n.observe(e),e.__vIntersect=n;},unmounted(e){e.__vIntersect?.disconnect();}}),Kr=I({mounted(e,{value:t}){let n=new ResizeObserver(r=>{t(r[0]);});n.observe(e),e.__vResize=n;},unmounted(e){e.__vResize?.disconnect();}});function Vr(e,t,n={}){let{props:r=[],shadow:o=true,styles:i}=n;class s extends HTMLElement{static get observedAttributes(){return r}_root;_mounted=false;_props={};constructor(){super(),this._root=o?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let c of r){let l=this.getAttribute(c);l!==null&&(this._props[c]=q(l));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(c,l,d){this._props[c]=d!==null?q(d):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(o&&i){let l=document.createElement("style");l.textContent=i,this._root.appendChild(l);}let c=t(this._props);this._root.appendChild(c);}setProps(c){Object.assign(this._props,c),this._mounted&&this._render();}}return typeof customElements<"u"&&!customElements.get(e)&&(n.extends?customElements.define(e,s,{extends:n.extends}):customElements.define(e,s)),s}function zr(e,t={}){let{props:n=[],shadow:r=true,styles:o}=t;return class extends HTMLElement{static get observedAttributes(){return n}_root;_mounted=false;_props={};constructor(){super(),this._root=r?this.attachShadow({mode:"open"}):this;}connectedCallback(){for(let i of n){let s=this.getAttribute(i);s!==null&&(this._props[i]=q(s));}this._render(),this._mounted=true;}disconnectedCallback(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);this._mounted=false;}attributeChangedCallback(i,s,a){this._props[i]=a!==null?q(a):void 0,this._mounted&&this._render();}_render(){for(;this._root.firstChild;)this._root.removeChild(this._root.firstChild);if(r&&o){let i=document.createElement("style");i.textContent=o,this._root.appendChild(i);}this._root.appendChild(e(this._props));}}}function q(e){try{return JSON.parse(e)}catch{return e}}var Wr=`<!DOCTYPE html>
3015
43
  <html lang="en">
3016
44
  <head>
3017
45
  <meta charset="UTF-8">
@@ -3022,1575 +50,24 @@ var DEFAULT_TEMPLATE = `<!DOCTYPE html>
3022
50
  <div id="app">{{content}}</div>
3023
51
  {{scripts}}
3024
52
  </body>
3025
- </html>`;
3026
- async function prerender(options) {
3027
- const {
3028
- routes: routesInput,
3029
- render,
3030
- outDir = "dist",
3031
- template = DEFAULT_TEMPLATE,
3032
- onPage,
3033
- onError: onError2,
3034
- concurrency = 5
3035
- } = options;
3036
- const start = Date.now();
3037
- const routes = typeof routesInput === "function" ? await routesInput() : routesInput;
3038
- const result = {
3039
- rendered: [],
3040
- errors: [],
3041
- duration: 0
3042
- };
3043
- for (let i = 0; i < routes.length; i += concurrency) {
3044
- const batch2 = routes.slice(i, i + concurrency);
3045
- await Promise.all(batch2.map(async (url) => {
3046
- try {
3047
- const content = await render(url);
3048
- const html = template.replace("{{content}}", content).replace("{{head}}", "").replace("{{scripts}}", "");
3049
- const filePath = urlToFilePath(url);
3050
- result.rendered.push({
3051
- url,
3052
- file: `${outDir}/${filePath}`,
3053
- size: new Blob([html]).size
3054
- });
3055
- onPage?.(url, html);
3056
- } catch (err) {
3057
- const error = err instanceof Error ? err : new Error(String(err));
3058
- result.errors.push({ url, error: error.message });
3059
- onError2?.(url, error);
3060
- }
3061
- }));
3062
- }
3063
- result.duration = Date.now() - start;
3064
- return result;
3065
- }
3066
- function discoverStaticRoutes(routeManifest) {
3067
- return routeManifest.filter((r) => !r.path.includes(":") && !r.path.includes("*")).map((r) => r.path);
3068
- }
3069
- function generatePaths(pattern, params) {
3070
- return params.map((p) => {
3071
- let path = pattern;
3072
- for (const [key, value] of Object.entries(p)) {
3073
- path = path.replace(`:${key}`, value);
3074
- }
3075
- return path;
3076
- });
3077
- }
3078
- function urlToFilePath(url) {
3079
- const clean = url.replace(/^\//, "").replace(/\/$/, "");
3080
- if (!clean) return "index.html";
3081
- return `${clean}/index.html`;
3082
- }
3083
- function sitemapFromResults(baseUrl, results) {
3084
- let xml = '<?xml version="1.0" encoding="UTF-8"?>\n';
3085
- xml += '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n';
3086
- for (const page of results.rendered) {
3087
- xml += ` <url>
3088
- `;
3089
- xml += ` <loc>${baseUrl}${page.url}</loc>
3090
- `;
3091
- xml += ` <lastmod>${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}</lastmod>
3092
- `;
3093
- xml += ` </url>
3094
- `;
3095
- }
3096
- xml += "</urlset>\n";
3097
- return xml;
3098
- }
3099
-
3100
- // src/switch.ts
3101
- function renderSwitch(parent, anchor, expression, cases) {
3102
- let currentNodes = [];
3103
- const dispose = effect(
3104
- () => {
3105
- const value = String(expression());
3106
- for (const node of currentNodes) {
3107
- if (node.parentNode) node.parentNode.removeChild(node);
3108
- }
3109
- currentNodes = [];
3110
- const branch = cases[value] ?? cases._default;
3111
- if (branch) {
3112
- const node = branch();
3113
- const nodes = node instanceof DocumentFragment ? Array.from(node.childNodes) : [node];
3114
- for (const n of nodes) {
3115
- parent.insertBefore(n, anchor);
3116
- }
3117
- currentNodes = nodes;
3118
- }
3119
- },
3120
- { render: true }
3121
- );
3122
- return () => {
3123
- dispose();
3124
- for (const node of currentNodes) {
3125
- if (node.parentNode) node.parentNode.removeChild(node);
3126
- }
3127
- };
3128
- }
3129
- var Switch = defineComponent((ctx) => {
3130
- return () => {
3131
- const container = document.createElement("div");
3132
- container.style.display = "contents";
3133
- const anchor = document.createComment("switch");
3134
- container.appendChild(anchor);
3135
- const casesMap = { ...ctx.props.cases };
3136
- if (ctx.props.fallback) {
3137
- casesMap._default = () => nodeToDOM(ctx.props.fallback());
3138
- }
3139
- renderSwitch(
3140
- container,
3141
- anchor,
3142
- () => ctx.props.on,
3143
- Object.fromEntries(
3144
- Object.entries(casesMap).map(([k, v]) => [
3145
- k,
3146
- () => nodeToDOM(v())
3147
- ])
3148
- )
3149
- );
3150
- return container;
3151
- };
3152
- });
3153
- function match(value, cases) {
3154
- const key = String(value);
3155
- const branch = cases[key] ?? cases._;
3156
- return branch ? branch(value) : void 0;
3157
- }
3158
-
3159
- // src/di.ts
3160
- var providerIdCounter = 0;
3161
- function defineProvider(config) {
3162
- return {
3163
- _type: "provider",
3164
- factory: config.factory,
3165
- providedIn: config.providedIn,
3166
- multi: config.multi,
3167
- _id: /* @__PURE__ */ Symbol(`provider-${++providerIdCounter}`)
3168
- };
3169
- }
3170
- var rootInstances = /* @__PURE__ */ new Map();
3171
- function createInjector(providers = [], parent) {
3172
- const instances = /* @__PURE__ */ new Map();
3173
- const multiInstances = /* @__PURE__ */ new Map();
3174
- const registrations = /* @__PURE__ */ new Map();
3175
- for (const reg of providers) {
3176
- registrations.set(reg.provide._id, reg);
3177
- }
3178
- const injector = {
3179
- get(provider) {
3180
- const id = provider._id;
3181
- if (provider.multi) {
3182
- if (multiInstances.has(id)) return multiInstances.get(id);
3183
- const values = [];
3184
- const reg2 = registrations.get(id);
3185
- if (reg2?.useFactory) values.push(reg2.useFactory());
3186
- else if (reg2?.useValue !== void 0) values.push(reg2.useValue);
3187
- if (parent?.has(provider)) {
3188
- const parentValues = parent.get(provider);
3189
- if (Array.isArray(parentValues)) values.push(...parentValues);
3190
- }
3191
- multiInstances.set(id, values);
3192
- return values;
3193
- }
3194
- if (instances.has(id)) return instances.get(id);
3195
- if (provider.providedIn === "root" && rootInstances.has(id)) {
3196
- return rootInstances.get(id);
3197
- }
3198
- const reg = registrations.get(id);
3199
- if (reg) {
3200
- const instance2 = resolveRegistration(reg, injector);
3201
- instances.set(id, instance2);
3202
- return instance2;
3203
- }
3204
- if (parent) {
3205
- return parent.get(provider);
3206
- }
3207
- const instance = provider.factory();
3208
- if (provider.providedIn === "root") {
3209
- rootInstances.set(id, instance);
3210
- } else {
3211
- instances.set(id, instance);
3212
- }
3213
- return instance;
3214
- },
3215
- has(provider) {
3216
- if (instances.has(provider._id)) return true;
3217
- if (registrations.has(provider._id)) return true;
3218
- if (provider.providedIn === "root" && rootInstances.has(provider._id)) return true;
3219
- if (parent) return parent.has(provider);
3220
- return false;
3221
- },
3222
- createChild(childProviders) {
3223
- return createInjector(childProviders ?? [], injector);
3224
- },
3225
- dispose() {
3226
- instances.clear();
3227
- multiInstances.clear();
3228
- }
3229
- };
3230
- return injector;
3231
- }
3232
- function resolveRegistration(reg, injector) {
3233
- if (reg.useValue !== void 0) return reg.useValue;
3234
- if (reg.useFactory) return reg.useFactory();
3235
- if (reg.useExisting) return injector.get(reg.useExisting);
3236
- return reg.provide.factory();
3237
- }
3238
- function injectProvider(provider) {
3239
- {
3240
- if (provider.providedIn === "root") {
3241
- if (rootInstances.has(provider._id)) {
3242
- return rootInstances.get(provider._id);
3243
- }
3244
- const instance = provider.factory();
3245
- rootInstances.set(provider._id, instance);
3246
- return instance;
3247
- }
3248
- return provider.factory();
3249
- }
3250
- }
3251
- function clearProviders() {
3252
- rootInstances.clear();
3253
- }
3254
-
3255
- // src/animate.ts
3256
- function animate(el, properties, options = {}) {
3257
- const {
3258
- duration = 300,
3259
- easing = "ease",
3260
- delay = 0,
3261
- iterations = 1,
3262
- direction = "normal",
3263
- fill = "forwards",
3264
- onComplete
3265
- } = options;
3266
- const keyframes2 = [{}, {}];
3267
- for (const [prop, value] of Object.entries(properties)) {
3268
- const cssProperty = prop === "y" ? "translateY" : prop === "x" ? "translateX" : prop;
3269
- if (Array.isArray(value)) {
3270
- const [from, to] = value;
3271
- if (cssProperty === "translateY" || cssProperty === "translateX") {
3272
- keyframes2[0].transform = `${cssProperty}(${typeof from === "number" ? from + "px" : from})`;
3273
- keyframes2[1].transform = `${cssProperty}(${typeof to === "number" ? to + "px" : to})`;
3274
- } else {
3275
- keyframes2[0][cssProperty] = from;
3276
- keyframes2[1][cssProperty] = to;
3277
- }
3278
- } else {
3279
- keyframes2[1][cssProperty] = value;
3280
- }
3281
- }
3282
- const animation = el.animate(keyframes2, {
3283
- duration,
3284
- easing,
3285
- delay,
3286
- iterations,
3287
- direction,
3288
- fill
3289
- });
3290
- const finished = new Promise((resolve) => {
3291
- animation.onfinish = () => {
3292
- onComplete?.();
3293
- resolve();
3294
- };
3295
- });
3296
- return {
3297
- play: () => animation.play(),
3298
- pause: () => animation.pause(),
3299
- cancel: () => animation.cancel(),
3300
- reverse: () => animation.reverse(),
3301
- finished
3302
- };
3303
- }
3304
- function animateStagger(selector, properties, options = {}) {
3305
- const { stagger = 50, from = "start", ...animOptions } = options;
3306
- const elements = typeof selector === "string" ? Array.from(document.querySelectorAll(selector)) : selector;
3307
- const controls = [];
3308
- const count = elements.length;
3309
- elements.forEach((el, i) => {
3310
- let delay = animOptions.delay ?? 0;
3311
- switch (from) {
3312
- case "start":
3313
- delay += i * stagger;
3314
- break;
3315
- case "end":
3316
- delay += (count - 1 - i) * stagger;
3317
- break;
3318
- case "center":
3319
- delay += Math.abs(Math.floor(count / 2) - i) * stagger;
3320
- break;
3321
- }
3322
- controls.push(animate(el, properties, { ...animOptions, delay }));
3323
- });
3324
- return controls;
3325
- }
3326
- async function animateSequence(steps) {
3327
- for (const [el, props, opts] of steps) {
3328
- const ctrl = animate(el, props, opts);
3329
- await ctrl.finished;
3330
- }
3331
- }
3332
- async function animateGroup(steps) {
3333
- const controls = steps.map(([el, props, opts]) => animate(el, props, opts));
3334
- await Promise.all(controls.map((c) => c.finished));
3335
- }
3336
- function animateSpring(el, target, options = {}) {
3337
- const {
3338
- stiffness = 100,
3339
- damping = 10,
3340
- mass = 1,
3341
- threshold = 0.01,
3342
- onComplete
3343
- } = options;
3344
- const current = {};
3345
- const velocity = {};
3346
- const computed4 = window.getComputedStyle(el);
3347
- for (const prop of Object.keys(target)) {
3348
- current[prop] = parseFloat(computed4.getPropertyValue(prop)) || 0;
3349
- velocity[prop] = 0;
3350
- }
3351
- let animating = true;
3352
- let rafId = 0;
3353
- let resolveFinished;
3354
- const finished = new Promise((resolve) => {
3355
- resolveFinished = resolve;
3356
- });
3357
- function step() {
3358
- if (!animating) return;
3359
- let allSettled = true;
3360
- const dt = 1 / 60;
3361
- for (const prop of Object.keys(target)) {
3362
- const displacement = current[prop] - target[prop];
3363
- const springForce = -stiffness * displacement;
3364
- const dampingForce = -damping * velocity[prop];
3365
- const acceleration = (springForce + dampingForce) / mass;
3366
- velocity[prop] += acceleration * dt;
3367
- current[prop] += velocity[prop] * dt;
3368
- if (Math.abs(velocity[prop]) > threshold || Math.abs(displacement) > threshold) {
3369
- allSettled = false;
3370
- }
3371
- }
3372
- applySpringValues(el, current);
3373
- if (allSettled) {
3374
- for (const prop of Object.keys(target)) {
3375
- current[prop] = target[prop];
3376
- }
3377
- applySpringValues(el, current);
3378
- animating = false;
3379
- onComplete?.();
3380
- resolveFinished();
3381
- } else {
3382
- rafId = requestAnimationFrame(step);
3383
- }
3384
- }
3385
- rafId = requestAnimationFrame(step);
3386
- return {
3387
- play() {
3388
- if (!animating) {
3389
- animating = true;
3390
- step();
3391
- }
3392
- },
3393
- pause() {
3394
- animating = false;
3395
- cancelAnimationFrame(rafId);
3396
- },
3397
- cancel() {
3398
- animating = false;
3399
- cancelAnimationFrame(rafId);
3400
- },
3401
- reverse() {
3402
- for (const prop of Object.keys(target)) {
3403
- velocity[prop] = -velocity[prop];
3404
- }
3405
- },
3406
- finished
3407
- };
3408
- }
3409
- function applySpringValues(el, values) {
3410
- const transforms = [];
3411
- for (const [prop, value] of Object.entries(values)) {
3412
- switch (prop) {
3413
- case "x":
3414
- transforms.push(`translateX(${value}px)`);
3415
- break;
3416
- case "y":
3417
- transforms.push(`translateY(${value}px)`);
3418
- break;
3419
- case "scale":
3420
- transforms.push(`scale(${value})`);
3421
- break;
3422
- case "rotate":
3423
- transforms.push(`rotate(${value}deg)`);
3424
- break;
3425
- case "opacity":
3426
- el.style.opacity = String(value);
3427
- break;
3428
- default:
3429
- el.style.setProperty(prop, String(value));
3430
- break;
3431
- }
3432
- }
3433
- if (transforms.length > 0) {
3434
- el.style.transform = transforms.join(" ");
3435
- }
3436
- }
3437
- function keyframes(frames) {
3438
- return frames;
3439
- }
3440
- function defineStates(states, defaultOptions = {}) {
3441
- return {
3442
- states,
3443
- transitionTo(el, stateName, options) {
3444
- const target = states[stateName];
3445
- if (!target) throw new Error(`Unknown animation state: ${stateName}`);
3446
- const props = {};
3447
- for (const [key, value] of Object.entries(target)) {
3448
- props[key] = value;
3449
- }
3450
- return animate(el, props, { ...defaultOptions, ...options });
3451
- }
3452
- };
3453
- }
3454
-
3455
- // src/defer.ts
3456
- function defer(loader, options = {}) {
3457
- const {
3458
- trigger = "viewport",
3459
- loading: loadingFn,
3460
- error: errorFn,
3461
- prefetch = false,
3462
- minLoadTime = 0,
3463
- rootMargin = "200px"
3464
- } = options;
3465
- let resolvedComp = null;
3466
- let loadPromise = null;
3467
- let loadError = null;
3468
- function startLoad() {
3469
- if (loadPromise) return loadPromise;
3470
- const start = Date.now();
3471
- loadPromise = loader().then(async (mod) => {
3472
- const elapsed = Date.now() - start;
3473
- if (minLoadTime > 0 && elapsed < minLoadTime) {
3474
- await new Promise((r) => setTimeout(r, minLoadTime - elapsed));
3475
- }
3476
- resolvedComp = mod.default;
3477
- }).catch((err) => {
3478
- loadError = err instanceof Error ? err : new Error(String(err));
3479
- });
3480
- return loadPromise;
3481
- }
3482
- if (prefetch) startLoad();
3483
- return defineComponent((ctx) => {
3484
- const state = signal("idle");
3485
- async function triggerLoad() {
3486
- if (state() !== "idle") return;
3487
- state.set("loading");
3488
- await startLoad();
3489
- state.set(loadError ? "error" : "ready");
3490
- }
3491
- return () => {
3492
- const container = document.createElement("div");
3493
- container.style.display = "contents";
3494
- const s = state();
3495
- if (s === "ready" && resolvedComp) {
3496
- container.appendChild(resolvedComp(ctx.props));
3497
- return container;
3498
- }
3499
- if (s === "error" && errorFn && loadError) {
3500
- container.appendChild(nodeToDOM(errorFn(loadError)));
3501
- return container;
3502
- }
3503
- if (loadingFn && s === "loading") {
3504
- container.appendChild(nodeToDOM(loadingFn()));
3505
- }
3506
- if (s === "idle") {
3507
- setupTrigger(container, trigger, triggerLoad, rootMargin).then((cleanup) => {
3508
- });
3509
- }
3510
- return container;
3511
- };
3512
- });
3513
- }
3514
- async function setupTrigger(el, trigger, load, rootMargin) {
3515
- if (trigger === "immediate") {
3516
- load();
3517
- return () => {
3518
- };
3519
- }
3520
- if (trigger === "viewport") {
3521
- return setupViewportTrigger(el, load, rootMargin);
3522
- }
3523
- if (trigger === "interaction" || trigger === "hover") {
3524
- return setupInteractionTrigger(el, load, trigger);
3525
- }
3526
- if (trigger === "idle") {
3527
- return setupIdleTrigger(load);
3528
- }
3529
- if (typeof trigger === "object" && trigger.type === "timer") {
3530
- return setupTimerTrigger(load, trigger.delay);
3531
- }
3532
- if (typeof trigger === "object" && trigger.type === "custom") {
3533
- return setupCustomTrigger(load, trigger.condition);
3534
- }
3535
- load();
3536
- return () => {
3537
- };
3538
- }
3539
- function setupViewportTrigger(el, load, rootMargin) {
3540
- if (typeof IntersectionObserver === "undefined") {
3541
- load();
3542
- return () => {
3543
- };
3544
- }
3545
- const observer = new IntersectionObserver(
3546
- (entries2) => {
3547
- if (entries2[0]?.isIntersecting) {
3548
- observer.disconnect();
3549
- load();
3550
- }
3551
- },
3552
- { rootMargin }
3553
- );
3554
- requestAnimationFrame(() => observer.observe(el));
3555
- return () => observer.disconnect();
3556
- }
3557
- function setupInteractionTrigger(el, load, type) {
3558
- const events = type === "hover" ? ["mouseenter", "focusin"] : ["click", "mouseenter", "focusin", "touchstart"];
3559
- const handler = () => {
3560
- for (const event of events) {
3561
- el.removeEventListener(event, handler);
3562
- }
3563
- load();
3564
- };
3565
- for (const event of events) {
3566
- el.addEventListener(event, handler, { once: true, passive: true });
3567
- }
3568
- return () => {
3569
- for (const event of events) {
3570
- el.removeEventListener(event, handler);
3571
- }
3572
- };
3573
- }
3574
- function setupIdleTrigger(load) {
3575
- if (typeof requestIdleCallback !== "undefined") {
3576
- const id = requestIdleCallback(() => load());
3577
- return () => cancelIdleCallback(id);
3578
- }
3579
- const timer = setTimeout(load, 200);
3580
- return () => clearTimeout(timer);
3581
- }
3582
- function setupTimerTrigger(load, delay) {
3583
- const timer = setTimeout(load, delay);
3584
- return () => clearTimeout(timer);
3585
- }
3586
- function setupCustomTrigger(load, condition) {
3587
- const check = () => {
3588
- if (condition()) load();
3589
- else requestAnimationFrame(check);
3590
- };
3591
- requestAnimationFrame(check);
3592
- return () => {
3593
- };
3594
- }
3595
-
3596
- // src/view-transition.ts
3597
- function supportsViewTransitions() {
3598
- return typeof document !== "undefined" && "startViewTransition" in document;
3599
- }
3600
- function startViewTransition(updateCallback, options = {}) {
3601
- const { className, onBefore, onAfter, fallback = "instant" } = options;
3602
- onBefore?.();
3603
- if (supportsViewTransitions()) {
3604
- if (className) document.documentElement.classList.add(className);
3605
- const transition = document.startViewTransition(async () => {
3606
- await updateCallback();
3607
- });
3608
- const finished = transition.finished.then(() => {
3609
- if (className) document.documentElement.classList.remove(className);
3610
- onAfter?.();
3611
- });
3612
- return {
3613
- finished,
3614
- updateCallbackDone: transition.updateCallbackDone,
3615
- ready: transition.ready,
3616
- skipTransition: () => transition.skipTransition()
3617
- };
3618
- }
3619
- if (fallback === "fade") {
3620
- return fadeTransition(updateCallback, options);
3621
- }
3622
- const result = updateCallback();
3623
- const done = result instanceof Promise ? result : Promise.resolve();
3624
- onAfter?.();
3625
- return {
3626
- finished: done,
3627
- updateCallbackDone: done,
3628
- ready: Promise.resolve(),
3629
- skipTransition: () => {
3630
- }
3631
- };
3632
- }
3633
- function viewTransitionCSS(config = {}) {
3634
- const {
3635
- duration = "0.25s",
3636
- easing = "ease",
3637
- oldAnimation,
3638
- newAnimation
3639
- } = config;
3640
- let css2 = `::view-transition-old(root),
53
+ </html>`;async function qr(e){let{routes:t,render:n,outDir:r="dist",template:o=Wr,onPage:i,onError:s,concurrency:a=5}=e,c=Date.now(),l=typeof t=="function"?await t():t,d={rendered:[],errors:[],duration:0};for(let u=0;u<l.length;u+=a){let f=l.slice(u,u+a);await Promise.all(f.map(async p=>{try{let y=await n(p),T=o.replace("{{content}}",y).replace("{{head}}","").replace("{{scripts}}",""),m=Pe(p);d.rendered.push({url:p,file:`${r}/${m}`,size:new Blob([T]).size}),i?.(p,T);}catch(y){let T=y instanceof Error?y:new Error(String(y));d.errors.push({url:p,error:T.message}),s?.(p,T);}}));}return d.duration=Date.now()-c,d}function Br(e){return e.filter(t=>!t.path.includes(":")&&!t.path.includes("*")).map(t=>t.path)}function Ur(e,t){return t.map(n=>{let r=e;for(let[o,i]of Object.entries(n))r=r.replace(`:${o}`,i);return r})}function Pe(e){let t=e.replace(/^\//,"").replace(/\/$/,"");return t?`${t}/index.html`:"index.html"}function Gr(e,t){let n=`<?xml version="1.0" encoding="UTF-8"?>
54
+ `;n+=`<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
55
+ `;for(let r of t.rendered)n+=` <url>
56
+ `,n+=` <loc>${e}${r.url}</loc>
57
+ `,n+=` <lastmod>${new Date().toISOString().split("T")[0]}</lastmod>
58
+ `,n+=` </url>
59
+ `;return n+=`</urlset>
60
+ `,n}function ke(e$1,t,n,r){let o=[],i=e(()=>{let s=String(n());for(let c of o)c.parentNode&&c.parentNode.removeChild(c);o=[];let a=r[s]??r._default;if(a){let c=a(),l=c instanceof DocumentFragment?Array.from(c.childNodes):[c];for(let d of l)e$1.insertBefore(d,t);o=l;}},{render:true});return ()=>{i();for(let s of o)s.parentNode&&s.parentNode.removeChild(s);}}var Qr=A(e=>()=>{let t=document.createElement("div");t.style.display="contents";let n=document.createComment("switch");t.appendChild(n);let r={...e.props.cases};return e.props.fallback&&(r._default=()=>u(e.props.fallback())),ke(t,n,()=>e.props.on,Object.fromEntries(Object.entries(r).map(([o,i])=>[o,()=>u(i())]))),t});function Jr(e,t){let n=String(e),r=t[n]??t._;return r?r(e):void 0}var Yr=0;function Xr(e){return {_type:"provider",factory:e.factory,providedIn:e.providedIn,multi:e.multi,_id:Symbol(`provider-${++Yr}`)}}var L=new Map;function Ae(e=[],t){let n=new Map,r=new Map,o=new Map;for(let s of e)o.set(s.provide._id,s);let i={get(s){let a=s._id;if(s.multi){if(r.has(a))return r.get(a);let d=[],u=o.get(a);if(u?.useFactory?d.push(u.useFactory()):u?.useValue!==void 0&&d.push(u.useValue),t?.has(s)){let f=t.get(s);Array.isArray(f)&&d.push(...f);}return r.set(a,d),d}if(n.has(a))return n.get(a);if(s.providedIn==="root"&&L.has(a))return L.get(a);let c=o.get(a);if(c){let d=Zr(c,i);return n.set(a,d),d}if(t)return t.get(s);let l=s.factory();return s.providedIn==="root"?L.set(a,l):n.set(a,l),l},has(s){return n.has(s._id)||o.has(s._id)||s.providedIn==="root"&&L.has(s._id)?true:t?t.has(s):false},createChild(s){return Ae(s??[],i)},dispose(){n.clear(),r.clear();}};return i}function Zr(e,t){return e.useValue!==void 0?e.useValue:e.useFactory?e.useFactory():e.useExisting?t.get(e.useExisting):e.provide.factory()}function eo(e){{if(e.providedIn==="root"){if(L.has(e._id))return L.get(e._id);let t=e.factory();return L.set(e._id,t),t}return e.factory()}}function to(){L.clear();}function no(e,t={}){let{trigger:n="viewport",loading:r,error:o,prefetch:i=false,minLoadTime:s=0,rootMargin:a="200px"}=t,c$1=null,l=null,d=null;function u$1(){if(l)return l;let f=Date.now();return l=e().then(async p=>{let y=Date.now()-f;s>0&&y<s&&await new Promise(T=>setTimeout(T,s-y)),c$1=p.default;}).catch(p=>{d=p instanceof Error?p:new Error(String(p));}),l}return i&&u$1(),A(f=>{let p=c("idle");async function T(){p()==="idle"&&(p.set("loading"),await u$1(),p.set(d?"error":"ready"));}return ()=>{let m=document.createElement("div");m.style.display="contents";let h=p();return h==="ready"&&c$1?(m.appendChild(c$1(f.props)),m):h==="error"&&o&&d?(m.appendChild(u(o(d))),m):(r&&h==="loading"&&m.appendChild(u(r())),h==="idle"&&ro(m,n,T,a).then(b=>{}),m)}})}async function ro(e,t,n,r){return t==="immediate"?(n(),()=>{}):t==="viewport"?oo(e,n,r):t==="interaction"||t==="hover"?io(e,n,t):t==="idle"?so(n):typeof t=="object"&&t.type==="timer"?ao(n,t.delay):typeof t=="object"&&t.type==="custom"?co(n,t.condition):(n(),()=>{})}function oo(e,t,n){if(typeof IntersectionObserver>"u")return t(),()=>{};let r=new IntersectionObserver(o=>{o[0]?.isIntersecting&&(r.disconnect(),t());},{rootMargin:n});return requestAnimationFrame(()=>r.observe(e)),()=>r.disconnect()}function io(e,t,n){let r=n==="hover"?["mouseenter","focusin"]:["click","mouseenter","focusin","touchstart"],o=()=>{for(let i of r)e.removeEventListener(i,o);t();};for(let i of r)e.addEventListener(i,o,{once:true,passive:true});return ()=>{for(let i of r)e.removeEventListener(i,o);}}function so(e){if(typeof requestIdleCallback<"u"){let n=requestIdleCallback(()=>e());return ()=>cancelIdleCallback(n)}let t=setTimeout(e,200);return ()=>clearTimeout(t)}function ao(e,t){let n=setTimeout(e,t);return ()=>clearTimeout(n)}function co(e,t){let n=()=>{t()?e():requestAnimationFrame(n);};return requestAnimationFrame(n),()=>{}}function Re(){return typeof document<"u"&&"startViewTransition"in document}function lo(e,t={}){let{className:n,onBefore:r,onAfter:o,fallback:i="instant"}=t;if(r?.(),Re()){n&&document.documentElement.classList.add(n);let c=document.startViewTransition(async()=>{await e();});return {finished:c.finished.then(()=>{n&&document.documentElement.classList.remove(n),o?.();}),updateCallbackDone:c.updateCallbackDone,ready:c.ready,skipTransition:()=>c.skipTransition()}}if(i==="fade")return fo(e,t);let s=e(),a=s instanceof Promise?s:Promise.resolve();return o?.(),{finished:a,updateCallbackDone:a,ready:Promise.resolve(),skipTransition:()=>{}}}function uo(e={}){let{duration:t="0.25s",easing:n="ease",oldAnimation:r,newAnimation:o}=e,i=`::view-transition-old(root),
3641
61
  ::view-transition-new(root) {
3642
- `;
3643
- css2 += ` animation-duration: ${duration};
3644
- `;
3645
- css2 += ` animation-timing-function: ${easing};
3646
- `;
3647
- css2 += `}
3648
- `;
3649
- if (oldAnimation) {
3650
- css2 += `::view-transition-old(root) {
3651
- animation-name: ${oldAnimation};
3652
- }
3653
- `;
3654
- }
3655
- if (newAnimation) {
3656
- css2 += `::view-transition-new(root) {
3657
- animation-name: ${newAnimation};
3658
- }
3659
- `;
3660
- }
3661
- return css2;
3662
- }
3663
- function assignTransitionName(el, name) {
3664
- el.style.viewTransitionName = name;
3665
- }
3666
- function fadeTransition(updateCallback, options) {
3667
- const el = document.documentElement;
3668
- const finished = new Promise(async (resolve) => {
3669
- el.style.transition = "opacity 0.15s ease";
3670
- el.style.opacity = "0";
3671
- await new Promise((r) => setTimeout(r, 150));
3672
- await updateCallback();
3673
- el.style.opacity = "1";
3674
- await new Promise((r) => setTimeout(r, 150));
3675
- el.style.transition = "";
3676
- el.style.opacity = "";
3677
- options.onAfter?.();
3678
- resolve();
3679
- });
3680
- return {
3681
- finished,
3682
- updateCallbackDone: finished,
3683
- ready: Promise.resolve(),
3684
- skipTransition: () => {
3685
- el.style.transition = "";
3686
- el.style.opacity = "";
3687
- }
3688
- };
3689
- }
3690
-
3691
- // src/query-state.ts
3692
- function defaultSerialize(value) {
3693
- if (Array.isArray(value)) return value.join(",");
3694
- if (typeof value === "boolean") return value ? "true" : "false";
3695
- return String(value);
3696
- }
3697
- function defaultDeserialize(raw, defaultValue) {
3698
- if (typeof defaultValue === "number") return Number(raw);
3699
- if (typeof defaultValue === "boolean") return raw === "true" || raw === "1";
3700
- if (Array.isArray(defaultValue)) {
3701
- return raw ? raw.split(",") : [];
3702
- }
3703
- return raw;
3704
- }
3705
- function getSearchParams() {
3706
- if (typeof window === "undefined") return new URLSearchParams();
3707
- return new URLSearchParams(window.location.search);
3708
- }
3709
- function updateURL(params, mode) {
3710
- if (typeof window === "undefined") return;
3711
- const search = params.toString();
3712
- const url = search ? `${window.location.pathname}?${search}${window.location.hash}` : `${window.location.pathname}${window.location.hash}`;
3713
- if (mode === "push") {
3714
- window.history.pushState(null, "", url);
3715
- } else {
3716
- window.history.replaceState(null, "", url);
3717
- }
3718
- }
3719
- var activeStates = /* @__PURE__ */ new Map();
3720
- var popstateListening = false;
3721
- function ensurePopstateListener() {
3722
- if (popstateListening || typeof window === "undefined") return;
3723
- popstateListening = true;
3724
- window.addEventListener("popstate", () => {
3725
- const params = getSearchParams();
3726
- batch(() => {
3727
- for (const [key, state] of activeStates) {
3728
- const raw = params.get(key);
3729
- const value = raw !== null ? state.deserialize(raw) : state.defaultValue;
3730
- state.signal.set(value);
3731
- }
3732
- });
3733
- });
3734
- }
3735
- function useQueryState(key, defaultValue, options = {}) {
3736
- const {
3737
- serialize = (v) => defaultSerialize(v),
3738
- deserialize = (raw2) => defaultDeserialize(raw2, defaultValue),
3739
- history: historyMode = "replace",
3740
- debounce: debounceMs = 0,
3741
- removeDefault = true
3742
- } = options;
3743
- const params = getSearchParams();
3744
- const raw = params.get(key);
3745
- const initialValue = raw !== null ? deserialize(raw) : defaultValue;
3746
- const state = signal(initialValue);
3747
- activeStates.set(key, { signal: state, deserialize, defaultValue });
3748
- ensurePopstateListener();
3749
- let debounceTimer = null;
3750
- const originalSet = state.set;
3751
- state.set = (value) => {
3752
- originalSet(value);
3753
- const doUpdate = () => {
3754
- const currentParams = getSearchParams();
3755
- if (removeDefault && value === defaultValue) {
3756
- currentParams.delete(key);
3757
- } else {
3758
- currentParams.set(key, serialize(value));
3759
- }
3760
- updateURL(currentParams, historyMode);
3761
- };
3762
- if (debounceMs > 0) {
3763
- if (debounceTimer) clearTimeout(debounceTimer);
3764
- debounceTimer = setTimeout(doUpdate, debounceMs);
3765
- } else {
3766
- doUpdate();
3767
- }
3768
- };
3769
- state.update;
3770
- state.update = (fn) => {
3771
- state.set(fn(state()));
3772
- };
3773
- return state;
3774
- }
3775
- function useQueryStates(schema, options) {
3776
- const result = {};
3777
- for (const [key, config] of Object.entries(schema)) {
3778
- result[key] = useQueryState(key, config.default, {
3779
- serialize: config.serialize,
3780
- deserialize: config.deserialize,
3781
- history: options?.history
3782
- });
3783
- }
3784
- return result;
3785
- }
3786
- function clearQueryState() {
3787
- if (typeof window === "undefined") return;
3788
- const url = `${window.location.pathname}${window.location.hash}`;
3789
- window.history.replaceState(null, "", url);
3790
- batch(() => {
3791
- for (const [, state] of activeStates) {
3792
- state.signal.set(state.defaultValue);
3793
- }
3794
- });
3795
- }
3796
- function getQueryParams() {
3797
- const params = getSearchParams();
3798
- const result = {};
3799
- params.forEach((value, key) => {
3800
- result[key] = value;
3801
- });
3802
- return result;
3803
- }
3804
- function removeQueryState(key) {
3805
- activeStates.delete(key);
3806
- }
3807
- function resetQueryState() {
3808
- activeStates.clear();
3809
- }
3810
-
3811
- // src/tweened.ts
3812
- var easings = {
3813
- linear: (t) => t,
3814
- cubicIn: (t) => t * t * t,
3815
- cubicOut: (t) => 1 - Math.pow(1 - t, 3),
3816
- cubicInOut: (t) => t < 0.5 ? 4 * t * t * t : 1 - Math.pow(-2 * t + 2, 3) / 2,
3817
- quadIn: (t) => t * t,
3818
- quadOut: (t) => 1 - (1 - t) * (1 - t),
3819
- quintOut: (t) => 1 - Math.pow(1 - t, 5),
3820
- bounceOut: (t) => {
3821
- if (t < 1 / 2.75) return 7.5625 * t * t;
3822
- if (t < 2 / 2.75) return 7.5625 * (t -= 1.5 / 2.75) * t + 0.75;
3823
- if (t < 2.5 / 2.75) return 7.5625 * (t -= 2.25 / 2.75) * t + 0.9375;
3824
- return 7.5625 * (t -= 2.625 / 2.75) * t + 0.984375;
3825
- },
3826
- elasticOut: (t) => {
3827
- if (t === 0 || t === 1) return t;
3828
- return Math.pow(2, -10 * t) * Math.sin((t - 0.1) * 5 * Math.PI) + 1;
3829
- }
3830
- };
3831
- function defaultInterpolate(from, to, t) {
3832
- if (typeof from === "number" && typeof to === "number") {
3833
- return from + (to - from) * t;
3834
- }
3835
- return t < 0.5 ? from : to;
3836
- }
3837
- function tweened(initialValue, options = {}) {
3838
- const {
3839
- duration = 400,
3840
- easing = easings.cubicOut,
3841
- interpolate = defaultInterpolate,
3842
- delay = 0
3843
- } = options;
3844
- const current = signal(initialValue);
3845
- const targetValue = signal(initialValue);
3846
- let rafId = 0;
3847
- let running = false;
3848
- const read = (() => current());
3849
- read.set = (value, overrides) => {
3850
- const dur = overrides?.duration ?? duration;
3851
- const ease = overrides?.easing ?? easing;
3852
- const interp = overrides?.interpolate ?? interpolate;
3853
- const del = overrides?.delay ?? delay;
3854
- const from = current();
3855
- targetValue.set(value);
3856
- if (dur === 0) {
3857
- current.set(value);
3858
- return Promise.resolve();
3859
- }
3860
- if (running) {
3861
- cancelAnimationFrame(rafId);
3862
- running = false;
3863
- }
3864
- return new Promise((resolve) => {
3865
- const start = performance.now() + del;
3866
- running = true;
3867
- function tick(now) {
3868
- if (!running) {
3869
- resolve();
3870
- return;
3871
- }
3872
- const elapsed = now - start;
3873
- if (elapsed < 0) {
3874
- rafId = requestAnimationFrame(tick);
3875
- return;
3876
- }
3877
- const t = Math.min(elapsed / dur, 1);
3878
- const easedT = ease(t);
3879
- current.set(interp(from, value, easedT));
3880
- if (t < 1) {
3881
- rafId = requestAnimationFrame(tick);
3882
- } else {
3883
- running = false;
3884
- resolve();
3885
- }
3886
- }
3887
- rafId = requestAnimationFrame(tick);
3888
- });
3889
- };
3890
- read.setImmediate = (value) => {
3891
- if (running) {
3892
- cancelAnimationFrame(rafId);
3893
- running = false;
3894
- }
3895
- current.set(value);
3896
- targetValue.set(value);
3897
- };
3898
- read.target = () => targetValue();
3899
- return read;
3900
- }
3901
-
3902
- // src/flip.ts
3903
- function createFlip(container, options = {}) {
3904
- const {
3905
- duration = 300,
3906
- easing = "cubic-bezier(0.2, 0, 0, 1)",
3907
- delay = 0,
3908
- selector,
3909
- keyAttribute = "data-key",
3910
- onComplete
3911
- } = options;
3912
- let firstPositions = /* @__PURE__ */ new Map();
3913
- function getElements() {
3914
- if (selector) {
3915
- return Array.from(container.querySelectorAll(selector));
3916
- }
3917
- return Array.from(container.children);
3918
- }
3919
- function getKey(el) {
3920
- return el.getAttribute(keyAttribute) ?? el.id ?? "";
3921
- }
3922
- function measure() {
3923
- firstPositions = /* @__PURE__ */ new Map();
3924
- for (const el of getElements()) {
3925
- const key = getKey(el);
3926
- if (key) {
3927
- const rect = el.getBoundingClientRect();
3928
- firstPositions.set(key, {
3929
- left: rect.left,
3930
- top: rect.top,
3931
- width: rect.width,
3932
- height: rect.height
3933
- });
3934
- }
3935
- }
3936
- }
3937
- function animate2() {
3938
- const elements = getElements();
3939
- const animations = [];
3940
- for (const el of elements) {
3941
- const key = getKey(el);
3942
- const first = firstPositions.get(key);
3943
- if (!first) continue;
3944
- const last = el.getBoundingClientRect();
3945
- const dx = first.left - last.left;
3946
- const dy = first.top - last.top;
3947
- const dw = first.width / (last.width || 1);
3948
- const dh = first.height / (last.height || 1);
3949
- if (Math.abs(dx) < 0.5 && Math.abs(dy) < 0.5 && Math.abs(dw - 1) < 0.01 && Math.abs(dh - 1) < 0.01) {
3950
- continue;
3951
- }
3952
- const animation = el.animate(
3953
- [
3954
- {
3955
- transform: `translate(${dx}px, ${dy}px) scale(${dw}, ${dh})`
3956
- },
3957
- {
3958
- transform: "translate(0, 0) scale(1, 1)"
3959
- }
3960
- ],
3961
- {
3962
- duration,
3963
- easing,
3964
- delay,
3965
- fill: "both"
3966
- }
3967
- );
3968
- animations.push(animation);
3969
- }
3970
- const currentKeys = new Set(elements.map(getKey));
3971
- for (const [key, rect] of firstPositions) {
3972
- if (!currentKeys.has(key)) ;
3973
- }
3974
- firstPositions.clear();
3975
- return new Promise((resolve) => {
3976
- if (animations.length === 0) {
3977
- onComplete?.();
3978
- resolve();
3979
- return;
3980
- }
3981
- Promise.all(animations.map((a) => a.finished)).then(() => {
3982
- for (const a of animations) {
3983
- a.cancel();
3984
- }
3985
- onComplete?.();
3986
- resolve();
3987
- });
3988
- });
3989
- }
3990
- return {
3991
- measure,
3992
- animate: animate2,
3993
- async flip(update) {
3994
- measure();
3995
- update();
3996
- await new Promise((r) => requestAnimationFrame(r));
3997
- return animate2();
3998
- }
3999
- };
4000
- }
4001
- async function flip(container, update, options) {
4002
- const ctrl = createFlip(container, options);
4003
- return ctrl.flip(update);
4004
- }
4005
-
4006
- // src/await-block.ts
4007
- var Await = defineComponent((ctx) => {
4008
- const state = signal({ status: "pending" });
4009
- let currentPromise = ctx.props.promise;
4010
- ctx.props.promise.then((value) => {
4011
- if (ctx.props.promise === currentPromise) {
4012
- state.set({ status: "resolved", value });
4013
- }
4014
- }).catch((err) => {
4015
- if (ctx.props.promise === currentPromise) {
4016
- state.set({
4017
- status: "rejected",
4018
- error: err instanceof Error ? err : new Error(String(err))
4019
- });
4020
- }
4021
- });
4022
- return () => {
4023
- const s = state();
4024
- switch (s.status) {
4025
- case "pending":
4026
- return ctx.props.pending ? nodeToDOM(ctx.props.pending()) : document.createComment("await-pending");
4027
- case "resolved":
4028
- return nodeToDOM(ctx.props.then(s.value));
4029
- case "rejected":
4030
- return ctx.props.catch ? nodeToDOM(ctx.props.catch(s.error)) : document.createComment("await-error");
4031
- }
4032
- };
4033
- });
4034
- function awaitSignal(promise) {
4035
- const state = signal({ status: "pending" });
4036
- promise.then((value) => state.set({ status: "resolved", value })).catch((error) => state.set({
4037
- status: "rejected",
4038
- error: error instanceof Error ? error : new Error(String(error))
4039
- }));
4040
- return () => state();
4041
- }
4042
-
4043
- // src/event-modifiers.ts
4044
- function withModifiers(handler, modifiers) {
4045
- return (e) => {
4046
- if (modifiers.self && e.target !== e.currentTarget) return;
4047
- if (modifiers.preventDefault) e.preventDefault();
4048
- if (modifiers.stopPropagation) e.stopPropagation();
4049
- if (modifiers.stopImmediatePropagation) e.stopImmediatePropagation?.();
4050
- handler(e);
4051
- };
62
+ `;return i+=` animation-duration: ${t};
63
+ `,i+=` animation-timing-function: ${n};
64
+ `,i+=`}
65
+ `,r&&(i+=`::view-transition-old(root) {
66
+ animation-name: ${r};
4052
67
  }
4053
- function onEvent(el, event, handler, modifiers = {}) {
4054
- const wrapped = withModifiers(handler, modifiers);
4055
- const listenerOptions = {
4056
- once: modifiers.once,
4057
- capture: modifiers.capture,
4058
- passive: modifiers.passive
4059
- };
4060
- el.addEventListener(event, wrapped, listenerOptions);
4061
- return () => el.removeEventListener(event, wrapped, listenerOptions);
68
+ `),o&&(i+=`::view-transition-new(root) {
69
+ animation-name: ${o};
4062
70
  }
4063
- function bindDimensions(el) {
4064
- const width = signal(el.clientWidth);
4065
- const height = signal(el.clientHeight);
4066
- if (typeof ResizeObserver !== "undefined") {
4067
- const observer = new ResizeObserver((entries2) => {
4068
- const entry = entries2[0];
4069
- if (entry) {
4070
- width.set(entry.contentRect.width);
4071
- height.set(entry.contentRect.height);
4072
- }
4073
- });
4074
- observer.observe(el);
4075
- }
4076
- return {
4077
- width: () => width(),
4078
- height: () => height()
4079
- };
4080
- }
4081
- function bindScroll(el) {
4082
- const target = el ?? (typeof window !== "undefined" ? window : null);
4083
- const scrollX = signal(el ? el.scrollLeft : window?.scrollX ?? 0);
4084
- const scrollY = signal(el ? el.scrollTop : window?.scrollY ?? 0);
4085
- if (target) {
4086
- const handler = () => {
4087
- if (el) {
4088
- scrollX.set(el.scrollLeft);
4089
- scrollY.set(el.scrollTop);
4090
- } else {
4091
- scrollX.set(window.scrollX);
4092
- scrollY.set(window.scrollY);
4093
- }
4094
- };
4095
- target.addEventListener("scroll", handler, { passive: true });
4096
- }
4097
- const originalSetY = scrollY.set;
4098
- scrollY.set = (value) => {
4099
- originalSetY(value);
4100
- if (el) el.scrollTop = value;
4101
- else window?.scrollTo(window.scrollX, value);
4102
- };
4103
- const originalSetX = scrollX.set;
4104
- scrollX.set = (value) => {
4105
- originalSetX(value);
4106
- if (el) el.scrollLeft = value;
4107
- else window?.scrollTo(value, window.scrollY);
4108
- };
4109
- return { scrollX, scrollY };
4110
- }
4111
- function bindElement() {
4112
- return signal(null);
4113
- }
4114
- function bindGroup(name) {
4115
- return signal(null);
4116
- }
4117
- function bindGroupItem(el, group, value) {
4118
- el.name = typeof value === "string" ? value : "";
4119
- el.addEventListener("change", () => {
4120
- if (el.checked) group.set(value);
4121
- });
4122
- effect(() => {
4123
- el.checked = group() === value;
4124
- });
4125
- }
4126
- function bindClass(el, className, condition) {
4127
- return effect(() => {
4128
- if (condition()) {
4129
- el.classList.add(className);
4130
- } else {
4131
- el.classList.remove(className);
4132
- }
4133
- });
4134
- }
4135
- function bindClasses(el, classes) {
4136
- const disposers = Object.entries(classes).map(
4137
- ([cls, condition]) => bindClass(el, cls, condition)
4138
- );
4139
- return () => disposers.forEach((d) => d());
4140
- }
4141
- function bindStyle(el, property, value) {
4142
- const kebab = property.replace(/[A-Z]/g, (m) => `-${m.toLowerCase()}`);
4143
- return effect(() => {
4144
- const v = value();
4145
- if (v == null) {
4146
- el.style.removeProperty(kebab);
4147
- } else {
4148
- el.style.setProperty(kebab, typeof v === "number" ? `${v}px` : String(v));
4149
- }
4150
- });
4151
- }
4152
- function bindStyles(el, styles) {
4153
- const disposers = Object.entries(styles).map(
4154
- ([prop, valueFn]) => bindStyle(el, prop, valueFn)
4155
- );
4156
- return () => disposers.forEach((d) => d());
4157
- }
4158
-
4159
- // src/snippets.ts
4160
- function defineSnippet(render) {
4161
- return render;
4162
- }
4163
- function inspect(...args) {
4164
- let options = {};
4165
- const sources = [];
4166
- for (const arg of args) {
4167
- if (typeof arg === "function") {
4168
- sources.push(arg);
4169
- } else if (typeof arg === "object" && arg !== null) {
4170
- options = arg;
4171
- }
4172
- }
4173
- const {
4174
- label = "inspect",
4175
- level = "log",
4176
- logger,
4177
- when
4178
- } = options;
4179
- return effect(() => {
4180
- if (when && !when()) return;
4181
- const values = sources.map((s) => s());
4182
- if (logger) {
4183
- logger(label, ...values);
4184
- } else {
4185
- console[level](`[${label}]`, ...values);
4186
- }
4187
- });
4188
- }
4189
- function defineFormAction(url, options = {}) {
4190
- const {
4191
- method = "POST",
4192
- headers = {},
4193
- onSuccess,
4194
- onError: onError2,
4195
- fetch: customFetch = globalThis.fetch.bind(globalThis)
4196
- } = options;
4197
- const submitting = signal(false);
4198
- const result = signal(null);
4199
- const error = signal(null);
4200
- async function submit(data) {
4201
- submitting.set(true);
4202
- error.set(null);
4203
- try {
4204
- const response = await customFetch(url, {
4205
- method,
4206
- headers: { "Content-Type": "application/json", ...headers },
4207
- body: JSON.stringify(data)
4208
- });
4209
- if (!response.ok) {
4210
- throw new Error(`Form action failed: ${response.status}`);
4211
- }
4212
- const res = await response.json();
4213
- result.set(res);
4214
- submitting.set(false);
4215
- onSuccess?.(res);
4216
- return res;
4217
- } catch (err) {
4218
- const e = err instanceof Error ? err : new Error(String(err));
4219
- error.set(e);
4220
- submitting.set(false);
4221
- onError2?.(e);
4222
- throw e;
4223
- }
4224
- }
4225
- return {
4226
- url,
4227
- method,
4228
- submitting: () => submitting(),
4229
- result: () => result(),
4230
- error: () => error(),
4231
- handle(extraData) {
4232
- return (e) => {
4233
- e.preventDefault();
4234
- const form = e.target;
4235
- const formData = new FormData(form);
4236
- const data = { ...extraData };
4237
- formData.forEach((value, key) => {
4238
- data[key] = value;
4239
- });
4240
- submit(data);
4241
- };
4242
- },
4243
- submit
4244
- };
4245
- }
4246
- function enableSnapshots(config = {}) {
4247
- if (typeof window === "undefined") return () => {
4248
- };
4249
- const { keyPrefix = "akash-snapshot", capture = ["scroll", "forms"] } = config;
4250
- function captureSnapshot() {
4251
- const snapshot = {
4252
- scrollX: window.scrollX,
4253
- scrollY: window.scrollY,
4254
- forms: {},
4255
- timestamp: Date.now()
4256
- };
4257
- if (capture.includes("forms")) {
4258
- document.querySelectorAll("form[id]").forEach((form) => {
4259
- const formEl = form;
4260
- const data = {};
4261
- new FormData(formEl).forEach((value, key) => {
4262
- data[key] = String(value);
4263
- });
4264
- snapshot.forms[formEl.id] = data;
4265
- });
4266
- }
4267
- return snapshot;
4268
- }
4269
- function restoreSnapshot(snapshot) {
4270
- if (capture.includes("scroll")) {
4271
- requestAnimationFrame(() => {
4272
- window.scrollTo(snapshot.scrollX, snapshot.scrollY);
4273
- });
4274
- }
4275
- if (capture.includes("forms")) {
4276
- for (const [formId, data] of Object.entries(snapshot.forms)) {
4277
- const form = document.getElementById(formId);
4278
- if (!form) continue;
4279
- for (const [key, value] of Object.entries(data)) {
4280
- const input = form.elements.namedItem(key);
4281
- if (input) input.value = value;
4282
- }
4283
- }
4284
- }
4285
- }
4286
- const saveKey = () => `${keyPrefix}-${window.location.pathname}`;
4287
- function save() {
4288
- try {
4289
- const snapshot = captureSnapshot();
4290
- sessionStorage.setItem(saveKey(), JSON.stringify(snapshot));
4291
- } catch {
4292
- }
4293
- }
4294
- function restore() {
4295
- try {
4296
- const raw = sessionStorage.getItem(saveKey());
4297
- if (raw) {
4298
- const snapshot = JSON.parse(raw);
4299
- if (Date.now() - snapshot.timestamp < 30 * 60 * 1e3) {
4300
- restoreSnapshot(snapshot);
4301
- }
4302
- }
4303
- } catch {
4304
- }
4305
- }
4306
- window.addEventListener("beforeunload", save);
4307
- window.addEventListener("popstate", () => {
4308
- requestAnimationFrame(restore);
4309
- });
4310
- if (performance.getEntriesByType("navigation")[0]?.type === "back_forward") {
4311
- requestAnimationFrame(restore);
4312
- }
4313
- return () => {
4314
- window.removeEventListener("beforeunload", save);
4315
- };
4316
- }
4317
-
4318
- // src/watch.ts
4319
- function watch(source, callback, options = {}) {
4320
- const { immediate = false, once = false, debounce: debounceMs, deep = false } = options;
4321
- const isMulti = Array.isArray(source);
4322
- const sources = isMulti ? source : [source];
4323
- let oldValues = sources.map(() => void 0);
4324
- let isFirst = true;
4325
- let debounceTimer = null;
4326
- let disposed = false;
4327
- let disposeEffect = null;
4328
- const dispose = () => {
4329
- disposed = true;
4330
- if (debounceTimer) clearTimeout(debounceTimer);
4331
- disposeEffect?.();
4332
- };
4333
- disposeEffect = effect(() => {
4334
- const newValues = sources.map((s) => s());
4335
- if (isFirst) {
4336
- isFirst = false;
4337
- oldValues = deep ? newValues.map(deepClone) : [...newValues];
4338
- if (immediate) {
4339
- fireCallback(newValues, sources.map(() => void 0));
4340
- }
4341
- return;
4342
- }
4343
- const changed = deep ? newValues.some((v, i) => !deepEqual(v, oldValues[i])) : newValues.some((v, i) => !Object.is(v, oldValues[i]));
4344
- if (!changed) return;
4345
- const prevValues = [...oldValues];
4346
- oldValues = deep ? newValues.map(deepClone) : [...newValues];
4347
- fireCallback(newValues, prevValues);
4348
- });
4349
- function fireCallback(newVals, oldVals) {
4350
- if (disposed) return;
4351
- const doCall = () => {
4352
- if (isMulti) {
4353
- callback(newVals, oldVals);
4354
- } else {
4355
- callback(newVals[0], oldVals[0]);
4356
- }
4357
- if (once) {
4358
- disposed = true;
4359
- dispose();
4360
- }
4361
- };
4362
- if (debounceMs && debounceMs > 0) {
4363
- if (debounceTimer) clearTimeout(debounceTimer);
4364
- debounceTimer = setTimeout(doCall, debounceMs);
4365
- } else {
4366
- doCall();
4367
- }
4368
- }
4369
- return dispose;
4370
- }
4371
- function watchOnce(source, callback) {
4372
- return watch(source, callback, { once: true, immediate: true });
4373
- }
4374
- function watchDebounced(source, callback, ms) {
4375
- return watch(source, callback, { debounce: ms });
4376
- }
4377
- function deepClone(value) {
4378
- if (value === null || typeof value !== "object") return value;
4379
- try {
4380
- return JSON.parse(JSON.stringify(value));
4381
- } catch {
4382
- return value;
4383
- }
4384
- }
4385
- function deepEqual(a, b) {
4386
- if (Object.is(a, b)) return true;
4387
- if (a === null || b === null || typeof a !== "object" || typeof b !== "object") return false;
4388
- try {
4389
- return JSON.stringify(a) === JSON.stringify(b);
4390
- } catch {
4391
- return false;
4392
- }
4393
- }
4394
-
4395
- // src/deep-signal.ts
4396
- var SIGNAL_KEY = /* @__PURE__ */ Symbol("deepSignal");
4397
- var RAW_KEY = /* @__PURE__ */ Symbol("deepRaw");
4398
- function deepSignal(initialValue) {
4399
- const version = signal(0);
4400
- const raw = JSON.parse(JSON.stringify(initialValue));
4401
- function notify() {
4402
- version.update((v) => v + 1);
4403
- }
4404
- function createProxy(target, path = []) {
4405
- return new Proxy(target, {
4406
- get(obj, prop, receiver) {
4407
- if (prop === "$raw") return JSON.parse(JSON.stringify(raw));
4408
- if (prop === "$signal") return () => {
4409
- version();
4410
- return JSON.parse(JSON.stringify(raw));
4411
- };
4412
- if (prop === SIGNAL_KEY) return version;
4413
- if (prop === RAW_KEY) return raw;
4414
- const value = Reflect.get(obj, prop, receiver);
4415
- version();
4416
- if (value !== null && typeof value === "object") {
4417
- return createProxy(value, [...path, String(prop)]);
4418
- }
4419
- return value;
4420
- },
4421
- set(obj, prop, value) {
4422
- const result = Reflect.set(obj, prop, value);
4423
- notify();
4424
- return result;
4425
- },
4426
- deleteProperty(obj, prop) {
4427
- const result = Reflect.deleteProperty(obj, prop);
4428
- notify();
4429
- return result;
4430
- }
4431
- });
4432
- }
4433
- if (Array.isArray(raw)) {
4434
- const arrayProxy = createProxy(raw);
4435
- return arrayProxy;
4436
- }
4437
- return createProxy(raw);
4438
- }
4439
- function toRaw(proxy) {
4440
- return proxy.$raw ?? proxy;
4441
- }
4442
- function isDeepSignal(value) {
4443
- if (value === null || typeof value !== "object") return false;
4444
- try {
4445
- return value[SIGNAL_KEY] !== void 0;
4446
- } catch {
4447
- return false;
4448
- }
4449
- }
4450
-
4451
- // src/machine.ts
4452
- function createMachine(config) {
4453
- const currentState = signal(config.initial);
4454
- const contextData = signal(config.context ?? {});
4455
- const stateHistory = signal([config.initial]);
4456
- const done = computed(() => {
4457
- const stateCfg = config.states[currentState()];
4458
- return stateCfg?.type === "final";
4459
- });
4460
- const nextEvents = computed(() => {
4461
- const stateCfg = config.states[currentState()];
4462
- if (!stateCfg?.on) return [];
4463
- return Object.keys(stateCfg.on);
4464
- });
4465
- const initialStateCfg = config.states[config.initial];
4466
- if (initialStateCfg?.entry) {
4467
- initialStateCfg.entry({ data: contextData(), event: "" });
4468
- }
4469
- function send(event) {
4470
- if (done()) return;
4471
- const state = currentState();
4472
- const stateCfg = config.states[state];
4473
- if (!stateCfg?.on) return;
4474
- const transition = stateCfg.on[event];
4475
- if (!transition) return;
4476
- let target;
4477
- let guard;
4478
- let action;
4479
- if (typeof transition === "string") {
4480
- target = transition;
4481
- } else {
4482
- const t = transition;
4483
- target = t.target;
4484
- guard = t.guard;
4485
- action = t.action;
4486
- }
4487
- const ctx = {
4488
- data: contextData(),
4489
- event
4490
- };
4491
- if (guard && !guard(ctx)) return;
4492
- if (stateCfg.exit) {
4493
- stateCfg.exit(ctx);
4494
- }
4495
- if (action) {
4496
- action(ctx);
4497
- }
4498
- contextData.set(ctx.data);
4499
- currentState.set(target);
4500
- stateHistory.update((h) => [...h, target]);
4501
- const targetCfg = config.states[target];
4502
- if (targetCfg?.entry) {
4503
- targetCfg.entry({ data: contextData(), event });
4504
- }
4505
- }
4506
- function can(event) {
4507
- const stateCfg = config.states[currentState()];
4508
- if (!stateCfg?.on) return false;
4509
- const transition = stateCfg.on[event];
4510
- if (!transition) return false;
4511
- if (typeof transition !== "string") {
4512
- const t = transition;
4513
- if (t.guard) {
4514
- return t.guard({ data: contextData(), event });
4515
- }
4516
- }
4517
- return true;
4518
- }
4519
- return {
4520
- state: () => currentState(),
4521
- context: () => contextData(),
4522
- send,
4523
- matches: (state) => currentState() === state,
4524
- done,
4525
- reset() {
4526
- currentState.set(config.initial);
4527
- contextData.set(config.context ?? {});
4528
- stateHistory.set([config.initial]);
4529
- },
4530
- history: () => stateHistory(),
4531
- can,
4532
- nextEvents
4533
- };
4534
- }
4535
-
4536
- // src/event-bus.ts
4537
- function createEventBus() {
4538
- const listeners = /* @__PURE__ */ new Map();
4539
- function getSet(event) {
4540
- let set = listeners.get(event);
4541
- if (!set) {
4542
- set = /* @__PURE__ */ new Set();
4543
- listeners.set(event, set);
4544
- }
4545
- return set;
4546
- }
4547
- return {
4548
- on(event, handler) {
4549
- getSet(event).add(handler);
4550
- return () => getSet(event).delete(handler);
4551
- },
4552
- once(event, handler) {
4553
- const wrapper = (data) => {
4554
- getSet(event).delete(wrapper);
4555
- handler(data);
4556
- };
4557
- getSet(event).add(wrapper);
4558
- return () => getSet(event).delete(wrapper);
4559
- },
4560
- emit(event, data) {
4561
- const set = listeners.get(event);
4562
- if (set) {
4563
- for (const handler of set) {
4564
- handler(data);
4565
- }
4566
- }
4567
- },
4568
- off(event, handler) {
4569
- getSet(event).delete(handler);
4570
- },
4571
- clear(event) {
4572
- if (event) {
4573
- listeners.delete(event);
4574
- } else {
4575
- listeners.clear();
4576
- }
4577
- },
4578
- listenerCount(event) {
4579
- return listeners.get(event)?.size ?? 0;
4580
- },
4581
- hasListeners(event) {
4582
- return (listeners.get(event)?.size ?? 0) > 0;
4583
- }
4584
- };
4585
- }
4586
- var globalBus = null;
4587
- function globalEventBus() {
4588
- if (!globalBus) {
4589
- globalBus = createEventBus();
4590
- }
4591
- return globalBus;
4592
- }
4593
-
4594
- export { Await, ErrorBoundary, HYDRATE_ATTR, Image, LWWRegister, Portal, Suspense, Switch, Transition, VirtualFor, animate, animateGroup, animateSequence, animateSpring, animateStagger, applyDirective, applyStyles, assignTransitionName, awaitSignal, bindClass, bindClasses, bindDimensions, bindElement, bindGroup, bindGroupItem, bindScroll, bindStyle, bindStyles, calculateRange, capitalize, chain, checkForLeaks, claimElement, claimText, clearProviders, clearQueryState, clearStores, collectSSRHead, countOps, createApp, createDataTable, createEventBus, createFlip, createInjector, createLocalTransport, createMachine, createOfflineStore, createSlots, createSync, createTimer, createToaster, createWebSocketTransport, css, currency, cx, date, deepSignal, defer, defineAsyncComponent, defineCustomElement, defineDirective, defineFormAction, definePipe, definePlugin, defineProvider, defineSnippet, defineStates, defineStore, directiveFromFn, disableLeakDetection, discoverStaticRoutes, easings, enableLeakDetection, enableSnapshots, enterTransition, escapeHtml, exitTransition, findHydrationBoundaries, flip, formatProfile, generatePaths, generateSWScript, generateSitemap, generateTransitionCSS, getActiveEffects, getLeakDetectionStats, getProfileSummary, getQueryParams, getSuspenseContext, getTransitionClasses, globalEventBus, hasSlot, hydrate, injectProvider, inspect, isDeepSignal, isHydrationActive, isLeakDetectionEnabled, isProfiling, isServerRendering, json, keyframes, longestIncreasingSubsequence, lowercase, match, measureAsync, measureSync, nodeToHtml, number, onEvent, percent, pipe, plural, prerender, progressiveHydrate, reconcileKeys, recordPerfEntry, registerPending, registerServiceWorker, relativeTime, removeDirectives, removeQueryState, renderHeadToString, renderNodes, renderSlot, renderSwitch, renderToStream, renderToString, renderToStringSync, reportLeaks, resetQueryState, sitemapFromResults, ssrElement, ssrRaw, ssrText, startProfiling, startViewTransition, stopProfiling, subscribePush, supportsViewTransitions, titleCase, toCustomElement, toRaw, trackEffect, trim, truncate, tweened, untrackEffect, updateDirective, uppercase, urlToFilePath, useAnnounce, useBreakpoint, useClickOutside, useClipboard, useCounter, useDebounce, useFocusTrap, useGeolocation, useHead, useInfiniteScroll, useInterval, useKeyboard, useMediaQuery, useOnline, useOpenGraph, usePrevious, useQueryState, useQueryStates, useSEO, useStorage, useStructuredData, useTheme, useThrottle, useTimeout, useToggle, useTwitterCard, useVirtualList, useWindowSize, vAutoFocus, vClickOutside, vIntersect, vLongPress, vResize, viewTransitionCSS, watch, watchDebounced, watchOnce, withModifiers };
4595
- //# sourceMappingURL=index.js.map
71
+ `),i}function po(e,t){e.style.viewTransitionName=t;}function fo(e,t){let n=document.documentElement,r=new Promise(async o=>{n.style.transition="opacity 0.15s ease",n.style.opacity="0",await new Promise(i=>setTimeout(i,150)),await e(),n.style.opacity="1",await new Promise(i=>setTimeout(i,150)),n.style.transition="",n.style.opacity="",t.onAfter?.(),o();});return {finished:r,updateCallbackDone:r,ready:Promise.resolve(),skipTransition:()=>{n.style.transition="",n.style.opacity="";}}}function mo(e){return Array.isArray(e)?e.join(","):typeof e=="boolean"?e?"true":"false":String(e)}function go(e,t){return typeof t=="number"?Number(e):typeof t=="boolean"?e==="true"||e==="1":Array.isArray(t)?e?e.split(","):[]:e}function B(){return typeof window>"u"?new URLSearchParams:new URLSearchParams(window.location.search)}function yo(e,t){if(typeof window>"u")return;let n=e.toString(),r=n?`${window.location.pathname}?${n}${window.location.hash}`:`${window.location.pathname}${window.location.hash}`;t==="push"?window.history.pushState(null,"",r):window.history.replaceState(null,"",r);}var _=new Map,Oe=false;function ho(){Oe||typeof window>"u"||(Oe=true,window.addEventListener("popstate",()=>{let e=B();a(()=>{for(let[t,n]of _){let r=e.get(t),o=r!==null?n.deserialize(r):n.defaultValue;n.signal.set(o);}});}));}function Le(e,t,n={}){let{serialize:r=m=>mo(m),deserialize:o=m=>go(m,t),history:i="replace",debounce:s=0,removeDefault:a=true}=n,l=B().get(e),d=l!==null?o(l):t,u=c(d);_.set(e,{signal:u,deserialize:o,defaultValue:t}),ho();let f=null,p=false,y=u.set;u.set=m=>{if(y(m),p);let h=()=>{let b=B();a&&m===t?b.delete(e):b.set(e,r(m)),yo(b,i);};s>0?(f&&clearTimeout(f),f=setTimeout(h,s)):h();};u.update;return u.update=m=>{u.set(m(u()));},u}function To(e,t){let n={};for(let[r,o]of Object.entries(e))n[r]=Le(r,o.default,{serialize:o.serialize,deserialize:o.deserialize,history:t?.history});return n}function vo(){if(typeof window>"u")return;let e=`${window.location.pathname}${window.location.hash}`;window.history.replaceState(null,"",e),a(()=>{for(let[,t]of _)t.signal.set(t.defaultValue);});}function bo(){let e=B(),t={};return e.forEach((n,r)=>{t[r]=n;}),t}function wo(e){_.delete(e);}function xo(){_.clear();}var De={linear:e=>e,cubicIn:e=>e*e*e,cubicOut:e=>1-Math.pow(1-e,3),cubicInOut:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,quadIn:e=>e*e,quadOut:e=>1-(1-e)*(1-e),quintOut:e=>1-Math.pow(1-e,5),bounceOut:e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,elasticOut:e=>e===0||e===1?e:Math.pow(2,-10*e)*Math.sin((e-.1)*5*Math.PI)+1};function So(e,t,n){return typeof e=="number"&&typeof t=="number"?e+(t-e)*n:n<.5?e:t}function Eo(e,t={}){let{duration:n=400,easing:r=De.cubicOut,interpolate:o=So,delay:i=0}=t,s=c(e),a=c(e),c$1=0,l=false,d=(()=>s());return d.set=(u,f)=>{let p=f?.duration??n,y=f?.easing??r,T=f?.interpolate??o,m=f?.delay??i,h=s();return a.set(u),p===0?(s.set(u),Promise.resolve()):(l&&(cancelAnimationFrame(c$1),l=false),new Promise(b=>{let P=performance.now()+m;l=true;function v(x){if(!l){b();return}let k=x-P;if(k<0){c$1=requestAnimationFrame(v);return}let A=Math.min(k/p,1),R=y(A);s.set(T(h,u,R)),A<1?c$1=requestAnimationFrame(v):(l=false,b());}c$1=requestAnimationFrame(v);}))},d.setImmediate=u=>{l&&(cancelAnimationFrame(c$1),l=false),s.set(u),a.set(u);},d.target=()=>a(),d}function Me(e,t={}){let{duration:n=300,easing:r="cubic-bezier(0.2, 0, 0, 1)",delay:o=0,selector:i,keyAttribute:s="data-key",onComplete:a}=t,c=new Map;function l(){return Array.from(i?e.querySelectorAll(i):e.children)}function d(p){return p.getAttribute(s)??p.id??""}function u(){c=new Map;for(let p of l()){let y=d(p);if(y){let T=p.getBoundingClientRect();c.set(y,{left:T.left,top:T.top,width:T.width,height:T.height});}}}function f(){let p=l(),y=[];for(let m of p){let h=d(m),b=c.get(h);if(!b)continue;let P=m.getBoundingClientRect(),v=b.left-P.left,x=b.top-P.top,k=b.width/(P.width||1),A=b.height/(P.height||1);if(Math.abs(v)<.5&&Math.abs(x)<.5&&Math.abs(k-1)<.01&&Math.abs(A-1)<.01)continue;let R=m.animate([{transform:`translate(${v}px, ${x}px) scale(${k}, ${A})`},{transform:"translate(0, 0) scale(1, 1)"}],{duration:n,easing:r,delay:o,fill:"both"});y.push(R);}let T=new Set(p.map(d));for(let[m,h]of c)T.has(m);return c.clear(),new Promise(m=>{if(y.length===0){a?.(),m();return}Promise.all(y.map(h=>h.finished)).then(()=>{for(let h of y)h.cancel();a?.(),m();});})}return {measure:u,animate:f,async flip(p){return u(),p(),await new Promise(y=>requestAnimationFrame(y)),f()}}}async function Po(e,t,n){return Me(e,n).flip(t)}var ko=A(e=>{let t=c({status:"pending"}),n=e.props.promise;return e.props.promise.then(r=>{e.props.promise===n&&t.set({status:"resolved",value:r});}).catch(r=>{e.props.promise===n&&t.set({status:"rejected",error:r instanceof Error?r:new Error(String(r))});}),()=>{let r=t();switch(r.status){case "pending":return e.props.pending?u(e.props.pending()):document.createComment("await-pending");case "resolved":return u(e.props.then(r.value));case "rejected":return e.props.catch?u(e.props.catch(r.error)):document.createComment("await-error")}}});function Co(e){let t=c({status:"pending"});return e.then(n=>t.set({status:"resolved",value:n})).catch(n=>t.set({status:"rejected",error:n instanceof Error?n:new Error(String(n))})),()=>t()}function Ie(e,t){return n=>{t.self&&n.target!==n.currentTarget||(t.preventDefault&&n.preventDefault(),t.stopPropagation&&n.stopPropagation(),t.stopImmediatePropagation&&n.stopImmediatePropagation?.(),e(n));}}function Ao(e,t,n,r={}){let o=Ie(n,r),i={once:r.once,capture:r.capture,passive:r.passive};return e.addEventListener(t,o,i),()=>e.removeEventListener(t,o,i)}function Ro(e){let t=c(e.clientWidth),n=c(e.clientHeight);return typeof ResizeObserver<"u"&&new ResizeObserver(o=>{let i=o[0];i&&(t.set(i.contentRect.width),n.set(i.contentRect.height));}).observe(e),{width:()=>t(),height:()=>n()}}function Oo(e){let t=e??(typeof window<"u"?window:null),n=c(e?e.scrollLeft:window?.scrollX??0),r=c(e?e.scrollTop:window?.scrollY??0);if(t){let s=()=>{e?(n.set(e.scrollLeft),r.set(e.scrollTop)):(n.set(window.scrollX),r.set(window.scrollY));};t.addEventListener("scroll",s,{passive:true});}let o=r.set;r.set=s=>{o(s),e?e.scrollTop=s:window?.scrollTo(window.scrollX,s);};let i=n.set;return n.set=s=>{i(s),e?e.scrollLeft=s:window?.scrollTo(s,window.scrollY);},{scrollX:n,scrollY:r}}function Lo(){return c(null)}function Do(e){return c(null)}function Mo(e$1,t,n){e$1.name=typeof n=="string"?n:"",e$1.addEventListener("change",()=>{e$1.checked&&t.set(n);}),e(()=>{e$1.checked=t()===n;});}function He(e$1,t,n){return e(()=>{n()?e$1.classList.add(t):e$1.classList.remove(t);})}function Io(e,t){let n=Object.entries(t).map(([r,o])=>He(e,r,o));return ()=>n.forEach(r=>r())}function je(e$1,t,n){let r=t.replace(/[A-Z]/g,o=>`-${o.toLowerCase()}`);return e(()=>{let o=n();o==null?e$1.style.removeProperty(r):e$1.style.setProperty(r,typeof o=="number"?`${o}px`:String(o));})}function Ho(e,t){let n=Object.entries(t).map(([r,o])=>je(e,r,o));return ()=>n.forEach(r=>r())}function jo(e){return e}function Fo(...e$1){let t={},n=[];for(let a of e$1)typeof a=="function"?n.push(a):typeof a=="object"&&a!==null&&(t=a);let{label:r="inspect",level:o="log",logger:i,when:s}=t;return e(()=>{if(s&&!s())return;let a=n.map(c=>c());i?i(r,...a):console[o](`[${r}]`,...a);})}function No(e,t={}){let{method:n="POST",headers:r={},onSuccess:o,onError:i,fetch:s=globalThis.fetch.bind(globalThis)}=t,a=c(false),c$1=c(null),l=c(null);async function d(u){a.set(true),l.set(null);try{let f=await s(e,{method:n,headers:{"Content-Type":"application/json",...r},body:JSON.stringify(u)});if(!f.ok)throw new Error(`Form action failed: ${f.status}`);let p=await f.json();return c$1.set(p),a.set(!1),o?.(p),p}catch(f){let p=f instanceof Error?f:new Error(String(f));throw l.set(p),a.set(false),i?.(p),p}}return {url:e,method:n,submitting:()=>a(),result:()=>c$1(),error:()=>l(),handle(u){return f=>{f.preventDefault();let p=f.target,y=new FormData(p),T={...u};y.forEach((m,h)=>{T[h]=m;}),d(T);}},submit:d}}function $o(e={}){if(typeof window>"u")return ()=>{};let{keyPrefix:t="akash-snapshot",capture:n=["scroll","forms"]}=e;function r(){let c={scrollX:window.scrollX,scrollY:window.scrollY,forms:{},timestamp:Date.now()};return n.includes("forms")&&document.querySelectorAll("form[id]").forEach(l=>{let d=l,u={};new FormData(d).forEach((f,p)=>{u[p]=String(f);}),c.forms[d.id]=u;}),c}function o(c){if(n.includes("scroll")&&requestAnimationFrame(()=>{window.scrollTo(c.scrollX,c.scrollY);}),n.includes("forms"))for(let[l,d]of Object.entries(c.forms)){let u=document.getElementById(l);if(u)for(let[f,p]of Object.entries(d)){let y=u.elements.namedItem(f);y&&(y.value=p);}}}let i=()=>`${t}-${window.location.pathname}`;function s(){try{let c=r();sessionStorage.setItem(i(),JSON.stringify(c));}catch{}}function a(){try{let c=sessionStorage.getItem(i());if(c){let l=JSON.parse(c);Date.now()-l.timestamp<1800*1e3&&o(l);}}catch{}}return window.addEventListener("beforeunload",s),window.addEventListener("popstate",()=>{requestAnimationFrame(a);}),performance.getEntriesByType("navigation")[0]?.type==="back_forward"&&requestAnimationFrame(a),()=>{window.removeEventListener("beforeunload",s);}}function oe(e$1,t,n={}){let{immediate:r=false,once:o=false,debounce:i,deep:s=false}=n,a=Array.isArray(e$1),c=a?e$1:[e$1],l=c.map(()=>{}),d=true,u=null,f=false,p=null,y=()=>{f=true,u&&clearTimeout(u),p?.();};p=e(()=>{let m=c.map(P=>P());if(d){d=false,l=s?m.map(Fe):[...m],r&&T(m,c.map(()=>{}));return}if(!(s?m.some((P,v)=>!Vo(P,l[v])):m.some((P,v)=>!Object.is(P,l[v]))))return;let b=[...l];l=s?m.map(Fe):[...m],T(m,b);});function T(m,h){if(f)return;let b=()=>{a?t(m,h):t(m[0],h[0]),o&&(u&&clearTimeout(u),f=true,y());};i&&i>0?(u&&clearTimeout(u),u=setTimeout(b,i)):b();}return y}function _o(e,t){return oe(e,t,{once:true,immediate:true})}function Ko(e,t,n){return oe(e,t,{debounce:n})}function Fe(e){if(e===null||typeof e!="object")return e;try{return JSON.parse(JSON.stringify(e))}catch{return e}}function Vo(e,t){if(Object.is(e,t))return true;if(e===null||t===null||typeof e!="object"||typeof t!="object")return false;try{return JSON.stringify(e)===JSON.stringify(t)}catch{return false}}var Ne=Symbol("deepSignal"),zo=Symbol("deepRaw");function Wo(e){let t=c(0),n=JSON.parse(JSON.stringify(e));function r(){t.update(i=>i+1);}function o(i,s=[]){return new Proxy(i,{get(a,c,l){if(c==="$raw")return JSON.parse(JSON.stringify(n));if(c==="$signal")return ()=>(t(),JSON.parse(JSON.stringify(n)));if(c===Ne)return t;if(c===zo)return n;let d=Reflect.get(a,c,l);return t(),d!==null&&typeof d=="object"?o(d,[...s,String(c)]):d},set(a,c,l){let d=Reflect.set(a,c,l);return r(),d},deleteProperty(a,c){let l=Reflect.deleteProperty(a,c);return r(),l}})}return o(n)}function qo(e){return e.$raw??e}function Bo(e){if(e===null||typeof e!="object")return false;try{return e[Ne]!==void 0}catch{return false}}function $e(){let e=new Map;function t(n){let r=e.get(n);return r||(r=new Set,e.set(n,r)),r}return {on(n,r){return t(n).add(r),()=>t(n).delete(r)},once(n,r){let o=i=>{t(n).delete(o),r(i);};return t(n).add(o),()=>t(n).delete(o)},emit(n,r){let o=e.get(n);if(o)for(let i of Array.from(o))i(r);},off(n,r){t(n).delete(r);},clear(n){n?e.delete(n):e.clear();},listenerCount(n){return e.get(n)?.size??0},hasListeners(n){return (e.get(n)?.size??0)>0}}}var ie=null;function Uo(){return ie||(ie=$e()),ie}var Go=new Set(["a","abbr","address","article","aside","b","bdi","bdo","blockquote","br","caption","cite","code","col","colgroup","dd","del","details","dfn","div","dl","dt","em","figcaption","figure","footer","h1","h2","h3","h4","h5","h6","header","hr","i","img","ins","kbd","li","main","mark","nav","ol","p","pre","q","rp","rt","ruby","s","samp","section","small","span","strong","sub","summary","sup","table","tbody","td","tfoot","th","thead","time","tr","u","ul","var","wbr"]),Qo=new Set(["alt","class","dir","href","id","lang","name","rel","src","style","tabindex","target","title","type","width","height","colspan","rowspan","scope","loading","decoding"]),Jo=/^(javascript|data|vbscript):/i,Yo=/^on/i;function Ke(e,t={}){if(typeof document>"u")return e.replace(/<[^>]*>/g,"");let{allowTags:n=[],allowAttrs:r=[],allowDataAttrs:o=true,allowAriaAttrs:i=true,allowStyle:s=false,tagFilter:a,attrFilter:c}=t,l=new Set([...Go,...n]),d=new Set([...Qo,...r]);s||d.delete("style");let u=new DOMParser().parseFromString(e,"text/html");return Ve(u.body,l,d,o,i,a,c),u.body.innerHTML}function Ve(e,t,n,r,o,i,s){let a=Array.from(e.childNodes);for(let c of a)if(c.nodeType===Node.ELEMENT_NODE){let l=c,d=l.tagName.toLowerCase();if(!(i?i(d):t.has(d))){let p=document.createTextNode(l.textContent??"");e.replaceChild(p,c);continue}let f=Array.from(l.attributes);for(let p of f){let y=p.name.toLowerCase(),T=p.value;if(Yo.test(y)){l.removeAttribute(p.name);continue}if(!(y.startsWith("data-")&&r)&&!(y.startsWith("aria-")&&o)){if(s&&!s(y,T,d)){l.removeAttribute(p.name);continue}if(!n.has(y)){l.removeAttribute(p.name);continue}if((y==="href"||y==="src")&&Jo.test(T)){l.removeAttribute(p.name);continue}}}Ve(l,t,n,r,o,i,s);}}function Xo(e){return e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}function Zo(e,t){return n=>{e.innerHTML=Ke(n,t);}}function ze(e={}){let n={...{"default-src":["'self'"],"script-src":["'self'"],"style-src":["'self'","'unsafe-inline'"],"img-src":["'self'","data:","https:"],"font-src":["'self'","https:"],"connect-src":["'self'"],"frame-ancestors":["'none'"],"base-uri":["'self'"],"form-action":["'self'"],"object-src":["'none'"]},...e.directives};if(e.nonce){let r=`'nonce-${e.nonce}'`;n["script-src"]&&n["script-src"].push(r),n["style-src"]&&n["style-src"].push(r);}return e.reportUri&&(n["report-uri"]=[e.reportUri]),Object.entries(n).map(([r,o])=>`${r} ${o.join(" ")}`).join("; ")}function We(e={}){return e.reportOnly?"Content-Security-Policy-Report-Only":"Content-Security-Policy"}function ei(e={}){let t={};if(e.csp!==false){let n=e.csp??{};t[We(n)]=ze(n);}if(e.frameOptions!==false&&(t["X-Frame-Options"]=e.frameOptions??"DENY"),e.contentTypeOptions!==false&&(t["X-Content-Type-Options"]="nosniff"),t["X-XSS-Protection"]=e.xssProtection?"1; mode=block":"0",e.hsts!==false){let n=e.hsts??{maxAge:31536e3,includeSubDomains:true},r=`max-age=${n.maxAge}`;n.includeSubDomains&&(r+="; includeSubDomains"),n.preload&&(r+="; preload"),t["Strict-Transport-Security"]=r;}if(e.referrerPolicy!==false&&(t["Referrer-Policy"]=e.referrerPolicy??"strict-origin-when-cross-origin"),e.permissionsPolicy!==false){let n=e.permissionsPolicy??{camera:[],microphone:[],geolocation:[],payment:[]};t["Permissions-Policy"]=Object.entries(n).map(([r,o])=>`${r}=(${o.join(" ")})`).join(", ");}return e.coop!==false&&(t["Cross-Origin-Opener-Policy"]=e.coop??"same-origin"),e.coep!==false&&(t["Cross-Origin-Embedder-Policy"]=e.coep??"require-corp"),t}function qe(e,...t){let n=new Set(["__proto__","constructor","prototype"]);for(let r of t)if(!(!r||typeof r!="object"))for(let o of Object.keys(r)){if(n.has(o))continue;let i=e[o],s=r[o];_e(s)&&_e(i)?e[o]=qe({...i},s):e[o]=s;}return e}function Be(e){if(e===null||typeof e!="object")return e;Object.freeze(e);for(let t of Object.values(e))typeof t=="object"&&t!==null&&Be(t);return e}function _e(e){return e!==null&&typeof e=="object"&&Object.getPrototypeOf(e)===Object.prototype}async function ti(e,t="sha384"){let r=new TextEncoder().encode(e),o=t==="sha256"?"SHA-256":t==="sha384"?"SHA-384":"SHA-512",i=await crypto.subtle.digest(o,r),s=new Uint8Array(i),a=btoa(String.fromCharCode(...s));return `${t}-${a}`}function Ue(){let e=new Uint8Array(32);return crypto.getRandomValues(e),Array.from(e,t=>t.toString(16).padStart(2,"0")).join("")}function ni(e={}){let{headerName:t="X-CSRF-Token",cookieName:n="csrf-token",tokenGenerator:r=Ue}=e,o=null;function i(){if(!o){if(typeof document<"u"){let a=document.cookie.match(new RegExp(`${n}=([^;]+)`));if(a)return o=a[1],o}o=r();}return o}return {interceptor:async(a,c)=>{let l=a.method.toUpperCase();return ["POST","PUT","PATCH","DELETE"].includes(l)&&a.headers.set(t,i()),c(a)},token:i,refresh(){o=r();}}}function ri(e,t={}){let{allowedHosts:n,allowedProtocols:r=["http:","https:"],allowRelative:o=true}=t;if(e.startsWith("/")&&!e.startsWith("//"))return o?e:null;try{let i=new URL(e);return !r.includes(i.protocol)||n&&!n.includes(i.hostname)?null:i.toString()}catch{return null}}function oi(e){let{maxAttempts:t,windowMs:n}=e,r=[];return {check(){let o=Date.now();for(;r.length>0&&r[0]<o-n;)r.shift();return r.length>=t?false:(r.push(o),true)},remaining(){let o=Date.now();for(;r.length>0&&r[0]<o-n;)r.shift();return Math.max(0,t-r.length)},reset(){r.length=0;}}}var se=new Set,Ge=true,ae=null;function ii(e){Ge=e;}function si(e){ae=e;}function ai(){se.clear();}function ci(e,t){let n=((...r)=>(Qe(t),e(...r)));return Object.keys(e).forEach(r=>{n[r]=e[r];}),n.__deprecated=t,n}function li(e,t){return Qe(t),e}function Qe(e){if(!Ge||se.has(e.name))return;se.add(e.name);let t=[`[AkashJS] DEPRECATED: ${e.name}() is deprecated since v${e.since}`];e.removeIn?t[0]+=` and will be removed in v${e.removeIn}.`:t[0]+=".",e.replacement&&t.push(` Migrate to: ${e.replacement}()`),e.message&&t.push(` ${e.message}`),t.push(` See: ${e.link??"https://akash.js.org/migration"}`);let n=t.join(`
72
+ `);ae?ae(n):typeof console<"u"&&console.warn(n);}var U=new Map;function ui(e){U.set(e.name,e);}function Je(){return Array.from(U.values())}function di(e){return Je().filter(t=>t.stability===e)}function pi(e){return U.get(e)?.stability==="deprecated"}function fi(e){return U.get(e)?.deprecation??null}function mi(e){let t=[],n=[],r=Object.entries(e);if(r.length===0)return {compatible:true,warnings:t,errors:n};let o=r.filter(([i])=>i.startsWith("@akashjs/"));if(o.length>1){let i=new Set(o.map(([,a])=>a.split(".")[0])),s=new Set(o.map(([,a])=>a.split(".").slice(0,2).join(".")));i.size>1?n.push(`Major version mismatch: ${o.map(([a,c])=>`${a}@${c}`).join(", ")}. All @akashjs packages should be on the same major version.`):s.size>1&&t.push(`Minor version mismatch: ${o.map(([a,c])=>`${a}@${c}`).join(", ")}. Consider updating all packages to the same version with \`akash update\`.`);}return {compatible:n.length===0,warnings:t,errors:n}}export{ko as Await,Zt as ErrorBoundary,pe as HYDRATE_ATTR,lr as Image,Dn as Portal,nn as Suspense,Qr as Switch,un as Transition,Fn as VirtualFor,Ir as applyDirective,pr as applyStyles,po as assignTransitionName,Co as awaitSignal,He as bindClass,Io as bindClasses,Ro as bindDimensions,Lo as bindElement,Do as bindGroup,Mo as bindGroupItem,Oo as bindScroll,je as bindStyle,Ho as bindStyles,Z as calculateRange,xr as capitalize,Tr as chain,mi as checkCompatibility,Te as checkForLeaks,on as claimElement,sn as claimText,to as clearProviders,vo as clearQueryState,pn as collectSSRHead,$n as countOps,gn as createApp,ni as createCSRFInterceptor,fr as createDataTable,$e as createEventBus,Me as createFlip,Ae as createInjector,oi as createRateLimiter,Zo as createSafeHTML,Xt as createSlots,er as createTimer,In as createToaster,dr as css,Cr as currency,be as cx,kr as date,Be as deepFreeze,Wo as deepSignal,no as defer,Nn as defineAsyncComponent,Vr as defineCustomElement,I as defineDirective,No as defineFormAction,vr as definePipe,mn as definePlugin,Xr as defineProvider,jo as defineSnippet,ci as deprecated,li as deprecatedValue,Mr as directiveFromFn,Kn as disableLeakDetection,Br as discoverStaticRoutes,De as easings,_n as enableLeakDetection,$o as enableSnapshots,me as enterTransition,Xo as escapeHtml,ln as exitTransition,cn as findHydrationBoundaries,Po as flip,tr as formatProfile,ze as generateCSP,Ue as generateCSRFToken,Ur as generatePaths,ti as generateSRI,ei as generateSecurityHeaders,yr as generateSitemap,dn as generateTransitionCSS,di as getAPIsByStability,qn as getActiveEffects,We as getCSPHeaderName,fi as getDeprecationInfo,Un as getLeakDetectionStats,ve as getProfileSummary,bo as getQueryParams,Je as getRegisteredAPIs,en as getSuspenseContext,fe as getTransitionClasses,Uo as globalEventBus,Yt as hasSlot,J as hydrate,eo as injectProvider,Fo as inspect,Bo as isDeepSignal,pi as isDeprecated,rn as isHydrationActive,Vn as isLeakDetectionEnabled,Yn as isProfiling,Or as json,ge as longestIncreasingSubsequence,wr as lowercase,Jr as match,Zn as measureAsync,Xn as measureSync,Ar as number,Ao as onEvent,Rr as percent,hr as pipe,Lr as plural,qr as prerender,an as progressiveHydrate,ye as reconcileKeys,z as recordPerfEntry,ui as registerAPI,tn as registerPending,Dr as relativeTime,jr as removeDirectives,wo as removeQueryState,fn as renderHeadToString,Jt as renderSlot,ke as renderSwitch,Bn as reportLeaks,ai as resetDeprecationWarnings,xo as resetQueryState,qe as safeMerge,Ke as sanitize,ri as sanitizeURL,ii as setDeprecationWarnings,si as setWarningHandler,Gr as sitemapFromResults,Qn as startProfiling,lo as startViewTransition,Jn as stopProfiling,Re as supportsViewTransitions,Sr as titleCase,zr as toCustomElement,qo as toRaw,zn as trackEffect,Er as trim,Pr as truncate,Eo as tweened,Wn as untrackEffect,Hr as updateDirective,br as uppercase,Pe as urlToFilePath,ir as useAnnounce,Pn as useBreakpoint,Ln as useClickOutside,Cn as useClipboard,bn as useCounter,Tn as useDebounce,rr as useFocusTrap,Rn as useGeolocation,j as useHead,ur as useInfiniteScroll,yn as useInterval,sr as useKeyboard,Sn as useMediaQuery,An as useOnline,Se as useOpenGraph,xn as usePrevious,Le as useQueryState,To as useQueryStates,gr as useSEO,kn as useStorage,xe as useStructuredData,Hn as useTheme,vn as useThrottle,hn as useTimeout,wn as useToggle,Ee as useTwitterCard,jn as useVirtualList,On as useWindowSize,Fr as vAutoFocus,Nr as vClickOutside,_r as vIntersect,$r as vLongPress,Kr as vResize,uo as viewTransitionCSS,oe as watch,Ko as watchDebounced,_o as watchOnce,Ie as withModifiers};//# sourceMappingURL=index.js.map
4596
73
  //# sourceMappingURL=index.js.map