mancha 0.23.0 → 0.24.0

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.
@@ -181,45 +181,28 @@ $.items.length = 0;
181
181
 
182
182
  ## Notification Scheduling
183
183
 
184
- Observers do not run on the same tick as the write. Notifications for a key are
185
- debounced, so a burst of writes coalesces into a single observer run:
184
+ Observers do not run on the same tick as the write. Writing a key schedules its
185
+ observers to run once, about 10ms later; any further writes in that window join
186
+ the run already scheduled instead of postponing it:
186
187
 
187
188
  ```js
188
- $.view = buildView(); // Called repeatedly...
189
- $.view = buildView(); // ...but observers run once.
189
+ $.view = buildView(); // Schedules the run...
190
+ $.view = buildView(); // ...joins it. Observers run once, with the latest value.
190
191
  ```
191
192
 
192
- The default debounce is 10ms, which suits a view object republished wholesale.
193
- It is the wrong clock for a value that changes every frame, such as a pointer
194
- position during a drag. Use `debounce()` to opt a single key out without
195
- affecting the rest of the store:
193
+ Two things follow from that. Observers see only the final value of a burst, so
194
+ they never run against an intermediate state. And a key written continuously
195
+ still notifies every ~10ms rather than being held back indefinitely, so a value
196
+ updated on every pointer move keeps its observers running throughout the drag.
196
197
 
197
- ```js
198
- const { $ } = Mancha;
199
-
200
- // Notify on the next tick instead of waiting out the debounce.
201
- $.debounce("pointerX", 0);
202
-
203
- // Or flush once per animation frame, aligned with when the browser paints.
204
- // This is the right choice when the observer ends in a DOM write.
205
- $.debounce("pointerX", "raf");
206
- ```
207
-
208
- Where `requestAnimationFrame` is unavailable (server-side rendering, workers),
209
- `"raf"` falls back to a timer automatically. Note that browsers do not run
210
- animation frames for a backgrounded tab, so a `"raf"` key stops notifying until
211
- the tab is visible again; keep it for values that only matter while painting.
212
-
213
- A continuously-written key is never starved: no matter how often it is written,
214
- its observers run at least once per frame rather than having the debounce
215
- deadline pushed back indefinitely.
198
+ Timing depends only on when a key is first written, not on how often, and is the
199
+ same in the browser, on the server, and in workers.
216
200
 
217
201
  > **Note:** An observer must not write the key it observes after an `await`.
218
202
  > Writes made by an observer's synchronous body are ignored, so the common case
219
203
  > of incidental self-writes is safe, but a write from an observer's asynchronous
220
204
  > tail is indistinguishable from an outside write and will re-trigger that
221
- > observer in a loop. Lowering the debounce for such a key makes the loop
222
- > proportionally faster, so fix the cycle rather than tuning the schedule.
205
+ > observer in a loop.
223
206
 
224
207
  ## Computed Values
225
208
 
@@ -380,6 +363,12 @@ const subrenderer = document.querySelector("p").renderer;
380
363
  subrenderer.dispose();
381
364
  ```
382
365
 
366
+ Disposal cascades: the subrenderers a renderer created (nested `:for` rows, `:data`, `:html`
367
+ and `:render` subrenderers) are disposed along with it, so disposing the outermost renderer of
368
+ a subtree releases the whole subtree. A disposed store never runs its observers again, so it
369
+ should be treated as spent rather than reused: registering a new `watch()` or `$effect()` on it
370
+ does not bring it back.
371
+
383
372
  This is useful when:
384
373
  - You're replacing large sections of dynamically-generated content
385
374
  - You're managing renderer lifecycles manually outside the DOM
package/docs/05_css.md CHANGED
@@ -14,24 +14,47 @@ The minimal CSS rules provide a clean, readable default style for standard HTML
14
14
  - **H1-H6 Margin**: 1em 0 0.5em
15
15
  - **P, UL, OL Margin Bottom**: 1em
16
16
 
17
- ## Basic CSS
17
+ ## CSS Reset
18
18
 
19
- The basic CSS rules provide a more comprehensive reset and set of defaults, widely based on Tailwind CSS Preflight. You can inject them using `injectCss(["basic"])` or by adding `css="basic"` to your script tag.
19
+ The reset provides a comprehensive set of defaults, widely based on Tailwind CSS Preflight. It ships with the utility classes: adding `css="utils"` to your script tag, or calling `injectCss(["utils"])`, injects both.
20
20
 
21
21
  ### Key Features
22
- - **Box Sizing**: `border-box` globally
23
22
  - **Typography**: Default sans-serif font stack, consistent line-height
24
- - **Form Elements**: Inherit font styles, transparent backgrounds, `cursor: pointer` for buttons
25
- - **Media**: Images/videos max-width 100%
23
+ - **Form Elements**: Inherit font styles and color from their container, with margin and padding zeroed; buttons also get a transparent background and `cursor: pointer`
26
24
  - **Dialog**: Default backdrop styling
27
25
  - **Resets**: Removes default margins/paddings from most block elements
28
26
 
27
+ ### Layout Effects
28
+
29
+ The reset applies to **all of your markup**, not only to elements carrying utility classes, so plain HTML lays out differently once it is injected. The rules with layout, rather than merely typographic, consequences are:
30
+
31
+ - `img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}` — media is no longer inline. `text-align:center` on a parent stops centering it, the inline baseline gap below images disappears, and images no longer flow alongside adjacent text.
32
+ - `img,video{max-width:100%;height:auto}` — media never overflows its container. `height:auto` also overrides the HTML `height` attribute, so `<img width="300" height="100">` renders at the file's own aspect ratio instead of the requested one. Inside a flex row the same clamp lets an image shrink below its intrinsic size.
33
+ - `*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}` — padding and border no longer add to an element's width. Default borders are also stripped, including those set through presentational HTML attributes, so `fieldset`, `iframe`, `img`, and `table` render without one until a border utility is applied. `hr` is the exception: the reset gives it back a 1px top border so horizontal rules stay visible.
34
+ - `body{margin:0;…}` and `blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}` — the page loses its default gutter and headings, paragraphs, and other blocks no longer space themselves apart, so plain prose collapses into a single run of text until spacing utilities are applied.
35
+ - `ol,ul,menu{list-style:none;margin:0;padding:0}` — bullets, numbers, and list indentation are gone; restore them with the `list-*` and padding utilities.
36
+ - `button,input,optgroup,select,textarea{…;margin:0;padding:0}` — form controls lose their native margin and padding on top of inheriting the surrounding font and color, so inputs and text areas render flush against their content and need padding utilities to look clickable.
37
+ - `button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;background-color:transparent;background-image:none;cursor:pointer}` — buttons lose their native chrome entirely and must be styled explicitly.
38
+ - `:disabled{cursor:default;pointer-events:none;opacity:0.75}` — beyond dimming, `pointer-events:none` is a behavioral change: disabled controls stop receiving hover, tooltip, and click handling. Tailwind Preflight only sets `cursor:default` here; the `pointer-events` and `opacity` declarations are mancha additions.
39
+
40
+ Opt out per element with utilities, e.g. to stop a flex item from being shrunk by its siblings. The class belongs on the flex item itself — on a nested image it does nothing, because only direct children of the flex container are flex items:
41
+
42
+ ```html
43
+ <div class="flex">
44
+ <div class="flex-none">
45
+ <img src="logo.svg" />
46
+ </div>
47
+ </div>
48
+ ```
49
+
50
+ The wrapper then keeps its content width, so the image is not shrunk. `flex-none` on the image itself is not enough even when the image is the direct flex child, because `max-width:100%` clamps it regardless of how flex sizes it. That clamp applies everywhere, not just in flex rows: an image in a container narrower than itself is scaled down to fit. Undo it with the arbitrary value `max-w-[none]` — there is no `max-w-none` utility.
51
+
29
52
  ## Utility CSS
30
53
 
31
54
  The utility CSS rules are inspired by Tailwind CSS. You can inject them using `injectCss(["utils"])` or by adding `css="utils"` to your script tag.
32
55
 
33
56
  This automatically includes:
34
- - **CSS Reset** (Tailwind Preflight): box-sizing, typography, form resets, media defaults
57
+ - **CSS Reset**: box-sizing, typography, form and media defaults applied to all of your markup — see [CSS Reset](#css-reset), in particular the layout effects on images, lists, and form controls
35
58
  - **Base utility classes**: spacing, sizing, colors, layout, typography, and more
36
59
  - **On-demand scanning**: responsive variants, orientation variants, pseudo-state variants, color opacity, custom bracket values, and dark mode are generated on-the-fly for only the classes actually used in your markup
37
60
 
@@ -621,7 +644,21 @@ Custom values support pseudo-states, responsive breakpoints, and dark mode:
621
644
 
622
645
  ### Dynamic Content
623
646
 
624
- For content added after initial load, call `injectCss(["custom"])` again to scan and inject new on-demand values.
647
+ Content rendered by Mancha is scanned automatically. Markup produced by anything else (raw `innerHTML`, a third-party widget) is not, so scan it yourself with `scanAndInject(root)`:
648
+
649
+ ```js
650
+ import { scanAndInject } from "mancha/browser";
651
+
652
+ widget.mount(container); // Third-party code writes into the container.
653
+ scanAndInject(container);
654
+ ```
655
+
656
+ Re-scanning an already-scanned tree is safe: each rule is injected once, and rules are re-injected if the stylesheet element is removed from the document.
657
+
658
+ Two limitations:
659
+
660
+ - **ESM only**: `scanAndInject` is exported from the module build, not from the global bundle loaded via a `<script>` tag.
661
+ - **No shadow DOM**: `querySelectorAll` does not pierce a shadow root, so scanning a host element finds nothing inside it. Scanning the shadow root itself does inject rules, but they land in the main document's stylesheet, where shadow-boundary scoping stops them from applying. Style shadow content with its own stylesheet instead.
625
662
 
626
663
  ---
627
664
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mancha",
3
- "version": "0.23.0",
3
+ "version": "0.24.0",
4
4
  "description": "Javscript HTML rendering engine",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -35,24 +35,52 @@ function generateMarkdown() {
35
35
  md += "- **H1-H6 Margin**: 1em 0 0.5em\n";
36
36
  md += "- **P, UL, OL Margin Bottom**: 1em\n\n";
37
37
 
38
- md += "## Basic CSS\n\n";
38
+ md += "## CSS Reset\n\n";
39
39
  md +=
40
- 'The basic CSS rules provide a more comprehensive reset and set of defaults, widely based on Tailwind CSS Preflight. You can inject them using `injectCss(["basic"])` or by adding `css="basic"` to your script tag.\n\n';
40
+ 'The reset provides a comprehensive set of defaults, widely based on Tailwind CSS Preflight. It ships with the utility classes: adding `css="utils"` to your script tag, or calling `injectCss(["utils"])`, injects both.\n\n';
41
41
  md += "### Key Features\n";
42
- md += "- **Box Sizing**: `border-box` globally\n";
43
42
  md += "- **Typography**: Default sans-serif font stack, consistent line-height\n";
44
43
  md +=
45
- "- **Form Elements**: Inherit font styles, transparent backgrounds, `cursor: pointer` for buttons\n";
46
- md += "- **Media**: Images/videos max-width 100%\n";
44
+ "- **Form Elements**: Inherit font styles and color from their container, with margin and padding zeroed; buttons also get a transparent background and `cursor: pointer`\n";
47
45
  md += "- **Dialog**: Default backdrop styling\n";
48
46
  md += "- **Resets**: Removes default margins/paddings from most block elements\n\n";
47
+ md += "### Layout Effects\n\n";
48
+ md +=
49
+ "The reset applies to **all of your markup**, not only to elements carrying utility classes, so plain HTML lays out differently once it is injected. The rules with layout, rather than merely typographic, consequences are:\n\n";
50
+ md +=
51
+ "- `img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}` — media is no longer inline. `text-align:center` on a parent stops centering it, the inline baseline gap below images disappears, and images no longer flow alongside adjacent text.\n";
52
+ md +=
53
+ '- `img,video{max-width:100%;height:auto}` — media never overflows its container. `height:auto` also overrides the HTML `height` attribute, so `<img width="300" height="100">` renders at the file\'s own aspect ratio instead of the requested one. Inside a flex row the same clamp lets an image shrink below its intrinsic size.\n';
54
+ md +=
55
+ "- `*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}` — padding and border no longer add to an element's width. Default borders are also stripped, including those set through presentational HTML attributes, so `fieldset`, `iframe`, `img`, and `table` render without one until a border utility is applied. `hr` is the exception: the reset gives it back a 1px top border so horizontal rules stay visible.\n";
56
+ md +=
57
+ "- `body{margin:0;…}` and `blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}` — the page loses its default gutter and headings, paragraphs, and other blocks no longer space themselves apart, so plain prose collapses into a single run of text until spacing utilities are applied.\n";
58
+ md +=
59
+ "- `ol,ul,menu{list-style:none;margin:0;padding:0}` — bullets, numbers, and list indentation are gone; restore them with the `list-*` and padding utilities.\n";
60
+ md +=
61
+ "- `button,input,optgroup,select,textarea{…;margin:0;padding:0}` — form controls lose their native margin and padding on top of inheriting the surrounding font and color, so inputs and text areas render flush against their content and need padding utilities to look clickable.\n";
62
+ md +=
63
+ "- `button,[type='button'],[type='reset'],[type='submit']{-webkit-appearance:button;background-color:transparent;background-image:none;cursor:pointer}` — buttons lose their native chrome entirely and must be styled explicitly.\n";
64
+ md +=
65
+ "- `:disabled{cursor:default;pointer-events:none;opacity:0.75}` — beyond dimming, `pointer-events:none` is a behavioral change: disabled controls stop receiving hover, tooltip, and click handling. Tailwind Preflight only sets `cursor:default` here; the `pointer-events` and `opacity` declarations are mancha additions.\n\n";
66
+ md +=
67
+ "Opt out per element with utilities, e.g. to stop a flex item from being shrunk by its siblings. The class belongs on the flex item itself — on a nested image it does nothing, because only direct children of the flex container are flex items:\n\n";
68
+ md += "```html\n";
69
+ md += '<div class="flex">\n';
70
+ md += ' <div class="flex-none">\n';
71
+ md += ' <img src="logo.svg" />\n';
72
+ md += " </div>\n";
73
+ md += "</div>\n";
74
+ md += "```\n\n";
75
+ md +=
76
+ "The wrapper then keeps its content width, so the image is not shrunk. `flex-none` on the image itself is not enough even when the image is the direct flex child, because `max-width:100%` clamps it regardless of how flex sizes it. That clamp applies everywhere, not just in flex rows: an image in a container narrower than itself is scaled down to fit. Undo it with the arbitrary value `max-w-[none]` — there is no `max-w-none` utility.\n\n";
49
77
 
50
78
  md += "## Utility CSS\n\n";
51
79
  md +=
52
80
  'The utility CSS rules are inspired by Tailwind CSS. You can inject them using `injectCss(["utils"])` or by adding `css="utils"` to your script tag.\n\n';
53
81
  md += "This automatically includes:\n";
54
82
  md +=
55
- "- **CSS Reset** (Tailwind Preflight): box-sizing, typography, form resets, media defaults\n";
83
+ "- **CSS Reset**: box-sizing, typography, form and media defaults applied to all of your markup — see [CSS Reset](#css-reset), in particular the layout effects on images, lists, and form controls\n";
56
84
  md += "- **Base utility classes**: spacing, sizing, colors, layout, typography, and more\n";
57
85
  md +=
58
86
  "- **On-demand scanning**: responsive variants, orientation variants, pseudo-state variants, color opacity, custom bracket values, and dark mode are generated on-the-fly for only the classes actually used in your markup\n\n";
@@ -563,7 +591,19 @@ function generateMarkdown() {
563
591
  md += "- Rapid prototyping (replace with scale values later)\n\n";
564
592
  md += "### Dynamic Content\n\n";
565
593
  md +=
566
- 'For content added after initial load, call `injectCss(["custom"])` again to scan and inject new on-demand values.\n\n';
594
+ "Content rendered by Mancha is scanned automatically. Markup produced by anything else (raw `innerHTML`, a third-party widget) is not, so scan it yourself with `scanAndInject(root)`:\n\n";
595
+ md += "```js\n";
596
+ md += 'import { scanAndInject } from "mancha/browser";\n\n';
597
+ md += "widget.mount(container); // Third-party code writes into the container.\n";
598
+ md += "scanAndInject(container);\n";
599
+ md += "```\n\n";
600
+ md +=
601
+ "Re-scanning an already-scanned tree is safe: each rule is injected once, and rules are re-injected if the stylesheet element is removed from the document.\n\n";
602
+ md += "Two limitations:\n\n";
603
+ md +=
604
+ "- **ESM only**: `scanAndInject` is exported from the module build, not from the global bundle loaded via a `<script>` tag.\n";
605
+ md +=
606
+ "- **No shadow DOM**: `querySelectorAll` does not pierce a shadow root, so scanning a host element finds nothing inside it. Scanning the shadow root itself does inject rules, but they land in the main document's stylesheet, where shadow-boundary scoping stops them from applying. Style shadow content with its own stylesheet instead.\n\n";
567
607
 
568
608
  md += "--- \n\n*Generated automatically from `src/css_gen_utils.ts`*\n";
569
609
 
@@ -1,43 +0,0 @@
1
- import{safeAnchorEl as e,safeAreaEl as t,safeElement as n,safeStyleEl as r}from"safevalues/dom";import{safeAttrPrefix as i,safeStyleSheet as a}from"safevalues";const o={sm:640,md:768,lg:1024,xl:1280},s=Object.entries(o),c=.25,l=[...Array(15)].map((e,t)=>t+1),u=[16,20,24,28,32,36,40,48,56,64],d=[72,80,96,128,160,192,256,320,384,512],f=[...l,...u,...d,...Object.values(o)],p=Array.from({length:20},(e,t)=>(t+1)*5),m=[25,50,75,100,150,200,300,500,700,1e3],h={margin:`m`,padding:`p`},g={width:`w`,height:`h`},_={top:`top`,right:`right`,bottom:`bottom`,left:`left`},ee={"min-width":`min-w`,"min-height":`min-h`,"max-width":`max-w`,"max-height":`max-h`},v={"transition-timing-function":`ease-in-out`,"transition-duration":`var(--transition-duration, 150ms)`},te={"font-mono":{"font-family":`monospace`},"font-sans":{"font-family":`sans-serif`},"font-serif":{"font-family":`serif`},"font-cursive":{"font-family":`cursive`},"text-xs":{"font-size":`.75rem`,"line-height":`calc(1 / 0.75)`},"text-sm":{"font-size":`.875rem`,"line-height":`calc(1.25 / 0.875)`},"text-base":{"font-size":`1rem`,"line-height":`calc(1.5 / 1)`},"text-lg":{"font-size":`1.125rem`,"line-height":`calc(1.75 / 1.125)`},"text-xl":{"font-size":`1.25rem`,"line-height":`calc(1.75 / 1.25)`},"text-2xl":{"font-size":`1.5rem`,"line-height":`calc(2 / 1.5)`},"text-3xl":{"font-size":`1.875rem`,"line-height":`calc(2.25 / 1.875)`},"text-4xl":{"font-size":`2.25rem`,"line-height":`calc(2.5 / 2.25)`},"text-5xl":{"font-size":`3rem`,"line-height":`1`},"text-6xl":{"font-size":`3.75rem`,"line-height":`1`},"text-7xl":{"font-size":`4.5rem`,"line-height":`1`},"font-thin":{"font-weight":100},"font-extralight":{"font-weight":200},"font-light":{"font-weight":300},"font-normal":{"font-weight":400},"font-medium":{"font-weight":500},"font-semibold":{"font-weight":600},"font-bold":{"font-weight":700},"font-extrabold":{"font-weight":800},"font-black":{"font-weight":900},italic:{"font-style":`italic`},"not-italic":{"font-style":`normal`},"w-max":{width:`max-content`},"w-min":{width:`min-content`},"w-fit":{width:`fit-content`},"h-max":{height:`max-content`},"h-min":{height:`min-content`},"h-fit":{height:`fit-content`},"size-auto":{width:`auto`,height:`auto`},"size-px":{width:`1px`,height:`1px`},"size-full":{width:`100%`,height:`100%`},"size-dvw":{width:`100dvw`,height:`100dvw`},"size-dvh":{width:`100dvh`,height:`100dvh`},"size-lvw":{width:`100lvw`,height:`100lvw`},"size-lvh":{width:`100lvh`,height:`100lvh`},"size-svw":{width:`100svw`,height:`100svw`},"size-svh":{width:`100svh`,height:`100svh`},"size-min":{width:`min-content`,height:`min-content`},"size-max":{width:`max-content`,height:`max-content`},"size-fit":{width:`fit-content`,height:`fit-content`},"tracking-tighter":{"letter-spacing":`-0.05em`},"tracking-tight":{"letter-spacing":`-0.025em`},"tracking-normal":{"letter-spacing":`0`},"tracking-wide":{"letter-spacing":`0.025em`},"tracking-wider":{"letter-spacing":`0.05em`},"tracking-widest":{"letter-spacing":`0.1em`},"leading-none":{"line-height":`1`},"leading-tight":{"line-height":`1.25`},"leading-snug":{"line-height":`1.375`},"leading-normal":{"line-height":`1.5`},"leading-relaxed":{"line-height":`1.625`},"leading-loose":{"line-height":`2`},"text-left":{"text-align":`left`},"text-right":{"text-align":`right`},"text-center":{"text-align":`center`},"text-justify":{"text-align":`justify`},underline:{"text-decoration":`underline`},"no-underline":{"text-decoration":`none`},"decoration-none":{"text-decoration":`none`},"line-through":{"text-decoration":`line-through`},uppercase:{"text-transform":`uppercase`},lowercase:{"text-transform":`lowercase`},capitalize:{"text-transform":`capitalize`},truncate:{"white-space":`nowrap`,overflow:`hidden`,"text-overflow":`ellipsis`},"text-elipsis":{"text-overflow":`ellipsis`},"text-clip":{"text-overflow":`clip`},"text-wrap":{"text-wrap":`wrap`},"text-nowrap":{"text-wrap":`nowrap`},"text-balance":{"text-wrap":`balance`},"text-pretty":{"text-wrap":`pretty`},"whitespace-normal":{"white-space":`normal`},"whitespace-nowrap":{"white-space":`nowrap`},"whitespace-pre":{"white-space":`pre`},"whitespace-pre-line":{"white-space":`pre-line`},"whitespace-pre-wrap":{"white-space":`pre-wrap`},"whitespace-break-spaces":{"white-space":`break-spaces`},relative:{position:`relative`},fixed:{position:`fixed`},absolute:{position:`absolute`},sticky:{position:`sticky`},"object-contain":{"object-fit":`contain`},"object-cover":{"object-fit":`cover`},"object-fill":{"object-fit":`fill`},"object-none":{"object-fit":`none`},block:{display:`block`},contents:{display:`contents`},hidden:{display:`none`},inline:{display:`inline`},"inline-block":{display:`inline-block`},visible:{visibility:`visible`},invisible:{visibility:`hidden`},collapse:{visibility:`collapse`},"list-none":{"list-style-type":`none`},"list-disc":{"list-style-type":`disc`},"list-decimal":{"list-style-type":`decimal`},flex:{display:`flex`},grid:{display:`grid`},"flex-1":{flex:`1 1 0%`},"flex-inline":{display:`inline-flex`},"flex-row":{"flex-direction":`row`},"flex-col":{"flex-direction":`column`},"flex-row-reverse":{"flex-direction":`row-reverse`},"flex-col-reverse":{"flex-direction":`column-reverse`},"flex-wrap":{"flex-wrap":`wrap`},"flex-wrap-reverse":{"flex-wrap":`wrap-reverse`},"flex-nowrap":{"flex-wrap":`nowrap`},"justify-start":{"justify-content":`flex-start`},"justify-end":{"justify-content":`flex-end`},"justify-center":{"justify-content":`center`},"justify-between":{"justify-content":`space-between`},"justify-around":{"justify-content":`space-around`},"justify-evenly":{"justify-content":`space-evenly`},"justify-stretch":{"justify-content":`stretch`},"items-start":{"align-items":`flex-start`},"items-end":{"align-items":`flex-end`},"items-center":{"align-items":`center`},"items-stretch":{"align-items":`stretch`},"flex-grow":{"flex-grow":1},"flex-shrink":{"flex-shrink":1},"align-baseline":{"vertical-align":`baseline`},"align-top":{"vertical-align":`top`},"align-middle":{"vertical-align":`middle`},"align-bottom":{"vertical-align":`bottom`},"align-text-top":{"vertical-align":`text-top`},"align-text-bottom":{"vertical-align":`text-bottom`},"overflow-auto":{overflow:`auto`},"overflow-x-auto":{"overflow-x":`auto`},"overflow-y-auto":{"overflow-y":`auto`},"overflow-hidden":{overflow:`hidden`},"overflow-x-hidden":{"overflow-x":`hidden`},"overflow-y-hidden":{"overflow-y":`hidden`},"overflow-visible":{overflow:`visible`},"overscroll-auto":{"overscroll-behavior":`auto`},"overscroll-contain":{"overscroll-behavior":`contain`},"overscroll-none":{"overscroll-behavior":`none`},"overscroll-x-auto":{"overscroll-behavior-x":`auto`},"overscroll-x-contain":{"overscroll-behavior-x":`contain`},"overscroll-x-none":{"overscroll-behavior-x":`none`},"overscroll-y-auto":{"overscroll-behavior-y":`auto`},"overscroll-y-contain":{"overscroll-behavior-y":`contain`},"overscroll-y-none":{"overscroll-behavior-y":`none`},"z-auto":{"z-index":`auto`},"cursor-pointer":{cursor:`pointer`},"cursor-wait":{cursor:`wait`},"cursor-not-allowed":{cursor:`not-allowed`},"select-none":{"user-select":`none`},"select-all":{"user-select":`all`},"pointer-events-auto":{"pointer-events":`auto`},"pointer-events-none":{"pointer-events":`none`},"box-border":{"box-sizing":`border-box`},"box-content":{"box-sizing":`content-box`},resize:{resize:`both`},"resize-x":{resize:`horizontal`},"resize-y":{resize:`vertical`},"resize-none":{resize:`none`},"appearance-none":{appearance:`none`,"-webkit-appearance":`none`,"-moz-appearance":`none`},border:{border:`1px solid`},"border-none":{border:`none`},"border-solid":{"border-style":`solid`},"border-dashed":{"border-style":`dashed`},"border-dotted":{"border-style":`dotted`},"border-collapse":{"border-collapse":`collapse`},"rounded-none":{"border-radius":`0`},rounded:{"border-radius":`.25rem`},"rounded-sm":{"border-radius":`.125rem`},"rounded-md":{"border-radius":`.375rem`},"rounded-lg":{"border-radius":`.5rem`},"rounded-xl":{"border-radius":`.75rem`},"rounded-full":{"border-radius":`9999px`},"shadow-2xs":{"box-shadow":`0 1px rgb(0 0 0 / 0.05)`},"shadow-xs":{"box-shadow":`0 1px 2px 0 rgb(0 0 0 / 0.05)`},shadow:{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-sm":{"box-shadow":`0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)`},"shadow-md":{"box-shadow":`0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)`},"shadow-lg":{"box-shadow":`0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)`},"shadow-xl":{"box-shadow":`0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)`},"shadow-2xl":{"box-shadow":`0 25px 50px -12px rgb(0 0 0 / 0.25)`},"shadow-inner":{"box-shadow":`inset 0 2px 4px 0 rgb(0 0 0 / 0.05)`},"shadow-none":{"box-shadow":`0 0 #0000`},ring:{"box-shadow":`var(--ring-inset, ) 0 0 0 3px rgb(59 130 246 / 0.5)`},"ring-0":{"box-shadow":`var(--ring-inset, ) 0 0 0 0px rgb(59 130 246 / 0.5)`},"ring-1":{"box-shadow":`var(--ring-inset, ) 0 0 0 1px rgb(59 130 246 / 0.5)`},"ring-2":{"box-shadow":`var(--ring-inset, ) 0 0 0 2px rgb(59 130 246 / 0.5)`},"ring-4":{"box-shadow":`var(--ring-inset, ) 0 0 0 4px rgb(59 130 246 / 0.5)`},"ring-8":{"box-shadow":`var(--ring-inset, ) 0 0 0 8px rgb(59 130 246 / 0.5)`},"ring-inset":{"--ring-inset":`inset`},outline:{"outline-style":`solid`},"outline-none":{outline:`2px solid transparent`,"outline-offset":`2px`},"outline-dashed":{"outline-style":`dashed`},"outline-dotted":{"outline-style":`dotted`},"outline-double":{"outline-style":`double`},"outline-0":{"outline-width":`0px`},"outline-1":{"outline-width":`1px`},"outline-2":{"outline-width":`2px`},"outline-4":{"outline-width":`4px`},"outline-8":{"outline-width":`8px`},"outline-offset-0":{"outline-offset":`0px`},"outline-offset-1":{"outline-offset":`1px`},"outline-offset-2":{"outline-offset":`2px`},"outline-offset-4":{"outline-offset":`4px`},"outline-offset-8":{"outline-offset":`8px`},"aspect-auto":{"aspect-ratio":`auto`},"aspect-square":{"aspect-ratio":`1 / 1`},"aspect-video":{"aspect-ratio":`16 / 9`},"backdrop-blur-none":{"backdrop-filter":`blur(0)`},"backdrop-blur-sm":{"backdrop-filter":`blur(4px)`},"backdrop-blur":{"backdrop-filter":`blur(8px)`},"backdrop-blur-md":{"backdrop-filter":`blur(12px)`},"backdrop-blur-lg":{"backdrop-filter":`blur(16px)`},"backdrop-blur-xl":{"backdrop-filter":`blur(24px)`},"backdrop-blur-2xl":{"backdrop-filter":`blur(40px)`},"backdrop-blur-3xl":{"backdrop-filter":`blur(64px)`},"transition-none":{transition:`none`},transition:{"transition-property":`all`,...v},"transition-all":{"transition-property":`all`,...v},"transition-opacity":{"transition-property":`opacity`,...v},"transition-transform":{"transition-property":`transform`,...v},"transition-shadow":{"transition-property":`box-shadow`,...v},"transition-colors":{"transition-property":`color, background-color, border-color, text-decoration-color, fill, stroke`,...v},"animate-none":{animation:`none`},"animate-spin":{animation:`spin 1s linear infinite`},"animate-ping":{animation:`ping 1s cubic-bezier(0, 0, 0.2, 1) infinite`},"animate-pulse":{animation:`pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite`},"bg-auto":{"background-size":`auto`},"bg-cover":{"background-size":`cover`},"bg-contain":{"background-size":`contain`},"bg-center":{"background-position":`center`},"bg-top":{"background-position":`top`},"bg-bottom":{"background-position":`bottom`},"bg-left":{"background-position":`left`},"bg-right":{"background-position":`right`},"bg-left-top":{"background-position":`left top`},"bg-left-bottom":{"background-position":`left bottom`},"bg-right-top":{"background-position":`right top`},"bg-right-bottom":{"background-position":`right bottom`},"bg-no-repeat":{"background-repeat":`no-repeat`},"bg-fixed":{"background-attachment":`fixed`},"bg-local":{"background-attachment":`local`},"bg-scroll":{"background-attachment":`scroll`},"min-h-screen":{"min-height":`100vh`},"max-h-screen":{"max-height":`100vh`},"min-w-screen":{"min-width":`100vw`},"h-dvh":{height:`100dvh`},"h-svh":{height:`100svh`},"h-lvh":{height:`100lvh`},"w-dvw":{width:`100dvw`},"w-svw":{width:`100svw`},"w-lvw":{width:`100lvw`},"min-h-dvh":{"min-height":`100dvh`},"min-h-svh":{"min-height":`100svh`},"min-h-lvh":{"min-height":`100lvh`},"flex-none":{flex:`none`},"flex-auto":{flex:`1 1 auto`},"flex-initial":{flex:`0 1 auto`},grow:{"flex-grow":`1`},"grow-0":{"flex-grow":`0`},shrink:{"flex-shrink":`1`},"shrink-0":{"flex-shrink":`0`},"self-auto":{"align-self":`auto`},"self-start":{"align-self":`flex-start`},"self-end":{"align-self":`flex-end`},"self-center":{"align-self":`center`},"self-stretch":{"align-self":`stretch`},"self-baseline":{"align-self":`baseline`},"content-normal":{"align-content":`normal`},"content-start":{"align-content":`flex-start`},"content-end":{"align-content":`flex-end`},"content-center":{"align-content":`center`},"content-between":{"align-content":`space-between`},"content-around":{"align-content":`space-around`},"content-evenly":{"align-content":`space-evenly`},"content-stretch":{"align-content":`stretch`},"items-baseline":{"align-items":`baseline`},"inset-0":{inset:`0`},"inset-auto":{inset:`auto`},"inset-x-0":{left:`0`,right:`0`},"inset-y-0":{top:`0`,bottom:`0`},"inset-x-auto":{left:`auto`,right:`auto`},"inset-y-auto":{top:`auto`,bottom:`auto`},"sr-only":{position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,"white-space":`nowrap`,"border-width":`0`},"not-sr-only":{position:`static`,width:`auto`,height:`auto`,padding:`0`,margin:`0`,overflow:`visible`,clip:`auto`,"white-space":`normal`}},ne=[`@keyframes spin {
2
- from { transform: rotate(0deg) }
3
- to { transform: rotate(360deg) }
4
- }`,`@keyframes ping {
5
- 75%, 100% {
6
- transform: scale(2);
7
- opacity: 0;
8
- }
9
- }`,`@keyframes pulse {
10
- 0%, 100% { opacity: 1 }
11
- 50% { opacity: .5 }
12
- }`],y={red:{50:`#ffebee`,100:`#ffcdd2`,200:`#ef9a9a`,300:`#e57373`,400:`#ef5350`,500:`#f44336`,600:`#e53935`,700:`#d32f2f`,800:`#c62828`,900:`#b71c1c`},pink:{50:`#fce4ec`,100:`#f8bbd0`,200:`#f48fb1`,300:`#f06292`,400:`#ec407a`,500:`#e91e63`,600:`#d81b60`,700:`#c2185b`,800:`#ad1457`,900:`#880e4f`},purple:{50:`#f3e5f5`,100:`#e1bee7`,200:`#ce93d8`,300:`#ba68c8`,400:`#ab47bc`,500:`#9c27b0`,600:`#8e24aa`,700:`#7b1fa2`,800:`#6a1b9a`,900:`#4a148c`},"deep-purple":{50:`#ede7f6`,100:`#d1c4e9`,200:`#b39ddb`,300:`#9575cd`,400:`#7e57c2`,500:`#673ab7`,600:`#5e35b1`,700:`#512da8`,800:`#4527a0`,900:`#311b92`},indigo:{50:`#e8eaf6`,100:`#c5cae9`,200:`#9fa8da`,300:`#7986cb`,400:`#5c6bc0`,500:`#3f51b5`,600:`#3949ab`,700:`#303f9f`,800:`#283593`,900:`#1a237e`},blue:{50:`#e3f2fd`,100:`#bbdefb`,200:`#90caf9`,300:`#64b5f6`,400:`#42a5f5`,500:`#2196f3`,600:`#1e88e5`,700:`#1976d2`,800:`#1565c0`,900:`#0d47a1`},"light-blue":{50:`#e1f5fe`,100:`#b3e5fc`,200:`#81d4fa`,300:`#4fc3f7`,400:`#29b6f6`,500:`#03a9f4`,600:`#039be5`,700:`#0288d1`,800:`#0277bd`,900:`#01579b`},cyan:{50:`#e0f7fa`,100:`#b2ebf2`,200:`#80deea`,300:`#4dd0e1`,400:`#26c6da`,500:`#00bcd4`,600:`#00acc1`,700:`#0097a7`,800:`#00838f`,900:`#006064`},teal:{50:`#e0f2f1`,100:`#b2dfdb`,200:`#80cbc4`,300:`#4db6ac`,400:`#26a69a`,500:`#009688`,600:`#00897b`,700:`#00796b`,800:`#00695c`,900:`#004d40`},green:{50:`#e8f5e9`,100:`#c8e6c9`,200:`#a5d6a7`,300:`#81c784`,400:`#66bb6a`,500:`#4caf50`,600:`#43a047`,700:`#388e3c`,800:`#2e7d32`,900:`#1b5e20`},"light-green":{50:`#f1f8e9`,100:`#dcedc8`,200:`#c5e1a5`,300:`#aed581`,400:`#9ccc65`,500:`#8bc34a`,600:`#7cb342`,700:`#689f38`,800:`#558b2f`,900:`#33691e`},lime:{50:`#f9fbe7`,100:`#f0f4c3`,200:`#e6ee9c`,300:`#dce775`,400:`#d4e157`,500:`#cddc39`,600:`#c0ca33`,700:`#afb42b`,800:`#9e9d24`,900:`#827717`},yellow:{50:`#fffde7`,100:`#fff9c4`,200:`#fff59d`,300:`#fff176`,400:`#ffee58`,500:`#ffeb3b`,600:`#fdd835`,700:`#fbc02d`,800:`#f9a825`,900:`#f57f17`},amber:{50:`#fff8e1`,100:`#ffecb3`,200:`#ffe082`,300:`#ffd54f`,400:`#ffca28`,500:`#ffc107`,600:`#ffb300`,700:`#ffa000`,800:`#ff8f00`,900:`#ff6f00`},orange:{50:`#fff3e0`,100:`#ffe0b2`,200:`#ffcc80`,300:`#ffb74d`,400:`#ffa726`,500:`#ff9800`,600:`#fb8c00`,700:`#f57c00`,800:`#ef6c00`,900:`#e65100`},"deep-orange":{50:`#fbe9e7`,100:`#ffccbc`,200:`#ffab91`,300:`#ff8a65`,400:`#ff7043`,500:`#ff5722`,600:`#f4511e`,700:`#e64a19`,800:`#d84315`,900:`#bf360c`},brown:{50:`#efebe9`,100:`#d7ccc8`,200:`#bcaaa4`,300:`#a1887f`,400:`#8d6e63`,500:`#795548`,600:`#6d4c41`,700:`#5d4037`,800:`#4e342e`,900:`#3e2723`},gray:{50:`#fafafa`,100:`#f5f5f5`,200:`#eeeeee`,300:`#e0e0e0`,400:`#bdbdbd`,500:`#9e9e9e`,600:`#757575`,700:`#616161`,800:`#424242`,900:`#212121`},"blue-gray":{50:`#eceff1`,100:`#cfd8dc`,200:`#b0bec5`,300:`#90a4ae`,400:`#78909c`,500:`#607d8b`,600:`#546e7a`,700:`#455a64`,800:`#37474f`,900:`#263238`}};function b(e){return e.map(([e,t])=>`.${e} { ${t} }`)}function x(e){return b(Object.entries(e).flatMap(([e,t])=>[[`${t}-0`,`${e}: 0`],[`${t}-screen`,`${e}: 100v${e.includes(`height`)?`h`:`w`}`],[`${t}-full`,`${e}: 100%`],...f.map(n=>[`${t}-${n}`,`${e}: ${n*c}rem`]),...f.map(n=>[`-${t}-${n}`,`${e}: -${n*c}rem`]),...f.map(n=>[`${t}-${n}px`,`${e}: ${n}px`]),...f.map(n=>[`-${t}-${n}px`,`${e}: -${n}px`]),...p.map(n=>[`${t}-${n}\\%`,`${e}: ${n}%`]),...p.map(n=>[`-${t}-${n}\\%`,`${e}: -${n}%`]),...s.map(([n,r])=>[`${t}-${n}`,`${e}: ${r}px`])]))}function re(e){return b(Object.entries(e).flatMap(([e,t])=>[[`${t}-auto`,`${e}: auto`],[`${t}x-auto`,`${e}-left: auto; ${e}-right: auto;`],[`${t}y-auto`,`${e}-top: auto; ${e}-bottom: auto;`],[`${t}x-0`,`${e}-left: 0; ${e}-right: 0;`],[`${t}y-0`,`${e}-top: 0; ${e}-bottom: 0;`],...f.map(n=>[`${t}x-${n}`,`${e}-left: ${n*c}rem; ${e}-right: ${n*c}rem;`]),...f.map(n=>[`${t}y-${n}`,`${e}-top: ${n*c}rem; ${e}-bottom: ${n*c}rem;`]),...f.map(n=>[`${t}x-${n}px`,`${e}-left: ${n}px; ${e}-right: ${n}px;`]),...f.map(n=>[`${t}y-${n}px`,`${e}-top: ${n}px; ${e}-bottom: ${n}px;`]),...p.map(n=>[`${t}x-${n}\\%`,`${e}-left: ${n}%; ${e}-right: ${n}%;`]),...p.map(n=>[`${t}y-${n}\\%`,`${e}-top: ${n}%; ${e}-bottom: ${n}%;`])]))}function ie(e){return b(Object.entries(e).flatMap(([e,t])=>[[`${t}t-0`,`${e}-top: 0`],[`${t}b-0`,`${e}-bottom: 0`],[`${t}l-0`,`${e}-left: 0`],[`${t}r-0`,`${e}-right: 0`],[`${t}t-auto`,`${e}-top: auto`],[`${t}b-auto`,`${e}-bottom: auto`],[`${t}l-auto`,`${e}-left: auto`],[`${t}r-auto`,`${e}-right: auto`],...[``,`-`].flatMap(n=>[...f.map(r=>[`${n}${t}t-${r}`,`${e}-top: ${n}${r*c}rem`]),...f.map(r=>[`${n}${t}b-${r}`,`${e}-bottom: ${n}${r*c}rem`]),...f.map(r=>[`${n}${t}l-${r}`,`${e}-left: ${n}${r*c}rem`]),...f.map(r=>[`${n}${t}r-${r}`,`${e}-right: ${n}${r*c}rem`]),...f.map(r=>[`${n}${t}t-${r}px`,`${e}-top: ${n}${r}px`]),...f.map(r=>[`${n}${t}b-${r}px`,`${e}-bottom: ${n}${r}px`]),...f.map(r=>[`${n}${t}l-${r}px`,`${e}-left: ${n}${r}px`]),...f.map(r=>[`${n}${t}r-${r}px`,`${e}-right: ${n}${r}px`]),...p.map(r=>[`${n}${t}t-${r}\\%`,`${e}-top: ${n}${r}%`]),...p.map(r=>[`${n}${t}b-${r}\\%`,`${e}-bottom: ${n}${r}%`]),...p.map(r=>[`${n}${t}l-${r}\\%`,`${e}-left: ${n}${r}%`]),...p.map(r=>[`${n}${t}r-${r}\\%`,`${e}-right: ${n}${r}%`])])]))}function ae(){return b([[`border`,`border-width: 1px`],[`border-x`,`border-inline-width: 1px`],[`border-y`,`border-block-width: 1px`],...[0,...l].map(e=>[`border-${e}`,`border-width: ${e}px`]),...[0,...l].map(e=>[`border-x-${e}`,`border-inline-width: ${e}px;`]),...[0,...l].map(e=>[`border-y-${e}`,`border-block-width: ${e}px;`]),...[`top`,`bottom`,`left`,`right`].flatMap(e=>[[`border-${e.slice(0,1)}`,`border-${e}-width: 1px`],...[0,...l].map(t=>[`border-${e.slice(0,1)}-${t}`,`border-${e}-width: ${t}px`])])])}function oe(){return b(p.map(e=>[`z-${e}`,`z-index: ${e}`]))}function se(){return b(m.map(e=>[`duration-${e}`,`--transition-duration: ${e}ms; transition-duration: ${e}ms`]))}function ce(){return b([[`space-x-0 > *`,`margin-left: 0`],[`space-y-0 > *`,`margin-top: 0`],...f.map(e=>[`space-x-${e} > :not(:first-child)`,`margin-left: ${e*c}rem`]),...f.map(e=>[`space-y-${e} > :not(:first-child)`,`margin-top: ${e*c}rem`]),...f.map(e=>[`space-x-${e}px > :not(:first-child)`,`margin-left: ${e}px`]),...f.map(e=>[`space-y-${e}px > :not(:first-child)`,`margin-top: ${e}px`]),[`gap-0`,`gap: 0`],...f.map(e=>[`gap-${e}`,`gap: ${e*c}rem`]),...f.map(e=>[`gap-${e}px`,`gap: ${e}px`]),...f.map(e=>[`gap-x-${e}`,`column-gap: ${e*c}rem`]),...f.map(e=>[`gap-y-${e}`,`row-gap: ${e*c}rem`]),...f.map(e=>[`gap-x-${e}px`,`column-gap: ${e}px`]),...f.map(e=>[`gap-y-${e}px`,`row-gap: ${e}px`]),[`divide-x > :not(:last-child)`,`border-inline-end-width: 1px`],[`divide-y > :not(:last-child)`,`border-bottom-width: 1px`],[`divide-x-0 > :not(:last-child)`,`border-inline-end-width: 0px`],[`divide-y-0 > :not(:last-child)`,`border-bottom-width: 0px`],...[2,4,8].map(e=>[`divide-x-${e} > :not(:last-child)`,`border-inline-end-width: ${e}px`]),...[2,4,8].map(e=>[`divide-y-${e} > :not(:last-child)`,`border-bottom-width: ${e}px`]),[`divide-solid > :not(:last-child)`,`border-style: solid`],[`divide-dashed > :not(:last-child)`,`border-style: dashed`],[`divide-dotted > :not(:last-child)`,`border-style: dotted`],[`divide-none > :not(:last-child)`,`border-style: none`]])}function le(){return b([...Array.from({length:100},(e,t)=>[`text-${t}px`,`font-size: ${t}px`]),...Array.from({length:100},(e,t)=>[`text-${t*c}rem`,`font-size: ${t*c}rem`])])}function ue(){return b([`column`,`row`].flatMap(e=>{let t=e.slice(0,3);return[...Array.from({length:12},(e,t)=>t+1).map(n=>[`grid-${t}s-${n}`,`grid-template-${e}s: repeat(${n}, minmax(0, 1fr))`]),[`grid-${t}s-none`,`grid-template-${e}s: none`],...Array.from({length:12},(e,t)=>t+1).map(n=>[`${t}-span-${n}`,`grid-${e}: span ${n} / span ${n}`]),[`${t}-span-full`,`grid-${e}: 1 / -1`],...Array.from({length:13},(e,t)=>t+1).map(n=>[`${t}-start-${n}`,`grid-${e}-start: ${n}`]),[`${t}-start-auto`,`grid-${e}-start: auto`],...Array.from({length:13},(e,t)=>t+1).map(n=>[`${t}-end-${n}`,`grid-${e}-end: ${n}`]),[`${t}-end-auto`,`grid-${e}-end: auto`]]}))}function de(){return Object.entries(te).map(([e,t])=>`.${e} { ${Object.entries(t).map(([e,t])=>`${e}: ${t}`).join(`; `)} }`)}function fe(e){let t=0,n=0,r=0;return e.length===4?(t=parseInt(e[1]+e[1],16),n=parseInt(e[2]+e[2],16),r=parseInt(e[3]+e[3],16)):e.length===7&&(t=parseInt(e.slice(1,3),16),n=parseInt(e.slice(3,5),16),r=parseInt(e.slice(5,7),16)),`${t} ${n} ${r}`}function pe(){let e=(e,t)=>[[`text-${e}`,`color: ${t}`],[`fill-${e}`,`fill: ${t}`],[`bg-${e}`,`background-color: ${t}`],[`border-${e}`,`border-color: ${t}`],[`divide-${e} > :not(:last-child)`,`border-color: ${t}`]];return b([...e(`white`,`#fff`),...e(`black`,`#000`),...e(`transparent`,`transparent`),...Object.entries(y).flatMap(([t,n])=>[...e(t,n[500]),...Object.entries(n).flatMap(([n,r])=>e(`${t}-${n}`,r))])])}function me(){return b([[`opacity-0`,`opacity: 0`],...p.map(e=>[`opacity-${e}`,`opacity: ${e/100}`])])}let S=null;function he(){return S===null&&(S=[...ne,...de(),...pe(),...me(),...oe(),...se(),...x(_),...x(g),...re(g),...x(h),...re(h),...ie(h),...ce(),...x(ee),...ae(),...le(),...ue()].join(`
13
- `)),S}const ge={text:`color`,bg:`background-color`,border:`border-color`,fill:`fill`,divide:`border-color`},_e=/^(text|bg|border|fill|divide)-([\w-]+)\/(\d+)$/,ve={w:`width`,h:`height`,"min-w":`min-width`,"min-h":`min-height`,"max-w":`max-width`,"max-h":`max-height`,m:`margin`,mt:`margin-top`,mr:`margin-right`,mb:`margin-bottom`,ml:`margin-left`,mx:`margin-inline`,my:`margin-block`,p:`padding`,pt:`padding-top`,pr:`padding-right`,pb:`padding-bottom`,pl:`padding-left`,px:`padding-inline`,py:`padding-block`,top:`top`,right:`right`,bottom:`bottom`,left:`left`,gap:`gap`,"gap-x":`column-gap`,"gap-y":`row-gap`,text:`font-size`,z:`z-index`,bg:`background-color`,border:`border-color`},ye=/^(-?)([\w-]+)-\[(.+)\]$/,be=/^(hover|focus|disabled|sm|md|lg|xl|dark|landscape|portrait):(.+)$/,xe=[`hover`,`focus`,`disabled`],Se=[`landscape`,`portrait`],C=new Set;let w=null;function Ce(e){if(typeof document>`u`)return null;let t=`.${e}`;for(let e of document.styleSheets)try{for(let n of e.cssRules)if(n instanceof CSSStyleRule&&n.selectorText===t)return n.style.cssText}catch{}return null}function we(){return typeof document<`u`&&typeof CSSStyleSheet<`u`&&typeof document.createElement==`function`}function Te(e){return e.replace(/[[\]#.:>+~()'"/]/g,`\\$&`)}function Ee(){if(!we())return null;if(w&&!w.ownerNode?.isConnected&&(w=null),w)return w;let e=document.createElement(`style`);return e.setAttribute(`data-mancha`,`custom`),document.head.appendChild(e),e.sheet?(w=e.sheet,w):null}function De(e){let t=e.match(ye);if(!t)return null;let[,n,r,i]=t,a=ve[r];if(!a)return null;let o=i.replace(/_/g,` `);return{property:a,value:n?`-${o}`:o}}function Oe(e){let t=e.match(_e);if(!t)return null;let[,n,r,i]=t,a=ge[n];if(!a)return null;let o=Number.parseInt(i,10);if(o<0||o>100)return null;let s=null;if(r===`white`)s=`#fff`;else if(r===`black`)s=`#000`;else{let e=r.lastIndexOf(`-`);if(e>0){let t=r.substring(0,e),n=Number.parseInt(r.substring(e+1),10);s=y[t]?.[n]??null}s||=y[r]?.[500]??null}return s?{property:a,value:`rgb(${fe(s)} / ${o/100})`}:null}function ke(e,t){let n=t?`${t.name}:${e}`:e;if(C.has(n))return!0;let r=Ee();if(!r)return!1;let i=Te(n),a=De(e)??Oe(e),s=a?`${a.property}: ${a.value};`:Ce(e);if(!s)return!1;let c=e.startsWith(`divide-`)?` > :not(:last-child)`:``,l;l=t?t.type===`pseudo`?`.${i}${c}:${t.name} { ${s} }`:t.name===`dark`?`@media (prefers-color-scheme: dark) { .${i}${c} { ${s} } }`:Se.includes(t.name)?`@media (orientation: ${t.name}) { .${i}${c} { ${s} } }`:`@media (min-width: ${o[t.name]}px) { .${i}${c} { ${s} } }`:`.${i}${c} { ${s} }`;try{return r.insertRule(l,r.cssRules.length),C.add(n),!0}catch(e){return console.warn(`Failed to inject CSS rule: ${l}`,e),!1}}function T(e){return e.includes(`[`)||e.includes(`:`)||e.includes(`/`)}function E(e){if(!(!e||!T(e)))for(let t of e.trim().split(/\s+/)){let e=t.match(be);if(e){let[,t,n]=e,r=xe.includes(t),i=t in o,a=t===`dark`,s=Se.includes(t);if(r||i||a||s){ke(n,{type:r?`pseudo`:`media`,name:t});continue}}T(t)&&ke(t)}}function Ae(e=document){if(!we())return;if(e instanceof Element){let t=e.getAttribute(`class`);t&&E(t)}let t=e.querySelectorAll(`[class]`);for(let e of t){let t=e.getAttribute(`class`);t&&E(t)}}function je(){return we()&&document.querySelector(`style[data-mancha="utils"]`)!==null}function Me(e){if(!je())return;let t=e;typeof t.querySelectorAll==`function`&&Ae(t)}function Ne(e){!e||!T(e)||je()&&E(e)}function Pe(){C.clear(),w?.ownerNode&&w.ownerNode.remove(),w=null}function D(e){let t=e.childNodes;for(let e=0;e<t.length;e++){let n=t[e];n.prev=e>0?t[e-1]:null,n.next=e<t.length-1?t[e+1]:null}}const Fe=[i`:`,i`style`,i`class`];function*O(e,t=new Set){let n=new Set,r=Array.from(e.childNodes).filter(e=>!t.has(e));for(yield e;r.length;){let e=r.shift();n.has(e)||(n.add(e),yield e),e.childNodes&&Array.from(e.childNodes).filter(e=>!t.has(e)).forEach(e=>{r.push(e)})}}function k(e,t){return e?.[t]!==void 0}function A(e,t){return typeof e?.[t]==`function`}function j(e){return e.replace(/-./g,e=>e[1].toUpperCase())}function M(e,t){return e.attribs?e.attribs[t]??null:e.getAttribute?.(t)??null}function Ie(e,t){return e.attribs?t in e.attribs:e.hasAttribute?.(t)??!1}function N(e,t,n=``){return M(e,n+t)||M(e,`data-${t}`)||(e.dataset?.[j(t)]??null)}function P(e,t,n){e.attribs?e.attribs[t]=n:e.setAttribute?.(t,n)}function F(e,t,r){e.attribs?e.attribs[t]=r:n.setPrefixedAttribute(Fe,e,t,r)}function I(e,t,n){switch(t){case`disabled`:e.disabled=n;return;case`selected`:e.selected=n;return;case`checked`:e.checked=n;return;default:e[t]=n}}function L(e,t){e.attribs?delete e.attribs[t]:e.removeAttribute?.(t)}function Le(e,t,n,r=``){Ie(e,`${r}${t}`)?P(e,`${r}${t}`,n):Ie(e,`data-${t}`)?P(e,`data-${t}`,n):P(e,`${r}${t}`,n)}function R(e,t,n=``){L(e,`${n}${t}`),L(e,`data-${t}`)}function Re(e,t,n){if(e.attribs&&t.attribs)t.attribs[n]=e.attribs[n];else if(n.startsWith(`data-`)){let r=j(n.slice(5));t.dataset&&e.dataset&&(t.dataset[r]=e.dataset[r])}else{let r=e?.getAttribute?.(n);F(t,n,r||``)}}function ze(e){return k(e,`firstElementChild`)?e.firstElementChild:Array.from(e.children).find(e=>e.nodeType===1)}function z(e,...t){if(A(e,`replaceWith`)){e.replaceWith(...t);return}else{let n=e,r=n.parentNode;if(!r)return;let i=Array.from(r.childNodes).indexOf(n);n.parentNode=null,t.forEach(e=>{e.parentNode=r}),r.childNodes=[].concat(Array.from(r.childNodes).slice(0,i),t,Array.from(r.childNodes).slice(i+1)),D(r)}}function Be(e,...t){A(e,`replaceChildren`)?e.replaceChildren(...t):(e.childNodes=t,t.forEach(t=>{t.parentNode=e}),D(e))}function B(e,t){return A(t,`appendChild`)?e.appendChild(t):(e.childNodes.push(t),t.parentNode=e,D(e),t)}function V(e,t){return A(t,`removeChild`)?e.removeChild(t):(Be(e,...Array.from(e.childNodes).filter(e=>e!==t)),t)}function H(e,t,n){return n?A(e,`insertBefore`)?e.insertBefore(t,n):(t.parentNode&&V(t.parentNode,t),z(n,t,n),t):B(e,t)}function U(e,t=0){return e?e.length<=t?e:`${e.slice(0,t-1)}…`:``}function W(e,t=0){return globalThis.DocumentFragment&&e instanceof DocumentFragment?Array.from(e.childNodes).map(e=>W(e,t)).join(``):U(e.outerHTML||e.nodeValue||String(e),t)}function G(e){return e.includes(`/`)?e.split(`/`).slice(0,-1).join(`/`):``}function Ve(e){return!e.includes(`://`)&&!e.startsWith(`/`)&&!e.startsWith(`#`)&&!e.startsWith(`data:`)}var He=class e{iterable;constructor(e){this.iterable=e}filter(t){return new e(e.filterGenerator(t,this.iterable))}map(t){return new e(e.mapGenerator(t,this.iterable))}find(e){for(let t of this.iterable)if(e(t))return t}array(){return Array.from(this.iterable)}*generator(){for(let e of this.iterable)yield e}static*filterGenerator(e,t){for(let n of t)e(n)&&(yield n)}static*mapGenerator(e,t){for(let n of t)yield e(n)}static equals(e,t){let n=e[Symbol.iterator](),r=t[Symbol.iterator](),i=n.next(),a=r.next();for(;!i.done&&!a.done;){if(i.value!==a.value)return!1;i=n.next(),a=r.next()}return i.done===a.done}};let K;(function(n){n.resolveIncludes=async function(e,t){let n=e,r=n.tagName?.toLowerCase();if(![`include`,`link`].includes(r)||r===`link`&&M(n,`rel`)!==`subresource`)return;this.log(`include directive found in:
14
- `,W(e,128)),this.log(`include params:`,t);let i=n.tagName.toLocaleLowerCase()===`link`?`href`:`src`,a=M(n,i);if(!a)throw Error(`"${i}" attribute missing from ${W(e,128)}.`);let o=[];r===`include`&&o.push(`src`),r===`link`&&o.push(`rel`,`href`);let s=t=>{let r=ze(t);for(let e of Array.from(n.attributes))r&&!o.includes(e.name)&&Re(n,r,e.name);z(e,...t.childNodes)},c={...t,rootDocument:!1,maxdepth:(t?.maxdepth??100)-1};if(c.maxdepth===0)throw Error(`Maximum recursion depth reached.`);if(a.includes(`://`)||a.startsWith(`//`))this.log(`Including remote file from absolute path:`,a),await this.preprocessRemote(a,c).then(s);else if(t?.dirpath?.includes(`://`)||t?.dirpath?.startsWith(`//`)){let e=a.startsWith(`/`)?a:`${t.dirpath}/${a}`;this.log(`Including remote file from relative path:`,e),await this.preprocessRemote(e,c).then(s)}else if(a.charAt(0)===`/`)this.log(`Including local file from absolute path:`,a),await this.preprocessLocal(a,c).then(s);else{let e=t?.dirpath&&t?.dirpath!==`.`?`${t?.dirpath}/${a}`:a;this.log(`Including local file from relative path:`,e),await this.preprocessLocal(e,c).then(s)}},n.rebaseRelativePaths=function(n,r){let i=n,a=i.tagName?.toLowerCase();if(!r?.dirpath)return;let o=M(i,`src`),s=M(i,`href`),c=N(i,`render`,`:`),l=o||s||c;if(!l||!Ve(l))return;let u=`${r.dirpath}/${l}`;this.log(`Rebasing relative path as:`,u),c?Le(i,`render`,u,`:`):k(i,`attribs`)?F(i,o?`src`:`href`,u):a===`img`?i.src=u:a===`a`?e.setHref(i,u):a===`source`||a===`audio`||a===`video`||a===`track`||a===`input`?i.src=u:a===`area`?t.setHref(i,u):this.log(`Unable to rebase relative path for element:`,a)},n.registerCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=(M(n,`is`)||M(n,`alt`))?.toLowerCase();if([`template`,`div`].includes(r)&&i){if(r===`div`&&M(n,`role`)!==`template`)return;if(!this._customElements.has(i)){this.log(`Registering custom element: ${i}\n`,W(n,128));let e=n.content||n,r=Array.from(O(e));for(let e=1;e<r.length;e++)K.rebaseRelativePaths.call(this,r[e],t);this._customElements.set(i,n),n?.parentNode&&V(n.parentNode,n)}}},n.resolveCustomElements=function(e,t){let n=e,r=n.tagName?.toLowerCase(),i=r;if(i===`div`&&(i=M(n,`role`)?.toLowerCase()||i),i&&this._customElements.has(i)){this.log(`Processing custom element: ${i}\n`,W(n,128));let t=this._customElements.get(i),a=(t.content||t).cloneNode(!0),o=ze(a);if(o)for(let e of Array.from(n.attributes))(r!==`div`||e.name!==`role`)&&Re(n,o,e.name);let s=new He(O(a)).find(e=>e.tagName?.toLowerCase()===`slot`);s&&z(s,...n.childNodes),z(e,...a.childNodes)}},n.resolveTextNodeExpressions=function(e,t){let n=e.nodeValue||``;if(e.nodeType!==3||!n?.trim())return;this.log(`Processing node content value:
15
- `,U(n,128));let r=new RegExp(/{{ ([^}]+) }}/gm),i=Array.from(n.matchAll(r)).map(e=>e[1]);return this.effect(function(){let t=n;for(let n of i){let r=this.eval(n,{$elem:e});t=t.replace(`{{ ${n} }}`,r==null?``:String(r))}e.nodeValue=t},{directive:`text`,element:e.parentElement??void 0,expression:i.join(`, `)})},n.resolveDataAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`data`,`:`);if(r){this.log(`:data attribute found in:
16
- `,W(e,128)),R(n,`data`,`:`);let i;k(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for node:`,W(e,64))):(i=this.subrenderer(),I(e,`renderer`,i),this.log(`Created and attached new subrenderer for node:`,W(e,64)));let a=i.eval(r,{$elem:e});if(await Promise.all(Object.entries(a).map(([e,t])=>e.startsWith(`$$`)?(i._store.get(`$rootRenderer`)||i).set(e,t):i.set(e,t,!0))),i===this)return;for(let t of O(e,this._skipNodes))this._skipNodes.add(t);await i.mount(e,t)}},n.resolveClassAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`class`,`:`);if(r){this.log(`:class attribute found in:
17
- `,W(e,128)),R(n,`class`,`:`);let t=M(n,`class`)||``;return this.effect(function(){let i=this.eval(r,{$elem:e}),a=(i?`${t} ${i}`:t).trim();F(n,`class`,a),Ne(a)},{directive:`class`,element:n,expression:r})}},n.resolveTextAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`text`,`:`);if(r){this.log(`:text attribute found in:
18
- `,W(e,128)),R(n,`text`,`:`);let t=t=>this.textContent(e,t);return this.effect(function(){let n=this.eval(r,{$elem:e});t(n==null?``:String(n))},{directive:`:text`,element:n,expression:r})}},n.resolveHtmlAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`html`,`:`);if(r){this.log(`:html attribute found in:
19
- `,W(e,128)),R(n,`html`,`:`);let i=null;return this.effect(function(){let a=this.eval(r,{$elem:e});return new Promise(e=>{(async()=>{i&&=(i.dispose(),null);let r=this.subrenderer();i=r;let o=await r.preprocessString(a,t);await r.renderNode(o),Be(n,o),r._store.set(`$rootNode`,n),e()})()})},{directive:`:html`,element:n,expression:r})}},n.resolveEventAttributes=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[]))if(t.name.startsWith(`:on:`)||t.name.startsWith(`data-on-`)){let r=``,i=[];if(t.name.startsWith(`:on:`)?[r,...i]=t.name.substring(4).split(`.`):t.name.startsWith(`data-on-`)&&([r,...i]=t.name.substring(8).split(`.`)),!r)throw Error(`Invalid event attribute: ${t.name}`);this.log(t.name,`attribute found in:
20
- `,W(e,128)),R(n,t.name);let a=r===`submit`&&n.tagName.toUpperCase()===`FORM`;e.addEventListener?.(r,n=>((i.includes(`prevent`)||a)&&n.preventDefault(),this.eval(t.value,{$elem:e,$event:n})))}},n.resolveForAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`for`,`:`)?.trim();if(r){this.log(`:for attribute found in:
21
- `,W(e,128)),R(n,`for`,`:`);let i=N(n,`key`,`:`);i&&R(n,`key`,`:`);for(let t of O(e,this._skipNodes))this._skipNodes.add(t);let a=e.parentNode;if(!a)return;this.cloakElement(n);let o=this.createElement(`template`,e.ownerDocument);H(a,o,e),V(a,e),`content`in o?B(o.content,e):B(o,e),this.log(`:for template:
22
- `,W(o,128));let s=r.split(` in `,2);if(s.length!==2)throw Error(`Invalid :for format: \`${r}\`. Expected "{key} in {expression}".`);let c=i?N(n,`data`,`:`):null,l=new Map,u=[],d=[],[f,p]=s;await this.effect(function(){let n=this.eval(p,{$elem:e});if(this.log(`:for list items:`,n),!Array.isArray(n)){console.error(`Expression did not yield a list: \`${p}\` => \`${n}\``);return}if(i){let r=new Set,s=new Map,u=[],d=o.nextSibling;for(let o=0;o<n.length;o++){let p=n[o],m=this.eval(i,{[f]:p,$index:o});r.has(m)&&console.warn(`:for duplicate key detected: ${m}. Using last item.`),r.add(m);let h,g,_=l.get(m);if(_){if(h=_.node,g=_.subrenderer,u.push(g.set(f,p,!0)),u.push(g.set(`$index`,o,!0)),c&&k(h,`renderer`)){let e=h.renderer,t=e.eval(c,{$elem:h});u.push(...Object.entries(t).map(([t,n])=>e.set(t,n,!0)))}h===d||h.nextSibling===d||H(a,h,d)}else{g=this.subrenderer(),g.set(f,p,!0),g.set(`$index`,o,!0);let n=e.cloneNode(!0);this.cloakElement(n),H(a,n,d),this._skipNodes.add(n),u.push(g.mount(n,t).then(()=>{this.uncloakElement(n)})),h=n,this.log(`Rendered list child:
23
- `,W(n,128))}s.set(m,{node:h,subrenderer:g}),d=h.nextSibling}for(let[e,{node:t,subrenderer:n}]of l)r.has(e)||(n.dispose(),t.parentNode&&V(t.parentNode,t),this._skipNodes.delete(t));l.clear();for(let[e,t]of s)l.set(e,t);return Promise.all(u).then(()=>{})}else{d.splice(0,d.length).forEach(e=>{e.dispose()}),u.splice(0,u.length).forEach(e=>{e.parentNode&&V(e.parentNode,e),this._skipNodes.delete(e)});let r=o.nextSibling,i=[];for(let o=0;o<n.length;o++){let s=n[o],c=this.subrenderer();c.set(f,s,!0),c.set(`$index`,o,!0);let l=e.cloneNode(!0);this.cloakElement(l),H(a,l,r),u.push(l),d.push(c),this._skipNodes.add(l),i.push(c.mount(l,t).then(()=>{this.uncloakElement(l)})),this.log(`Rendered list child:
24
- `,W(l,128))}return Promise.all(i).then(()=>{})}},{directive:`:for`,element:n,expression:r})}},n.resolveBindAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`bind`,`:`);if(r){this.log(`:bind attribute found in:
25
- `,W(e,128));let t=M(n,`:bind:on`)?.split(`,`)||n.dataset?.bindOn?.split(`,`)||[`change`,`input`];R(n,`bind`,`:`),L(n,`:bind:on`),L(n,`data-bind-on`);let i=M(n,`type`)===`checkbox`?`checked`:`value`;!r.includes(`.`)&&!this.has(r)&&this.set(r,``);let a=this;this.effect(function(){let t=this.eval(r,{$elem:e});i===`checked`?n.checked=!!t:(n.value=t,n.value!==t&&t!=null&&a._pendingValueRetries.push(()=>{n.value=t}))},{directive:`:bind`,element:n,expression:r});let o=`${r} = $elem.${i}`;for(let n of t)e.addEventListener(n,()=>this.eval(o,{$elem:e}))}},n.resolveIfAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`if`,`:`);if(r){this.log(`:if attribute found in:
26
- `,W(e,128)),R(n,`if`,`:`);let t=this.createComment(` :if placeholder `,e.ownerDocument);this.effect(function(){this.eval(r,{$elem:e})?!n.parentNode&&t.parentNode&&z(t,n):n.parentNode&&z(n,t)},{directive:`:if`,element:n,expression:r})}},n.resolveShowAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`show`,`:`);if(r){this.log(`:show attribute found in:
27
- `,W(e,128)),R(n,`show`,`:`);let t=n.style?.display===`none`?``:n.style?.display??M(n,`style`)?.split(`;`)?.find(e=>e.split(`:`)[0]===`display`)?.split(`:`)?.at(1)?.trim();this.effect(function(){let i=this.eval(r,{$elem:e});n.style?n.style.display=i?t:`none`:F(n,`style`,`display: ${i?t:`none`};`)},{directive:`:show`,element:n,expression:r})}},n.resolveCustomAttribute=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:attr:`,i=`data-attr-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`attribute found in:
28
- `,W(e,128)),L(n,t.name);let a=(t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``;this.effect(function(){P(n,a,this.eval(t.value,{$elem:e}))},{directive:`:attr:${a}`,element:n,expression:t.value})}}},n.resolveCustomProperty=function(e,t){if(this._skipNodes.has(e))return;let n=e;for(let t of Array.from(n.attributes||[])){let r=`:prop:`,i=`data-prop-`;if(t.name.startsWith(r)||t.name.startsWith(i)){this.log(t.name,`property found in:
29
- `,W(e,128)),L(n,t.name);let a=j((t.name.split(r,2).at(-1)||``).split(i,2).at(-1)??``);this.effect(function(){I(n,a,this.eval(t.value,{$elem:e}))},{directive:`:prop:${a}`,element:n,expression:t.value})}}},n.stripTypes=(e,t)=>{let n=e;M(n,`:types`)&&L(n,`:types`),M(n,`data-types`)&&L(n,`data-types`)},n.resolveRenderAttribute=async function(e,t){if(this._skipNodes.has(e))return;let n=e,r=N(n,`render`,`:`);if(!r)return;this.log(`:render attribute found: ${r}`),R(n,`render`,`:`);let i;k(e,`renderer`)?(i=e.renderer,this.log(`Reusing existing subrenderer for :render:`,W(e,64))):(i=this.subrenderer(),I(n,`renderer`,i)),await i.mount(e,t);for(let t of O(e,this._skipNodes))this._skipNodes.add(t);try{let e=await import(r);typeof e.default==`function`?await e.default(n,i):e.default!==void 0&&console.warn(`Module ${r} default export is not a function`)}catch(e){console.error(`Failed to execute render init from ${r}:`,e)}}})(K||={});function q(){return new URL(globalThis.window?.location?.href||`http://localhost/`)}function Ue(e){return e.substring(2)}function We(e){return`\$\$${e}`}function Ge(e){return e.keys().filter(e=>e.startsWith(`$$`))}async function Ke(e,t){for(let[n,r]of t.searchParams.entries()){let t=We(n);e.get(t)!==r&&await e.set(t,r)}}function qe(e,t,n){let r=Ue(t),i=!1;if(!n)e.searchParams.has(r)&&(e.searchParams.delete(r),i=!0);else{let t=String(n);e.searchParams.get(r)!==t&&(e.searchParams.set(r,t),i=!0)}return i}function Je(e,t){let n=!1;for(let r of Ge(t))qe(e,r,t.get(r))&&(n=!0);n&&globalThis.window?.history?.replaceState({},``,e.toString())}function Ye(e){return async()=>{let t=q(),n=new Set;for(let[r,i]of t.searchParams.entries()){let t=We(r);n.add(t),e.get(t)!==i&&e.set(t,i)}let r=Ge(e);for(let t of r)n.has(t)||e.del(t)}}async function Xe(e){let t=q();await Ke(e,t),Je(t,e),e.addKeyHandler(/^\$\$/,(e,t)=>{let n=q();qe(n,e,t)&&globalThis.window?.history?.replaceState({},``,n.toString())}),globalThis.window?.addEventListener(`popstate`,Ye(e))}
30
- /*
31
- * @license
32
- * Portions Copyright (c) 2013, the Dart project authors.
33
- */
34
- const Ze=new Set([`this`,`typeof`]),Qe=new Set([`in`]),$e=new Set([`+`,`-`,`!`,`typeof`]),et=new Set([`=`,`+`,`-`,`*`,`/`,`%`,`^`,`==`,`!=`,`>`,`<`,`>=`,`<=`,`||`,`&&`,`??`,`&`,`===`,`!==`,`|`,`in`]),J={"!":0,":":0,",":0,")":0,"]":0,"}":0,"?":2,"??":3,"||":4,"&&":5,"|":6,"^":7,"&":8,"!=":9,"==":9,"!==":9,"===":9,">=":10,">":10,"<=":10,"<":10,in:10,"+":11,"-":11,"%":12,"/":12,"*":12,"(":13,"[":13,".":13,"?.":13,"{":13},tt={"+":(e,t)=>e+t,"-":(e,t)=>e-t,"*":(e,t)=>e*t,"/":(e,t)=>e/t,"%":(e,t)=>e%t,"==":(e,t)=>e==t,"!=":(e,t)=>e!=t,"===":(e,t)=>e===t,"!==":(e,t)=>e!==t,">":(e,t)=>e>t,">=":(e,t)=>e>=t,"<":(e,t)=>e<t,"<=":(e,t)=>e<=t,"||":(e,t)=>e||t,"&&":(e,t)=>e&&t,"??":(e,t)=>e??t,"|":(e,t)=>t(e),in:(e,t)=>e in t},nt={"+":e=>e,"-":e=>-e,"!":e=>!e,typeof:e=>typeof e};var rt=class{empty(){return{type:`Empty`,evaluate(e){return e},getIds(e){return e}}}literal(e){return{type:`Literal`,value:e,evaluate(e){return this.value},getIds(e){return e}}}id(e){return{type:`ID`,value:e,evaluate(e){return this.value===`this`?e:e?.[this.value]},getIds(e){return e.push(this.value),e}}}unary(e,t){let n=nt[e];return{type:`Unary`,operator:e,child:t,evaluate(e){return n(this.child.evaluate(e))},getIds(e){return this.child.getIds(e)}}}binary(e,t,n){let r=tt[t];return{type:`Binary`,operator:t,left:e,right:n,evaluate(e){if(this.operator===`=`){if(this.left.type!==`ID`&&this.left.type!==`Getter`&&this.left.type!==`Index`)throw Error(`Invalid assignment target: ${this.left}`);let t=this.right.evaluate(e),n,r;return this.left.type===`Getter`?(n=this.left.receiver.evaluate(e),r=this.left.name):this.left.type===`Index`?(n=this.left.receiver.evaluate(e),r=String(this.left.argument.evaluate(e))):this.left.type===`ID`&&(n=e,r=this.left.value),n===void 0?void 0:(n[r]=t,t)}return r(this.left.evaluate(e),this.right.evaluate(e))},getIds(e){return this.left.getIds(e),this.right.getIds(e),e}}}getter(e,t,n){return{type:`Getter`,receiver:e,name:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(!(this.optional&&t==null))return t?.[this.name]},getIds(e){return this.receiver.getIds(e),e}}}invoke(e,t,n,r){if(t!=null&&typeof t!=`string`)throw Error(`method not a string`);return{type:`Invoke`,receiver:e,method:t,arguments:n,optional:r,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.method?t:e?.this??e,r=this.method?t?.[this.method]:t,i=this.arguments??[],a=[];for(let t of i)if(t?.type===`SpreadElement`){let n=t.evaluate(e);n&&typeof n[Symbol.iterator]==`function`&&a.push(...n)}else a.push(t?.evaluate(e));return r?.apply?.(n,a)},getIds(e){return this.receiver.getIds(e),this.arguments?.forEach(t=>{t?.getIds(e)}),e}}}paren(e){return e}index(e,t,n){return{type:`Index`,receiver:e,argument:t,optional:n,evaluate(e){let t=this.receiver.evaluate(e);if(this.optional&&t==null)return;let n=this.argument.evaluate(e);return t?.[n]},getIds(e){return this.receiver.getIds(e),e}}}ternary(e,t,n){return{type:`Ternary`,condition:e,trueExpr:t,falseExpr:n,evaluate(e){return this.condition.evaluate(e)?this.trueExpr.evaluate(e):this.falseExpr.evaluate(e)},getIds(e){return this.condition.getIds(e),this.trueExpr.getIds(e),this.falseExpr.getIds(e),e}}}map(e){return{type:`Map`,properties:e,evaluate(t){let n={};if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?Object.assign(n,e.evaluate(t)):n[e.key]=e.value.evaluate(t);return n},getIds(t){if(e&&this.properties)for(let e of this.properties)e.type===`SpreadProperty`?e.expression.getIds(t):e.value.getIds(t);return t}}}property(e,t){return{type:`Property`,key:e,value:t,evaluate(e){return this.value.evaluate(e)},getIds(e){return this.value.getIds(e)}}}list(e){return{type:`List`,items:e,evaluate(e){if(!this.items)return[];let t=[];for(let n of this.items)if(n?.type===`SpreadElement`){let r=n.evaluate(e);r&&typeof r[Symbol.iterator]==`function`&&t.push(...r)}else t.push(n?.evaluate(e));return t},getIds(e){return this.items?.forEach(t=>{t?.getIds(e)}),e}}}arrowFunction(e,t){return{type:`ArrowFunction`,params:e,body:t,evaluate(e){let t=this.params,n=this.body;return function(...r){let i=Object.fromEntries(t.map((e,t)=>[e,r[t]])),a=this??e??{},o=new Proxy(a,{set(e,t,n){return Object.hasOwn(i,t)&&(i[t]=n),e[t]=n,n},get(e,t){return Object.hasOwn(i,t)?i[t]:e[t]}});return n.evaluate(o)}},getIds(e){return this.body.getIds(e).filter(e=>!this.params.includes(e))}}}spreadProperty(e){return{type:`SpreadProperty`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}spreadElement(e){return{type:`SpreadElement`,expression:e,evaluate(e){return this.expression.evaluate(e)},getIds(e){return this.expression.getIds(e)}}}};
35
- /*
36
- * @license
37
- * Portions Copyright (c) 2013, the Dart project authors.
38
- */
39
- const it=new Set([`==`,`!=`,`<=`,`>=`,`||`,`&&`,`??`,`?.`]),at=new Set([`===`,`!==`]);let Y=function(e){return e[e.STRING=1]=`STRING`,e[e.IDENTIFIER=2]=`IDENTIFIER`,e[e.DOT=3]=`DOT`,e[e.COMMA=4]=`COMMA`,e[e.COLON=5]=`COLON`,e[e.INTEGER=6]=`INTEGER`,e[e.DECIMAL=7]=`DECIMAL`,e[e.OPERATOR=8]=`OPERATOR`,e[e.GROUPER=9]=`GROUPER`,e[e.KEYWORD=10]=`KEYWORD`,e[e.ARROW=11]=`ARROW`,e[e.OPTIONAL_DOT=12]=`OPTIONAL_DOT`,e[e.SPREAD=13]=`SPREAD`,e}({});const X=(e,t,n=0)=>({kind:e,value:t,precedence:n}),ot=e=>e===9||e===10||e===13||e===32,st=e=>{if(e===95||e===36)return!0;let t=e&-33;return 65<=t&&t<=90},ct=e=>st(e)||Z(e),lt=e=>Ze.has(e),ut=e=>e===34||e===39,Z=e=>48<=e&&e<=57,dt=e=>e===43||e===45||e===42||e===47||e===33||e===38||e===37||e===60||e===61||e===62||e===63||e===94||e===124,ft=e=>e===40||e===41||e===91||e===93||e===123||e===125,pt=e=>e.replace(/\\(.)/g,(e,t)=>{switch(t){case`n`:return`
40
- `;case`r`:return`\r`;case`t`:return` `;case`b`:return`\b`;case`f`:return`\f`;default:return t}});var mt=class{_input;_index=-1;_tokenStart=0;_next;constructor(e){this._input=e,this._advance()}nextToken(){for(;ot(this._next??-1);)this._advance(!0);if(ut(this._next??-1))return this._tokenizeString();if(st(this._next??-1))return this._tokenizeIdentOrKeyword();if(Z(this._next??-1))return this._tokenizeNumber();if(this._next===46)return this._tokenizeDot();if(this._next===44)return this._tokenizeComma();if(this._next===58)return this._tokenizeColon();if(dt(this._next??-1))return this._tokenizeOperator();if(ft(this._next??-1))return this._tokenizeGrouper();if(this._advance(),this._next!==void 0)throw Error(`Expected end of input, got ${this._next}`)}_advance(e){this._index++,this._index<this._input.length?(this._next=this._input.charCodeAt(this._index),e===!0&&(this._tokenStart=this._index)):this._next=void 0}_getValue(e=0){let t=this._input.substring(this._tokenStart,this._index+e);return e===0&&this._clearValue(),t}_clearValue(){this._tokenStart=this._index}_tokenizeString(){let e=this._next;for(this._advance(!0);this._next!==e;){if(this._next===void 0||this._next===92&&(this._advance(),this._next===void 0))throw Error(`unterminated string`);this._advance()}let t=X(Y.STRING,pt(this._getValue()));return this._advance(),t}_tokenizeIdentOrKeyword(){do this._advance();while(ct(this._next??-1));let e=this._getValue();return X(lt(e)?Y.KEYWORD:Qe.has(e)?Y.OPERATOR:Y.IDENTIFIER,e,J[e]??0)}_tokenizeNumber(){do this._advance();while(Z(this._next??-1));return this._next===46?this._tokenizeDot():X(Y.INTEGER,this._getValue())}_tokenizeDot(){if(this._advance(),Z(this._next??-1))return this._tokenizeFraction();if(this._next===46){if(this._advance(),this._next===46)return this._advance(),this._clearValue(),X(Y.SPREAD,`...`);throw Error(`Unexpected token ..`)}return this._clearValue(),X(Y.DOT,`.`,13)}_tokenizeComma(){return this._advance(!0),X(Y.COMMA,`,`)}_tokenizeColon(){return this._advance(!0),X(Y.COLON,`:`)}_tokenizeFraction(){do this._advance();while(Z(this._next??-1));return X(Y.DECIMAL,this._getValue())}_tokenizeOperator(){this._advance();let e=this._getValue(2);if(at.has(e))this._advance(),this._advance();else{if(e=this._getValue(1),e===`=>`)return this._advance(),X(Y.ARROW,e);it.has(e)&&this._advance()}return e=this._getValue(),e===`?.`?X(Y.OPTIONAL_DOT,e,13):X(Y.OPERATOR,e,J[e])}_tokenizeGrouper(){let e=String.fromCharCode(this._next??0),t=X(Y.GROUPER,e,J[e]);return this._advance(!0),t}};const ht=(e,t)=>new gt(e,t).parse();var gt=class{_kind;_tokenizer;_ast;_token;_value;constructor(e,t){this._tokenizer=new mt(e),this._ast=t}parse(){this._advance();let e=this._parseExpression();if(this._token)throw Error(`Unexpected token: ${this._token.value}`);return e}_advance(e,t){if(!this._matches(e,t))throw Error(`Expected kind ${e} (${t}), was ${this._token?.kind} (${this._token?.value})`);let n=this._tokenizer.nextToken();this._token=n,this._kind=n?.kind,this._value=n?.value}_matches(e,t){return!(e&&this._kind!==e||t&&this._value!==t)}_parseExpression(){if(!this._token)return this._ast.empty();let e=this._parseUnary();return e===void 0?void 0:this._parsePrecedence(e,0)}_parsePrecedence(e,t){if(e===void 0)throw Error(`Expected left to be defined.`);for(;this._token;)if(this._matches(Y.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t)}else if(this._matches(Y.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t)}else if(this._matches(Y.DOT)||this._matches(Y.OPTIONAL_DOT)){let t=this._kind===Y.OPTIONAL_DOT;if(this._advance(),t&&this._matches(Y.GROUPER,`[`)){let t=this._parseIndex();e=this._ast.index(e,t,!0)}else if(t&&this._matches(Y.GROUPER,`(`)){let t=this._parseArguments();e=this._ast.invoke(e,void 0,t,!0)}else{let n=this._parseUnary();e=this._makeInvokeOrGetter(e,n,t)}}else if(this._matches(Y.KEYWORD))break;else if(this._matches(Y.OPERATOR)&&this._token.precedence>=t)e=this._value===`?`?this._parseTernary(e):this._parseBinary(e,this._token);else break;return e}_makeInvokeOrGetter(e,t,n){if(t===void 0)throw Error(`expected identifier`);if(t.type===`ID`)return this._ast.getter(e,t.value,n);if(t.type===`Invoke`&&t.receiver.type===`ID`){let r=t.receiver;return this._ast.invoke(e,r.value,t.arguments,n)}else throw Error(`expected identifier: ${t}`)}_parseBinary(e,t){if(!et.has(t.value))throw Error(`unknown operator: ${t.value}`);this._advance();let n=this._parseUnary();for(;(this._kind===Y.OPERATOR||this._kind===Y.DOT||this._kind===Y.GROUPER)&&this._token&&(this._token.precedence??0)>t.precedence;)n=this._parsePrecedence(n,this._token?.precedence??0);if(n===void 0)throw Error(`Expected expression after ${t.value}`);return this._ast.binary(e,t.value,n)}_parseUnary(){if(this._matches(Y.KEYWORD,`typeof`)){this._advance();let e=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(`typeof`,e)}if(this._matches(Y.OPERATOR)){let e=this._value;if(this._advance(),e===`+`||e===`-`){if(this._matches(Y.INTEGER))return this._parseInteger(e);if(this._matches(Y.DECIMAL))return this._parseDecimal(e)}if(!e||!$e.has(e))throw Error(`unexpected token: ${e}`);let t=this._parsePrecedence(this._parsePrimary(),13);return this._ast.unary(e,t)}return this._parsePrimary()}_parseTernary(e){this._advance(Y.OPERATOR,`?`);let t=this._parseExpression();this._advance(Y.COLON);let n=this._parseExpression();return this._ast.ternary(e,t,n)}_parsePrimary(){switch(this._kind){case Y.KEYWORD:{let e=this._value??``;if(e===`this`)return this._advance(),this._ast.id(e);throw Ze.has(e)?Error(`unexpected keyword: ${e}`):Error(`unrecognized keyword: ${e}`)}case Y.IDENTIFIER:return this._parseInvokeOrIdentifier();case Y.STRING:return this._parseString();case Y.INTEGER:return this._parseInteger();case Y.DECIMAL:return this._parseDecimal();case Y.GROUPER:return this._value===`(`?this._parseParenOrFunction():this._value===`{`?this._parseMap():this._value===`[`?this._parseList():void 0;case Y.COLON:throw Error(`unexpected token ":"`);default:return}}_parseList(){let e=[];do{if(this._advance(),this._matches(Y.GROUPER,`]`))break;if(this._matches(Y.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else e.push(this._parseExpression())}while(this._matches(Y.COMMA));return this._advance(Y.GROUPER,`]`),this._ast.list(e)}_parseMap(){let e=[];do{if(this._advance(),this._matches(Y.GROUPER,`}`))break;if(this._matches(Y.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadProperty(t))}else{let t=this._value??``;if((this._matches(Y.STRING)||this._matches(Y.IDENTIFIER))&&this._advance(),this._matches(Y.COLON)){this._advance(Y.COLON);let n=this._parseExpression();n&&e.push(this._ast.property(t,n))}else e.push(this._ast.property(t,this._ast.id(t)))}}while(this._matches(Y.COMMA));return this._advance(Y.GROUPER,`}`),this._ast.map(e)}_parseInvokeOrIdentifier(){let e=this._value;if(e===`true`)return this._advance(),this._ast.literal(!0);if(e===`false`)return this._advance(),this._ast.literal(!1);if(e===`null`)return this._advance(),this._ast.literal(null);if(e===`undefined`)return this._advance(),this._ast.literal(void 0);let t=this._parseIdentifier(),n=this._parseArguments();return n?this._ast.invoke(t,void 0,n):t}_parseIdentifier(){if(!this._matches(Y.IDENTIFIER))throw Error(`expected identifier: ${this._value}`);let e=this._value;return this._advance(),this._ast.id(e??``)}_parseArguments(){if(!this._matches(Y.GROUPER,`(`))return;let e=[];do{if(this._advance(),this._matches(Y.GROUPER,`)`))break;if(this._matches(Y.SPREAD)){this._advance();let t=this._parseExpression();t&&e.push(this._ast.spreadElement(t))}else{let t=this._parseExpression();e.push(t)}}while(this._matches(Y.COMMA));return this._advance(Y.GROUPER,`)`),e}_parseIndex(){this._advance();let e=this._parseExpression();return this._advance(Y.GROUPER,`]`),e}_parseParenOrFunction(){let e=this._parseArguments();if(this._matches(Y.ARROW)){this._advance();let t=this._parseExpression(),n=e?.map(e=>e.value)??[];return this._ast.arrowFunction(n,t)}else return this._ast.paren(e?.[0])}_parseString(){let e=this._ast.literal(this._value??``);return this._advance(),e}_parseInteger(e=``){let t=this._ast.literal(parseInt(`${e}${this._value}`,10));return this._advance(),t}_parseDecimal(e=``){let t=this._ast.literal(parseFloat(`${e}${this._value}`));return this._advance(),t}};const Q=Symbol(`__computed__`);function _t(e){return typeof e==`object`&&!!e&&Q in e&&e[Q]===!0}function vt(e,t){if(e===`raf`&&typeof globalThis.requestAnimationFrame==`function`){let e=globalThis.requestAnimationFrame(()=>t());return{cancel:()=>globalThis.cancelAnimationFrame?.(e)}}let n=setTimeout(t,e===`raf`?0:e);return{cancel:()=>clearTimeout(n)}}const yt=new rt,bt=`__is_proxy__`;function xt(e){return e instanceof wt||e[bt]===!0}function St(e,t){let n=e?._store;if(n?.has(t))return n.get(t);if(n?.has(`$parent`))return St(n.get(`$parent`),t)}function $(e,t){let n=e?._store;return n?.has(t)?e:n?.has(`$parent`)?$(n.get(`$parent`),t):null}function Ct(e,t,n){let r=$(e,t);r?r._store.set(t,n):e._store.set(t,n)}var wt=class e{evalkeys=[`$elem`,`$event`];expressionCache=new Map;observers=new Map;keyHandlers=new Map;_store=new Map;_lock=Promise.resolve();_notify=new Map;_policy=new Map;_dirty=new Set;_burstStart=new Map;_computedDepth=0;constructor(e){for(let[t,n]of Object.entries(e||{}))this.set(t,n)}wrapObject(e,t){if(e==null||xt(e)||Object.isFrozen(e)||Object.isSealed(e))return e;let n=Object.getPrototypeOf(e);return!(n===Object.prototype||n===null)&&!Array.isArray(e)?e:new Proxy(e,{deleteProperty:(e,n)=>typeof n==`string`&&n in e?(delete e[n],t(),!0):!1,set:(e,n,r,i)=>{if(Reflect.get(e,n,i)===r)return!0;typeof r==`object`&&r&&(r=this.wrapObject(r,t));let a=Reflect.set(e,n,r,i);return t(),a},get:(e,n,r)=>{if(n===bt)return!0;let i=Reflect.get(e,n,r);if(typeof i==`object`&&i&&!xt(i)){let a=this.wrapObject(i,t);if(a!==i)return Reflect.set(e,n,a,r),a}return i}})}watch(e,t){let n=$(this,e);if(!n)throw Error(`Cannot watch key "${e}" as it does not exist in the store.`);n.observers.has(e)||n.observers.set(e,new Set),Array.from(n.observers.get(e)||[]).some(e=>e.observer===t)||n.observers.get(e)?.add({observer:t,store:this})}addKeyHandler(e,t){this.keyHandlers.has(e)||this.keyHandlers.set(e,new Set),this.keyHandlers.get(e)?.add(t)}tagObserversForComputed(e,t){for(let n of this.observers.values())for(let r of n)r.observer===e&&r.store===this&&(r.computedKey=t);let n=this._store.get(`$parent`);for(;n;){for(let r of n.observers.values())for(let n of r)n.observer===e&&n.store===this&&(n.computedKey=t);n=n._store.get(`$parent`)}}markDependentComputedsDirty(e){let t=$(this,e)?.observers.get(e);if(t){for(let e of t)if(e.computedKey){let t=e.store._store.get(e.computedKey);_t(t)&&!t.dirty&&(t.dirty=!0,e.store.markDependentComputedsDirty(e.computedKey))}}}debounce(e,t){this._policy.set(e,t)}async notify(e,t){let n=$(this,e),r=Array.from(n?.observers.get(e)||[]),i=this._notify.get(e);if(i===`executing`){this._dirty.add(e);return}let a=t??this._policy.get(e)??10,o=a;if(a!==`raf`){let t=Date.now(),n=this._burstStart.get(e)??t;this._burstStart.set(e,n);let r=Math.max(a,16);o=Math.min(a,Math.max(0,r-(t-n)))}return i&&i.cancel(),new Promise(i=>{this._notify.set(e,vt(o,async()=>{this._burstStart.delete(e);try{this._notify.set(e,`executing`);let t=r.map(e=>e.observer.call(e.store.proxify(e.observer)));this._dirty.delete(e),await Promise.all(t)}finally{this._notify.delete(e),this._dirty.delete(e)&&this.notify(e,t)}let a=n?.observers.get(e);if(a)for(let e of r){let t=e.store._store.has(`$parent`),n=e.store._store.get(`$rootNode`);t&&n&&!n.isConnected&&!n.parentNode&&a.delete(e)}i()}))})}get(e,t){t&&this.watch(e,t);let n=St(this,e);if(_t(n)){if(n.dirty){this._computedDepth++;try{let t=this.proxify(n.effectFn);n.value=n.fn.call(t,t),n.dirty=!1,n.effectFn&&this.tagObserversForComputed(n.effectFn,e),this.markDependentComputedsDirty(e)}finally{this._computedDepth--}}return n.value}return n}setupComputed(e,t){let n=this,r={[Q]:!0,fn:t,dirty:!0};this._store.set(e,r);let i=function(){n._computedDepth++;try{let i=t.call(this,this);if(r.value!==i){r.value=i;let t=$(n,e),a=Array.from(t?.observers.get(e)||[]);for(let e of a)e.observer.call(e.store.proxify(e.observer))}r.dirty=!1}finally{n._computedDepth--}};r.effectFn=i,this.effect(i,{directive:`computed`,id:e}),this.tagObserversForComputed(i,e)}async set(e,t,n){if(_t(t)){this.setupComputed(e,t.fn);return}if(this._store.has(e)&&t===this._store.get(e))return;let r=()=>(this.markDependentComputedsDirty(e),this.notify(e));if(t&&typeof t==`object`&&(t=this.wrapObject(t,r)),n?this._store.set(e,t):Ct(this,e,t),!n){for(let[n,r]of this.keyHandlers.entries())if(n.test(e))for(let n of r)await Promise.resolve(n.call(this.$,e,t))}await r()}async del(e){await this.set(e,null),this._store.delete(e),this.observers.delete(e)}dispose(){for(let e of this.observers.values())e.clear();this.observers.clear();let e=this._store.get(`$parent`);for(;e;){for(let t of e.observers.values())for(let e of t)e.store===this&&t.delete(e);e=e._store.get(`$parent`)}}keys(){return Array.from(this._store.keys())}has(e){return this._store.has(e)}getObserverStats(){let e={},t=0;for(let[n,r]of this.observers)e[n]=r.size,t+=r.size;return{totalKeys:this.observers.size,totalObservers:t,byKey:e}}effect(e,t){return e.call(this.proxify(e))}$computed(e){return{[Q]:!0,fn:e,dirty:!0}}proxify(t){let n=Array.from(this._store.entries()).map(([e])=>e),r=Object.fromEntries(n.map(e=>[e,null])),i=(e,t,n)=>typeof e==`function`&&t!==`constructor`?(...t)=>e.call(n,...t):e;return new Proxy(r,{has:(e,t)=>typeof t==`string`&&($(this,t)||Reflect.has(this,t))?!0:Reflect.has(r,t),get:(n,r,a)=>{if(typeof r==`string`){if($(this,r)){let n=this.get(r,t);return t&&n instanceof e?n.proxify(t):i(n,r,a)}if(t&&r!==bt&&!Reflect.has(this,r))return this.set(r,void 0),this.get(r,t)}return r===`$`?this.proxify(t):i(Reflect.get(this,r,a),r,a)},set:(e,t,n,r)=>(typeof t!=`string`||t in this?Reflect.set(this,t,n,r):(this._computedDepth>0&&console.warn(`[mancha] Computed wrote to '${t}'. Computeds should be pure; use $effect for side effects.`),this.set(t,n)),!0)})}get $(){return this.proxify()}makeEvalFunction(e){return(t,n)=>{let r=ht(e,yt),i=new Proxy(n,{has(e,n){return n in e||n in t||n in globalThis},get(e,n){if(typeof n==`string`)return n in e?e[n]:n in t?t[n]:n in globalThis?globalThis[n]:t[n]},set(e,n,r){return typeof n==`string`?n in e?(e[n]=r,!0):(t[n]=r,!0):!1}});return r?.evaluate(i)}}cachedExpressionFunction(e){e=e.trim(),this.expressionCache.has(e)||this.expressionCache.set(e,this.makeEvalFunction(e));let t=this.expressionCache.get(e);if(!t)throw Error(`Failed to retrieve cached expression: ${e}`);return t}eval(e,t={}){let n=this.$;if(this._store.has(e))return n[e];{let r=this.cachedExpressionFunction(e);try{return r(n,t)}catch(t){return console.error(`Failed to evaluate expression: ${e}`),console.error(t),null}}}$resolve(e,t){let n={$pending:!0,$result:null,$error:null};return Promise.resolve().then(()=>e(t)).then(e=>{n.$result=e}).catch(e=>{n.$error=e instanceof Error?e:Error(String(e))}).finally(()=>{n.$pending=!1}),n}};const Tt=`data-m-cloak`,Et=`mancha-runtime-cloak`,Dt=a`[data-m-cloak]{display:none!important}`;var Ot=class e extends wt{_debugLevel=`off`;dirpath=``;_perfData={lifecycle:{},effects:new Map};static DEBUG_LEVELS=[`off`,`lifecycle`,`effects`,`verbose`];_skipNodes=new Set;_customElements=new Map;_pendingValueRetries=[];cloakElement(e){let t=e.ownerDocument??globalThis.document;if(t?.head&&!t.getElementById(Et)){let e=t.createElement(`style`);e.id=Et,r.setTextContent(e,Dt),t.head.appendChild(e)}P(e,Tt,``)}uncloakElement(e){L(e,Tt)}debug(e){return typeof e==`boolean`?this._debugLevel=e?`lifecycle`:`off`:this._debugLevel=e,this}get debugging(){return this._debugLevel!==`off`}shouldLog(t){return e.DEBUG_LEVELS.indexOf(this._debugLevel)>=e.DEBUG_LEVELS.indexOf(t)}clearPerformanceReport(){this._perfData={lifecycle:{},effects:new Map}}getNodePath(e){let t=[],n=e;for(;n?.tagName;){let e=n.tagName.toLowerCase(),r=n.parentElement;if(r){let i=Array.from(r.children).filter(t=>t.tagName.toLowerCase()===e);if(i.length>1){let r=i.indexOf(n)+1;t.unshift(`${e}:nth-child(${r})`)}else t.unshift(e)}else t.unshift(e);n=r}return t.join(`>`)}buildObserverId(e){let t=e?.directive??`unknown`,n=U(e?.expression??``,32),r=e?.element,i=e?.id??(r?r.dataset?.perfid??r.id??r.dataset?.testid??this.getNodePath(r):`unknown`);return n?`${t}:${i}:${n}`:`${t}:${i}`}recordObserverExecution(e,t){let n=this.buildObserverId(e),r=this._perfData.effects.get(n)??{count:0,totalTime:0};r.count++,r.totalTime+=t,this._perfData.effects.set(n,r)}getPerformanceReport(){let e=Array.from(this._perfData.effects.entries()),t={};for(let[n,r]of e){let e=n.split(`:`)[0];t[e]||(t[e]={count:0,totalTime:0}),t[e].count+=r.count,t[e].totalTime+=r.totalTime}let n=e.map(([e,t])=>({id:e,executionCount:t.count,totalTime:t.totalTime,avgTime:t.count>0?t.totalTime/t.count:0})).sort((e,t)=>t.totalTime-e.totalTime).slice(0,10);return{lifecycle:this._perfData.lifecycle,effects:{total:e.length,byDirective:t,slowest:n},observers:this.getObserverStats()}}effect(e,t){let n=this;function r(){if(!n.shouldLog(`lifecycle`))return e.call(this);let r=performance.now(),i=e.call(this),a=performance.now()-r;return t&&n.recordObserverExecution(t,a),a>16&&console.warn(`[mancha] Slow observer (${a.toFixed(1)}ms):`,n.buildObserverId(t)),n.shouldLog(`effects`)&&console.debug(`[mancha] Observer (${a.toFixed(2)}ms):`,n.buildObserverId(t)),i}return super.effect(r,t)}async fetchRemote(e,t){return fetch(e,{cache:t?.cache??`default`}).then(e=>e.text())}async fetchLocal(e,t){return this.fetchRemote(e,t)}async preprocessString(e,t){this.log(`Preprocessing string content with params:
41
- `,t);let n=this.parseHTML(e,t);return await this.preprocessNode(n,t),n}async preprocessRemote(e,t){let n={};t?.cache&&(n.cache=t.cache);let r=await fetch(e,n).then(e=>e.text());return this.preprocessString(r,{...t,dirpath:G(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}async preprocessLocal(e,t){let n=await this.fetchLocal(e,t);return this.preprocessString(n,{...t,dirpath:G(e),rootDocument:t?.rootDocument??!e.endsWith(`.tpl.html`)})}subrenderer(){let e=new this.constructor().debug(this.debugging);return e._store.set(`$parent`,this),e._store.set(`$rootRenderer`,this.get(`$rootRenderer`)??this),e._customElements=this._customElements,e}log(...e){this.shouldLog(`verbose`)&&console.debug(...e)}async preprocessNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;t={dirpath:this.dirpath,maxdepth:10,...t};let r=new He(O(e,this._skipNodes)).map(async e=>{this.log(`Preprocessing node:
42
- `,W(e,128)),await K.resolveIncludes.call(this,e,t),await K.rebaseRelativePaths.call(this,e,t),await K.registerCustomElements.call(this,e,t),await K.resolveCustomElements.call(this,e,t)});return await Promise.all(r.generator()),n&&(this._perfData.lifecycle.preprocessTime=(this._perfData.lifecycle.preprocessTime??0)+(performance.now()-n)),e}async renderNode(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;for(let n of O(e,this._skipNodes))this.log(`Rendering node:
43
- `,W(n,128)),await K.resolveForAttribute.call(this,n,t),await K.resolveRenderAttribute.call(this,n,t),await K.resolveDataAttribute.call(this,n,t),await K.resolveTextAttributes.call(this,n,t),await K.resolveHtmlAttribute.call(this,n,t),await K.resolveIfAttribute.call(this,n,t),await K.resolveShowAttribute.call(this,n,t),await K.resolveClassAttribute.call(this,n,t),await K.resolveBindAttribute.call(this,n,t),await K.resolveEventAttributes.call(this,n,t),await K.resolveTextNodeExpressions.call(this,n,t),await K.resolveCustomAttribute.call(this,n,t),await K.resolveCustomProperty.call(this,n,t),await K.stripTypes.call(this,n,t);for(let e of this._pendingValueRetries.splice(0))e();return n&&(this._perfData.lifecycle.renderTime=(this._perfData.lifecycle.renderTime??0)+(performance.now()-n)),e}async mount(e,t){let n=this.shouldLog(`lifecycle`)?performance.now():0;n&&this.clearPerformanceReport(),t={...t,rootNode:e},I(e,`renderer`,this),this._store.set(`$rootNode`,e),this.has(`$rootRenderer`)||this._store.set(`$rootRenderer`,this),this.get(`$rootRenderer`)===this&&await Xe(this),await this.preprocessNode(e,t),await this.renderNode(e,t),Me(e),n&&(this._perfData.lifecycle.mountTime=performance.now()-n)}};export{he as a,Ae as i,G as n,Pe as r,Ot as t};