tweakit 0.3.1 → 0.4.1

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 (35) hide show
  1. package/README.md +8 -8
  2. package/dist/tweaks/{bezier-Z5GKRM4D.js → bezier-KSA2VTVT.js} +1 -1
  3. package/dist/tweaks/chunk-HWQKSB7T.js +1 -0
  4. package/dist/tweaks/chunk-SIIHIBXV.js +1 -0
  5. package/dist/tweaks/chunk-WWCMYF2Q.js +1 -0
  6. package/dist/tweaks/colour-L2QYS74L.js +1 -0
  7. package/dist/tweaks/core.js +1 -1
  8. package/dist/tweaks/gradient-AHHDJIIU.js +1 -0
  9. package/dist/tweaks/heavy-ZZA3NS5O.js +1 -0
  10. package/dist/tweaks/{image-DBOIYZDB.js → image-ZSAP6BIK.js} +1 -1
  11. package/dist/tweaks/interval-4KQVZGAX.js +1 -0
  12. package/dist/tweaks/{monitor-NRXVKYAV.js → monitor-5CFBIGGT.js} +1 -1
  13. package/dist/tweaks/motion-5UMJIBOJ.js +1 -0
  14. package/dist/tweaks/plot-KQGIWQHO.js +2 -0
  15. package/dist/tweaks/{point-OSHHB6KE.js → point-4J4HHM2Z.js} +1 -1
  16. package/dist/tweaks/shadow-RAXIV6FG.js +1 -0
  17. package/dist/tweaks/sides-EI7BN5Q6.js +1 -0
  18. package/dist/tweaks/spring-JGHWZBNF.js +1 -0
  19. package/dist/tweaks/tabs-RM7NR6CO.js +1 -0
  20. package/dist/tweaks.css +1 -1
  21. package/dist/tweaks.js +3 -3
  22. package/dist/types/tweaks/core.d.ts +1 -0
  23. package/dist/types/tweaks/easing.d.ts +29 -0
  24. package/dist/types/tweaks/types.d.ts +147 -9
  25. package/package.json +1 -1
  26. package/dist/tweaks/chunk-36ETNTXF.js +0 -1
  27. package/dist/tweaks/chunk-AUZVP7BC.js +0 -1
  28. package/dist/tweaks/chunk-NGLZEK5U.js +0 -1
  29. package/dist/tweaks/colour-KNV4JMLD.js +0 -1
  30. package/dist/tweaks/gradient-7SU3OS46.js +0 -1
  31. package/dist/tweaks/heavy-GRI2MMP6.js +0 -1
  32. package/dist/tweaks/interval-2WMOCHYW.js +0 -1
  33. package/dist/tweaks/plot-YTKMVUH7.js +0 -2
  34. package/dist/tweaks/spring-NNNUQHGF.js +0 -1
  35. package/dist/tweaks/tabs-NWHJSEFB.js +0 -1
@@ -1,4 +1,5 @@
1
1
  export { tweaks } from "./panel.js";
2
2
  export { enhance } from "./enhance.js";
3
3
  export { mountControl, createColorPicker } from "./standalone.js";
4
+ export { gradientCss, gradientStops } from "./easing.js";
4
5
  export type * from "./types.js";
@@ -0,0 +1,29 @@
1
+ import type { GradientEasing, GradientValue } from "./types.js";
2
+ /** cubic-bezier control points [x1, y1, x2, y2]. */
3
+ type Bez = [number, number, number, number];
4
+ /** An easing's bezier control points, or null for linear. Anything unrecognised — an
5
+ * unknown keyword, a malformed or non-finite `cubic-bezier()` — is null too, so bad input
6
+ * degrades to today's straight blend rather than to broken CSS. x1/x2 clamp into [0,1] as
7
+ * CSS requires (it keeps the sampled positions monotonic); y may overshoot like CSS allows. */
8
+ export declare function parseEasing(e: unknown): Bez | null;
9
+ /** The name an easing is stored under: the string itself, trimmed and lowercased, when
10
+ * parseEasing knows it; "linear" for linear and for anything unrecognised. */
11
+ export declare const easingName: (e: unknown) => GradientEasing;
12
+ /** The curve at 16 even t: [x, y] pairs — x the position within the segment (0→1), y the
13
+ * blend progress, clamped to [0,1] since it becomes a color-mix percentage. */
14
+ export declare function easingSamples(b: Bez): Array<[number, number]>;
15
+ /** The blend progress at a position within a segment, read off the sampled ramp — linear
16
+ * between samples, exactly as the browser draws the generated stops — so a stop inserted
17
+ * at x takes the colour the ramp really shows there. Null (linear) is the identity. */
18
+ export declare function easingAt(b: Bez | null, x: number): number;
19
+ /** A gradient value's `<color-stop-list>` — `"red 0%, color-mix(…) 8.1%, …, blue 100%"` — with
20
+ * the value's easing expanded into sampled stops. Linear (or no) easing gives the plain
21
+ * list. For a `linear-gradient` use gradientCss; this is for templating a conic / radial
22
+ * gradient, or any other place a stop list goes. */
23
+ export declare function gradientStops(value: GradientValue): string;
24
+ /** The CSS for a gradient value: `linear-gradient(in <interpolation> <direction>, <stops>)`,
25
+ * easing expanded, blend space honoured — paste it straight into `background`. `direction`
26
+ * is an angle in degrees or any CSS direction (`"to right"`, the default, is what the
27
+ * editor's own preview draws). */
28
+ export declare function gradientCss(value: GradientValue, direction?: number | string): string;
29
+ export {};
@@ -2,6 +2,7 @@
2
2
  export type Option = string | {
3
3
  value: string;
4
4
  label?: string;
5
+ color?: string;
5
6
  };
6
7
  /** A colour stop in a gradient. */
7
8
  export type GradientStop = {
@@ -12,6 +13,93 @@ export type GradientStop = {
12
13
  * mode the stops were authored in. Template it as `linear-gradient(in <interpolation> …)`
13
14
  * so your CSS ramp matches the editor's preview exactly. */
14
15
  export type GradientInterpolation = "srgb" | "hsl" | "hwb" | "oklch" | "oklab" | "lch" | "lab" | "display-p3" | "rec2020";
16
+ /** What a sides control accepts: one number for all four; `[vertical, horizontal]`,
17
+ * `[top, horizontal, bottom]` or `[top, right, bottom, left]` (CSS order); a CSS shorthand
18
+ * string like `"8px 16px"` (the numbers are read in the control's unit); or any subset of
19
+ * the four as an object. With `corners: true` the four are the corners from top-left round,
20
+ * the same CSS order, under the same keys. */
21
+ export type SidesInput = number | number[] | string | {
22
+ top?: number;
23
+ right?: number;
24
+ bottom?: number;
25
+ left?: number;
26
+ };
27
+ /** A sides control's value: the four numbers in CSS order plus the shorthand they collapse
28
+ * to (`css`, in the control's unit, `0` bare), so `el.style.padding = css`. */
29
+ export interface SidesValue {
30
+ top: number;
31
+ right: number;
32
+ bottom: number;
33
+ left: number;
34
+ css: string;
35
+ }
36
+ /** What a shadow control accepts — any subset of its fields (px, `color` any colour the kit
37
+ * parses); or, as `value`, a `box-shadow` string: optional `inset`, two to four px lengths,
38
+ * one colour, one layer. */
39
+ export interface ShadowInput {
40
+ inset?: boolean;
41
+ x?: number;
42
+ y?: number;
43
+ blur?: number;
44
+ spread?: number;
45
+ color?: string;
46
+ }
47
+ /** A shadow control's value — the fields, plus the `box-shadow` CSS they resolve to (`css`),
48
+ * built from the numbers and the picker's own colour notation, so `el.style.boxShadow = css`. */
49
+ export interface ShadowValue {
50
+ inset: boolean;
51
+ x: number;
52
+ y: number;
53
+ blur: number;
54
+ spread: number;
55
+ color: string;
56
+ css: string;
57
+ }
58
+ /** What a motion control accepts — any subset of either mode's fields. A `curve` may be
59
+ * the four cubic-bezier numbers or a CSS keyword (`ease`, `ease-out`, …); `duration` is
60
+ * the easing's, in ms. Spring keys select the spring mode unless `mode` says otherwise. */
61
+ export interface MotionInput {
62
+ mode?: "easing" | "spring";
63
+ curve?: [number, number, number, number] | string;
64
+ duration?: number;
65
+ stiffness?: number;
66
+ damping?: number;
67
+ mass?: number;
68
+ visualDuration?: number;
69
+ bounce?: number;
70
+ }
71
+ /** A motion control's value: an easing curve with its duration, or a spring — each also
72
+ * carrying the CSS it resolves to, `duration` in ms and an `easing` string (`cubic-bezier(…)`,
73
+ * or a sampled `linear(…)` for the spring), so a host can write
74
+ * `transition: transform ${duration}ms ${easing}` in either mode. */
75
+ export type MotionValue = {
76
+ mode: "easing";
77
+ curve: [number, number, number, number];
78
+ duration: number;
79
+ easing: string;
80
+ } | {
81
+ mode: "spring";
82
+ stiffness: number;
83
+ damping: number;
84
+ mass: number;
85
+ visualDuration?: number;
86
+ bounce?: number;
87
+ duration: number;
88
+ easing: string;
89
+ };
90
+ /** How a gradient blends between neighbouring stops: `"linear"` (CSS's own straight blend,
91
+ * the default) or a CSS easing — `ease`, `ease-in`, `ease-out`, `ease-in-out`, or any
92
+ * `cubic-bezier(x1, y1, x2, y2)`. No browser eases a gradient natively, so `gradientCss()`
93
+ * samples the curve into stops; template through it rather than by hand. */
94
+ export type GradientEasing = "linear" | "ease" | "ease-in" | "ease-out" | "ease-in-out" | `cubic-bezier(${string})`;
95
+ /** A gradient control's value — the stops, the blend space, and the easing between stops.
96
+ * Hand it to `gradientCss(value, angle?)` for the CSS, or `gradientStops(value)` for just
97
+ * the stop list (a conic / radial gradient). */
98
+ export interface GradientValue {
99
+ stops: GradientStop[];
100
+ interpolation?: GradientInterpolation;
101
+ easing?: GradientEasing;
102
+ }
15
103
  /** Reader passed to a conditional `render` / `disabled` predicate — `get("siblingKey")`. */
16
104
  export type Get = (key: string) => unknown;
17
105
  /** Per-control extras that can ride on any object-form value. */
@@ -25,6 +113,10 @@ export interface ControlOptions {
25
113
  disabled?: boolean | ((get: Get) => boolean);
26
114
  /** A tooltip revealed by an ⓘ marker beside the label. */
27
115
  hint?: string;
116
+ /** `false` leaves this control out of what `opts.persist` saves, so it opens on its schema
117
+ * value every load (presets, undo and `toJSON()` still carry it). On a control, not a
118
+ * plain folder object, where `persist` is a child. */
119
+ persist?: boolean;
28
120
  }
29
121
  /** The verbose object forms a schema value can take: `{ type: "…", … }`. */
30
122
  export type SchemaObject = {
@@ -34,6 +126,14 @@ export type SchemaObject = {
34
126
  max?: number;
35
127
  step?: number;
36
128
  soft?: boolean;
129
+ unit?: string;
130
+ /** Draws the readout from the value ("7:30 AM" for minutes of the day), in place of its
131
+ * digits; `unit` still follows it. Display only, like `unit`: the param stays the number. */
132
+ format?: (value: number) => string;
133
+ /** Reads a typed readout back into a value, so the inline editor shows and takes the
134
+ * formatted text (without one, it edits the digits). Text it can't read (it throws, or
135
+ * returns anything but a finite number) leaves the value where it was. */
136
+ parse?: (text: string) => number;
37
137
  } | {
38
138
  type: "number";
39
139
  value?: number;
@@ -41,6 +141,7 @@ export type SchemaObject = {
41
141
  max?: number;
42
142
  step?: number;
43
143
  soft?: boolean;
144
+ unit?: string;
44
145
  } | {
45
146
  type: "checkbox";
46
147
  value?: boolean;
@@ -86,7 +187,25 @@ export type SchemaObject = {
86
187
  } | {
87
188
  type: "cubicbezier";
88
189
  value?: [number, number, number, number];
89
- } | {
190
+ } | ({
191
+ type: "shadow";
192
+ value?: ShadowInput | string;
193
+ } & ShadowInput) | {
194
+ type: "sides";
195
+ value?: SidesInput;
196
+ corners?: boolean;
197
+ unit?: string;
198
+ step?: number;
199
+ min?: number;
200
+ max?: number;
201
+ top?: number;
202
+ right?: number;
203
+ bottom?: number;
204
+ left?: number;
205
+ } | ({
206
+ type: "motion";
207
+ value?: MotionInput;
208
+ } & MotionInput) | {
90
209
  type: "point";
91
210
  components: Array<{
92
211
  key: string;
@@ -100,10 +219,7 @@ export type SchemaObject = {
100
219
  invertY?: boolean;
101
220
  } | {
102
221
  type: "gradient";
103
- value?: {
104
- stops: GradientStop[];
105
- interpolation?: GradientInterpolation;
106
- } | Array<GradientStop | [string, number]>;
222
+ value?: GradientValue | Array<GradientStop | [string, number]>;
107
223
  stops?: Array<GradientStop | [string, number]>;
108
224
  } | {
109
225
  type: "plot";
@@ -200,15 +316,27 @@ export interface Theme {
200
316
  /** Control corner radius and row height — a bare number is treated as px. */
201
317
  radius?: number | string;
202
318
  density?: number | string;
319
+ /** The panel's width (256px by default) — a bare number is treated as px. */
320
+ width?: number | string;
203
321
  /** Escape hatch — any raw token, e.g. `"--tw-accent": "#6c8cff"`. */
204
322
  [token: string]: string | number | undefined;
205
323
  }
324
+ /** Options for a programmatic write — `set()`, `setMany()`, `fromJSON()`. */
325
+ export interface SetOptions {
326
+ /** Apply without calling your `on()` listeners: for mirroring a value the host already
327
+ * acted on (another tab, its own state), so the change doesn't echo back. Conditional
328
+ * controls, persistence and undo still follow it: it's an undo step like any other. */
329
+ silent?: boolean;
330
+ }
206
331
  /** Panel options (third arg to `tweaks()`). */
207
332
  export interface TweaksOptions {
208
333
  /** Theme overrides (friendly names or raw `--tw-*`); `null` / omitted = default monochrome. */
209
334
  theme?: Theme | null;
210
335
  /** Persist values to localStorage + enable presets — a key, or `true` to key by name. */
211
336
  persist?: string | boolean;
337
+ /** With `persist`, `false` keeps saving values but leaves the Presets menu out of the
338
+ * toolbar (the presets API still works). On by default. */
339
+ presets?: boolean;
212
340
  /** Add a filter/search field to the toolbar. */
213
341
  filter?: boolean;
214
342
  /** Start the panel already floated (fixed-positioned): `true` → top-left, or an explicit `{x,y}`. */
@@ -248,7 +376,8 @@ export interface PanelState {
248
376
  ui?: {
249
377
  /** Folder collapse state → `true` when collapsed. Keys are the folder's path with each
250
378
  * segment JSON-pointer-escaped (`.`→`~0`, `~`→`~1`) then joined by `.` — injective, so a
251
- * literal dot in a key can't collide with the nesting separator. Treat keys as opaque. */
379
+ * literal dot in a key can't collide with the nesting separator. For plain keys that's
380
+ * the dotted path, so `fromJSON({ ui: { folders: { shadow: true } } })` starts one closed. */
252
381
  folders?: Record<string, boolean>;
253
382
  /** Active tab → the active page's key, under the tabs control's path (escaped as above). */
254
383
  tabs?: Record<string, string | null>;
@@ -267,12 +396,12 @@ export interface Panel {
267
396
  /** Set a control's value programmatically. Nested controls take a dotted path
268
397
  * ("folder.child", "tabs.page.child"); a bare key also reaches a nested control
269
398
  * when it's unambiguous. A key matching no control is stored on `params` as-is. */
270
- set(key: string, value: unknown): void;
399
+ set(key: string, value: unknown, options?: SetOptions): void;
271
400
  /** Set several controls at once — a flat map of keys (dotted for nested controls), e.g.
272
401
  * `setMany({ "shadow.radius": 28, blur: 48 })`. Resolves each key like `set()`, then fires
273
402
  * listeners + persists ONCE for the whole batch, where N separate `set()` calls would fire
274
403
  * N times. Unknown / ambiguous / reserved keys warn and are skipped. */
275
- setMany(values: Record<string, unknown>): void;
404
+ setMany(values: Record<string, unknown>, options?: SetOptions): void;
276
405
  /** Reset every control to its default (or run `opts.onReset`). */
277
406
  reset(): void;
278
407
  /** Serialize the whole panel — every control value plus UI state (collapsed folders,
@@ -280,15 +409,24 @@ export interface Panel {
280
409
  * it to your own storage: a file, a query string / share link, a server. `JSON.stringify`
281
410
  * on the panel calls this too. Most meaningful once `ready` (lazy controls have built). */
282
411
  toJSON(): PanelState;
412
+ /** The values that differ from their defaults, keyed by dotted path — `setMany()`'s shape
413
+ * (`{ "shadow.radius": 28, blur: 48 }`), the hand-off for baking tuned values into source.
414
+ * ⇧-click on the toolbar's copy button copies this instead of the full snapshot. Empty
415
+ * before `ready`. */
416
+ changes(): Record<string, unknown>;
283
417
  /** Restore a panel from a `toJSON()` object: values are applied where their path still
284
418
  * exists (missing ones skipped, like loading a preset), then folder/tab UI state. Fires
285
419
  * listeners once. Both halves are optional — pass `{ values }` to restore values only, or
286
420
  * `{ ui }` to restore chrome only. The value restore is undoable (one history step); the
287
421
  * UI restore is intentionally outside undo, so a Cmd-Z reverts values without thrashing
288
422
  * folders/tabs. */
289
- fromJSON(state: PanelState): void;
423
+ fromJSON(state: PanelState, options?: SetOptions): void;
290
424
  /** Re-theme the panel live; `null` reverts to the default. */
291
425
  setTheme(theme?: Theme | null): void;
426
+ /** Retitle the panel live — the header and the copy toast follow. The name it was built
427
+ * with stays its storage key (`persist: true`), so saved values and presets keep their
428
+ * home across a rename. */
429
+ setName(name: string): void;
292
430
  /** Save the current values as a named preset (needs `opts.persist`). */
293
431
  savePreset(name: string): boolean;
294
432
  /** Load a named preset. */
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tweakit",
3
- "version": "0.3.1",
3
+ "version": "0.4.1",
4
4
  "type": "module",
5
5
  "main": "./dist/tweaks.js",
6
6
  "types": "./dist/types/tweaks/core.d.ts",
@@ -1 +0,0 @@
1
- import{B as C,Q as S,S as I,b as w,d as L,e as M,f as N,o as m,p as F,q as E,w as T}from"./chunk-NGLZEK5U.js";var H="http://www.w3.org/2000/svg",A=(t,n)=>{let e=document.createElementNS(H,t);return n&&e.setAttribute("class",n),e},K=(t,n)=>getComputedStyle(t).getPropertyValue(n).trim(),R=t=>{let n=getComputedStyle(t),e=i=>n.getPropertyValue(i).trim();return e("--tw-accent")||e("--tw-text-primary")||"#fff"},V=t=>{let n=!1;t.addEventListener("pointerdown",e=>{n=e.button===0&&document.activeElement!==t}),t.addEventListener("focus",()=>t.select()),t.addEventListener("mouseup",e=>{n&&(n=!1,e.button===0&&document.activeElement===t&&t.selectionStart===0&&t.selectionEnd===t.value.length&&e.preventDefault())})};function P(t,{onDown:n,onMove:e,onEnd:i}={}){let r=null,l=s=>{r===null||s.pointerId!==r||(r=null,i&&i(s))};t.addEventListener("pointerdown",s=>{if(!(s.button!==0||r!==null)){r=s.pointerId;try{t.setPointerCapture(s.pointerId)}catch{}n&&n(s)}}),t.addEventListener("pointermove",s=>{if(s.pointerId===r){if(s.buttons===0)return l(s);e&&e(s)}}),t.addEventListener("pointerup",l),t.addEventListener("pointercancel",l),t.addEventListener("lostpointercapture",l)}var B=(t,n)=>P(t,{onDown:e=>{t.classList.add("is-grabbing"),n(e)},onMove:n,onEnd:()=>t.classList.remove("is-grabbing")}),O=(t,n)=>{let e=n.getBoundingClientRect();return[w((t.clientX-e.left)/e.width,0,1),w((t.clientY-e.top)/e.height,0,1)]},j=(t,n,e=1/0)=>{let i=t.getBoundingClientRect(),r=Math.min(window.devicePixelRatio||1,e);return t.width=i.width*r,t.height=i.height*r,n.setTransform(r,0,0,r,0,0),[i.width,i.height]},U=(t,n)=>{let e=m("div",t),i=F("tw-trigger");i.setAttribute("aria-expanded","false");let r=m("span","tw-trigger-right");return i.append(E("span","tw-trigger-label",n),r),e.append(i),{root:e,trigger:i,right:r}},$=S('<path d="M6 4v8M10 4v8"/>',"",1.5,16);function k(){let t=null,n=0,e=0,i=0;return{show(r,l,s,c){t=m("div","tw-grab-guide tw-portal"),t.innerHTML='<span class="tw-grab-line"></span><span class="tw-grab-dot"></span><span class="tw-grab-arrow"></span><span class="tw-grab-bubble"></span>',n=l,e=r,i=s??r,t.children[1].style.cssText=`left:${r}px;top:${n}px`,C(t,c),document.body.appendChild(t)},move(r,l){t&&(t.children[0].style.cssText=`left:${Math.min(e,r)}px;top:${n}px;width:${Math.abs(r-e)}px`,t.children[2].style.cssText=`left:${r}px;top:${n}px;transform:translate(-50%,-50%) scaleX(${r>=e?1:-1})`,t.children[3].style.cssText=`left:${i}px;top:${n-16}px`,t.children[3].textContent=l)},hide(){t&&(t.remove(),t=null)}}}function D(t,n,e,i,r,l){let s=0,c=0,b=1,g=k();P(t,{onDown:u=>{u.preventDefault(),s=u.clientX,c=i(),b=1,t.classList.add("is-dragging");let a=n.getBoundingClientRect();g.show(u.clientX,a.top+a.height/2,a.left+a.width/2,n),g.move(u.clientX,l())},onMove:u=>{let a=u.shiftKey?10:u.altKey?.1:1;a!==b&&(b=a,s=u.clientX,c=i()),r(c+(u.clientX-s)*e*a),g.move(u.clientX,l())},onEnd:()=>{t.classList.remove("is-dragging"),g.hide()}})}function G(t,n){let e=Number.isFinite(+t.step)&&+t.step>0?+t.step:1,i=o=>o==null?NaN:+o,r=i(t.min),l=i(t.max);if(Number.isFinite(r)&&Number.isFinite(l)&&l<r){let o=r;r=l,l=o}let s=Number.isFinite(r)?r:0,c=L(e),[b,g]=N(Number.isFinite(r)?r:-1/0,Number.isFinite(l)?l:1/0,e,s),u=o=>{let p=M(o,s,e);return t.soft?p:w(p,b,g)},a=u(Number.isFinite(+t.value)?+t.value:0),y=m("div",t.row?"tw-row":"tw-field"),h=m("div","tw-num-wrap"),v=m("span","tw-num-grab",$);v.setAttribute("aria-hidden","true"),v.title="Drag to adjust";let d=m("input","tw-num");d.type="text",d.inputMode="decimal",d.setAttribute("aria-label",t.label),d.value=a.toFixed(c),T(d),h.append(v,d),y.append(E("span",t.row?"tw-row-label":"tw-field-label",t.label),h);let f=(o,p=!0)=>{o=+o,Number.isFinite(o)&&(a=u(o),d.value=a.toFixed(c),p&&n&&n(a))};return d.addEventListener("change",()=>{let o=parseFloat(d.value);f(isNaN(o)?a:o)}),d.addEventListener("keydown",o=>{if(o.key==="Enter")return d.blur();let p=o.key==="ArrowUp"?1:o.key==="ArrowDown"?-1:0;if(!p)return;o.preventDefault();let x=parseFloat(d.value);f((isNaN(x)?a:x)+p*e*(o.shiftKey?10:1))}),D(v,h,e,()=>a,f,()=>d.value),{el:y,set:o=>f(o,!1),get:()=>a}}I("number",(t,n)=>G({...t,row:!0},n));export{A as a,K as b,R as c,V as d,P as e,B as f,O as g,j as h,U as i,G as j};
@@ -1 +0,0 @@
1
- import{d as lt,f as oe,g as se,i as it,j as ut}from"./chunk-36ETNTXF.js";import{D as ct,S as Le,b as m,i as ot,o as w,q as st,w as at}from"./chunk-NGLZEK5U.js";var sn=180/Math.PI,Re=Math.PI/180,L=(e,t)=>[e[0][0]*t[0]+e[0][1]*t[1]+e[0][2]*t[2],e[1][0]*t[0]+e[1][1]*t[1]+e[1][2]*t[2],e[2][0]*t[0]+e[2][1]*t[1]+e[2][2]*t[2]],an=(e,t)=>{let n=[[0,0,0],[0,0,0],[0,0,0]];for(let o=0;o<3;o++)for(let r=0;r<3;r++)n[o][r]=e[o][0]*t[0][r]+e[o][1]*t[1][r]+e[o][2]*t[2][r];return n},d=e=>Number.isFinite(e)?e:0,cn=(e,t,n)=>Math.min(n,Math.max(t,e)),ae=e=>{let t=Math.abs(e);return t<=.04045?e/12.92:Math.sign(e)*((t+.055)/1.055)**2.4},U=e=>{let t=Math.abs(e);return t<=.0031308?e*12.92:Math.sign(e)*(1.055*t**(1/2.4)-.055)},ie=1.09929682680944,kt=.018053968510807,ln=e=>{let t=Math.abs(e);return t<kt*4.5?e/4.5:Math.sign(e)*((t+ie-1)/ie)**(1/.45)},wt=e=>{let t=Math.abs(e);return t<kt?e*4.5:Math.sign(e)*(ie*t**.45-(ie-1))},Ct=1/512,un=e=>{let t=Math.abs(e);return t<=Ct*16?e/16:Math.sign(e)*t**1.8},hn=e=>{let t=Math.abs(e);return t>=Ct?Math.sign(e)*t**(1/1.8):16*e},Oe=[[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],ce=[[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],pn=[[.4865709486482162,.26566769316909306,.19821728523436247],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],vt=[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],bn=[[.6369580483012914,.14461690358620832,.16888097516417205],[.2627002120112671,.6779980715188708,.05930171646986196],[0,.028072693049087428,1.060985057710791]],yt=[[1.7166511879712674,-.35567078377639233,-.25336628137365974],[-.6666843518324892,1.6164812366349395,.01576854581391113],[.017639857445310783,-.042770613257808524,.9421031212354738]],mn=[[.7977604896723027,.13518583717574031,.0313493495815248],[.2880711282292934,.7118432178101014,8565396060525902e-20],[0,0,.8251046025104601]],gn=[[1.3457989731028281,-.25558010007997534,-.05110628506753401],[-.5446224939028347,1.5082327413132781,.02053603239147973],[0,0,1.2119675456389454]],$t=[[1.0479298208405488,.022946793341019088,-.05019222954313557],[.029627815688159344,.990434484573249,-.01707382502938514],[-.009243058152591178,.015055144896577895,.7518742899580008]],Et=[[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],dn=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],_t=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],fn=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],St=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],le=216/24389,q=24389/27,Z=[.3457/.3585,1,(1-.3457-.3585)/.3585],K=(e,t,n)=>L(n,[t(e[0]),t(e[1]),t(e[2])]),Y=(e,t,n)=>{let o=L(n,e);return[t(o[0]),t(o[1]),t(o[2])]},ht=e=>{let t=L(St,e);return L(_t,[t[0]**3,t[1]**3,t[2]**3])},pt=e=>{let t=L(dn,e);return L(fn,[Math.cbrt(t[0]),Math.cbrt(t[1]),Math.cbrt(t[2])])};function bt(e){let[t,n,o]=e,r=(t+16)/116,s=n/500+r,a=r-o/200,c=s**3>le?s**3:(116*s-16)/q,h=t>q*le?r**3:t/q,p=a**3>le?a**3:(116*a-16)/q;return L(Et,[c*Z[0],h*Z[1],p*Z[2]])}function mt(e){let t=L($t,e),n=a=>a>le?Math.cbrt(a):(q*a+16)/116,o=n(t[0]/Z[0]),r=n(t[1]/Z[1]),s=n(t[2]/Z[2]);return[116*r-16,500*(o-r),200*(r-s)]}var ue=e=>{let t=Math.hypot(e[1],e[2]),n=Math.atan2(e[2],e[1])*sn;return n<0&&(n+=360),[e[0],t,n]},he=e=>[e[0],e[1]*Math.cos(e[2]*Re),e[1]*Math.sin(e[2]*Re)];function Vt(e){let t=((Number.isNaN(e[0])?0:e[0])%360+360)%360,n=e[1]/100,o=e[2]/100,r=s=>{let a=(s+t/30)%12,c=n*Math.min(o,1-o);return o-c*Math.max(-1,Math.min(a-3,9-a,1))};return[r(0),r(8),r(4)]}function Lt(e){let t=Math.max(...e),n=Math.min(...e),o=t-n;if(o<1e-9)return NaN;let r;return t===e[0]?r=(e[1]-e[2])/o+(e[1]<e[2]?6:0):t===e[1]?r=(e[2]-e[0])/o+2:r=(e[0]-e[1])/o+4,r*60}function Mn(e){let t=Math.max(...e),n=Math.min(...e),o=(n+t)/2,r=Lt(e),s=t===n||o===0||o===1?0:(t-o)/Math.min(o,1-o);return s<0&&(r+=180,s=-s),r>=360&&(r-=360),[r,s*100,o*100]}function xn(e){let t=e[1]/100,n=e[2]/100;if(t+n>=1){let s=t/(t+n);return[s,s,s]}let o=Vt([e[0],100,50]),r=1-t-n;return[o[0]*r+t,o[1]*r+t,o[2]*r+t]}var kn=e=>[Lt(e),Math.min(...e)*100,(1-Math.max(...e))*100];function wn(e,t){switch(t){case"srgb":return K(e,ae,Oe);case"p3":return K(e,ae,pn);case"rec2020":return K(e,ln,bn);case"prophoto-rgb":return L(Et,K(e,un,mn));case"oklab":return ht(e);case"oklch":return ht(he(e));case"lab":return bt(e);case"lch":return bt(he(e));case"hsl":return K(Vt(e),ae,Oe);case"hwb":return K(xn(e),ae,Oe)}}function Cn(e,t){switch(t){case"srgb":return Y(e,U,ce);case"p3":return Y(e,U,vt);case"rec2020":return Y(e,wt,yt);case"prophoto-rgb":return Y(L($t,e),hn,gn);case"oklab":return pt(e);case"oklch":return ue(pt(e));case"lab":return mt(e);case"lch":return ue(mt(e));case"hsl":return Mn(Y(e,U,ce));case"hwb":return kn(Y(e,U,ce))}}function x(e,t,n){return t===n?[e[0],e[1],e[2]]:t==="oklch"&&n==="oklab"?he(e):t==="oklab"&&n==="oklch"?ue(e):t==="lch"&&n==="lab"?he(e):t==="lab"&&n==="lch"?ue(e):Cn(wn(e,t),n)}var pe=75e-6,Ot=e=>e.every(t=>t>=-pe&&t<=1+pe),Ae=(e,t)=>Ot(x(e,"oklch",t)),Te=e=>e.map(t=>Math.min(1,Math.max(0,t))),gt=(e,t)=>Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2]);function be(e,t){if(Ae(e,t))return x(e,"oklch",t);let n=e[0];if(n>=1)return[1,1,1];if(n<=0)return[0,0,0];if(!Number.isFinite(e[1]))return Te(x([n,0,d(e[2])],"oklch",t));let o=.02,r=1e-4,s=[e[0],e[1],e[2]],a=0,c=e[1],h=!0,p=Te(x(s,"oklch",t));if(gt(x(p,t,"oklab"),x(e,"oklch","oklab"))<o)return p;for(;c-a>r;){let l=(a+c)/2;s[1]=l;let b=x(s,"oklch",t);if(h&&Ot(b)){a=l;continue}p=Te(b);let g=gt(x(p,t,"oklab"),x(s,"oklch","oklab"));if(g<o){if(o-g<r)return p;h=!1,a=l}else c=l}return p}var Tt=(e,t)=>{let n=e*Re,o=Math.cos(n),r=Math.sin(n),s=St.map(c=>o*c[1]+r*c[2]),a=an(t==="p3"?vt:t==="rec2020"?yt:ce,_t);return{d:s,F:a,gam:t==="rec2020"?wt:U}};function me(e,t){let{d:[n,o,r],F:s,gam:a}=Tt(e,t),c=-pe,h=1+pe;return(p,l)=>{let b=p+l*n,g=p+l*o,$=p+l*r,C=b**3,f=g**3,v=$**3,S=a(s[0][0]*C+s[0][1]*f+s[0][2]*v);if(S<c||S>h)return!1;let E=a(s[1][0]*C+s[1][1]*f+s[1][2]*v);if(E<c||E>h)return!1;let G=a(s[2][0]*C+s[2][1]*f+s[2][2]*v);return G>=c&&G<=h}}function Rt(e,t){let{d:[n,o,r],F:s,gam:a}=Tt(e,t);return(c,h,p)=>{let l=c+h*n,b=c+h*o,g=c+h*r,$=l**3,C=b**3,f=g**3;p[0]=a(s[0][0]*$+s[0][1]*C+s[0][2]*f),p[1]=a(s[1][0]*$+s[1][1]*C+s[1][2]*f),p[2]=a(s[2][0]*$+s[2][1]*C+s[2][2]*f)}}function ge(e,t,n=.5){if(!e(t,0))return 0;let o=0;for(let r=0;r<16;r++){let s=(o+n)/2;e(t,s)?o=s:n=s}return o}var F=e=>Math.round(Math.min(1,Math.max(0,e))*255).toString(16).padStart(2,"0"),vn=e=>`#${F(e[0])}${F(e[1])}${F(e[2])}`,de=(e,t,n)=>vn(be([e,t,n],"srgb"));function At(e){let t=String(e).replace("#","").trim();if(t.length===3&&(t=t.split("").map(o=>o+o).join("")),t.length<6)return[.7,.1,280];let n=[parseInt(t.slice(0,2),16)/255,parseInt(t.slice(2,4),16)/255,parseInt(t.slice(4,6),16)/255];return x(n,"srgb","oklch").map(d)}var fe=["hex","srgb","css","hsl","hwb","oklch","oklab","lch","lab","p3","rec2020"],Nt={hex:"HEX",srgb:"RGB",css:"CSS",hsl:"HSL",hwb:"HWB",oklch:"OKLCH",oklab:"OKLab",lch:"LCH",lab:"Lab",p3:"P3",rec2020:"Rec2020"},Ft=["srgb","css","hsl","hwb","hex"],Ne=e=>!Ft.includes(e),Ht=e=>e==="hex"||e==="css"?"srgb":e,yn=Object.assign(Object.create(null),{hex:"srgb",srgb:"srgb",css:"srgb",hsl:"hsl",hwb:"hwb",oklch:"oklch",oklab:"oklab",lch:"lch",lab:"lab",p3:"display-p3",rec2020:"rec2020"}),In=e=>yn[e]||"oklch",$n=Object.assign(Object.create(null),{srgb:"srgb",hsl:"hsl",hwb:"hwb",oklch:"oklch",oklab:"oklab",lch:"lch",lab:"lab","display-p3":"p3",rec2020:"rec2020"}),Bn=e=>$n[e]||"oklch",Me=.5,Gt=(e,t,n)=>Object.freeze(["R","G","B"].map(o=>Object.freeze({k:o,min:0,max:e,step:t,scale:n}))),dt=Gt(255,1,255),ft=Gt(1,.01,1),J={oklch:[{k:"L",min:0,max:100,step:1,scale:100},{k:"C",min:0,max:Me,step:.01,scale:1},{k:"H",min:0,max:360,step:1,scale:1}],oklab:[{k:"L",min:0,max:100,step:1,scale:100},{k:"a",min:-.4,max:.4,step:.01,scale:1},{k:"b",min:-.4,max:.4,step:.01,scale:1}],lch:[{k:"L",min:0,max:100,step:1,scale:1},{k:"C",min:0,max:150,step:1,scale:1},{k:"H",min:0,max:360,step:1,scale:1}],lab:[{k:"L",min:0,max:100,step:1,scale:1},{k:"a",min:-125,max:125,step:1,scale:1},{k:"b",min:-125,max:125,step:1,scale:1}],srgb:dt,css:dt,hsl:[{k:"H",min:0,max:360,step:1,scale:1},{k:"S",min:0,max:100,step:1,scale:1},{k:"L",min:0,max:100,step:1,scale:1}],hwb:[{k:"H",min:0,max:360,step:1,scale:1},{k:"W",min:0,max:100,step:1,scale:1},{k:"B",min:0,max:100,step:1,scale:1}],p3:ft,rec2020:ft},Mt=e=>e>=1?0:e>=.1?1:e>=.01?2:3,It=(e,t,n)=>t==="oklch"?[e[0],e[1],e[2]]:Ft.includes(n)?t==="srgb"?be(e,"srgb"):x(be(e,"srgb"),"srgb",t):x(e,"oklch",t);function xe(e,t){let n=It(e,Ht(t),t);return J[t].map((o,r)=>{let s=d(n[r])*o.scale;return cn(Math.abs(s)<.5*o.step?0:s,o.min,o.max)})}function Bt(e,t,n,o){let r=Ht(t),s=It(e,r,t).map(d);s[n]=o/J[t][n].scale;let a=x(s,r,"oklch");return[d(a[0]),d(a[1]),d(a[2])]}function Pt(e,t){if(!Ne(t))return"sRGB";let n=be(e,"srgb");return Math.max(...n)<.03||Math.min(...n)>.97||Ae(e,"srgb")?"sRGB":Ae(e,"p3")?"P3":"wide"}function Fe(e,t){if(t==="hex")return de(e[0],e[1],e[2]);let n=J[t],o=xe(e,t),r=s=>{let a=o[s].toFixed(Mt(n[s].step));return n[s].k==="H"&&+a==360?0 .toFixed(Mt(n[s].step)):a};return t==="css"?`${r(0)}, ${r(1)}, ${r(2)}`:t==="oklch"||t==="oklab"||t==="lch"||t==="lab"?`${r(0)}% ${r(1)} ${r(2)}`:t==="hsl"||t==="hwb"?`${r(0)} ${r(1)}% ${r(2)}%`:`${r(0)} ${r(1)} ${r(2)}`}var xt=(e,t)=>t==="hex"?e:t==="srgb"?`rgb(${e})`:t==="css"?`rgba(${e}, 1)`:t==="hsl"?`hsl(${e})`:t==="hwb"?`hwb(${e})`:t==="p3"?`color(display-p3 ${e})`:t==="rec2020"?`color(rec2020 ${e})`:`${t}(${e})`;function Dt(e,t,n){let o=d(n);if(t==="hex")return de(e[0],e[1],e[2])+(o<.999?F(o):"");let r=Fe(e,t);if(o>=.999)return xt(r,t);let s=+o.toFixed(3);return t==="css"?`rgba(${r}, ${s})`:xt(`${r} / ${s}`,t)}var Xt=(()=>{try{return document.createElement("canvas").getContext("2d",{colorSpace:"display-p3"})?.getContextAttributes?.().colorSpace==="display-p3"}catch{return!1}})(),He=Xt?{colorSpace:"display-p3"}:{},En=Xt?"p3":"srgb",ke=(e,t)=>{let n=e.length-1,o=Math.max(0,Math.min(n,t*n)),r=Math.floor(o),s=o-r;return e[r]*(1-s)+e[Math.min(r+1,n)]*s},_n=(e,t)=>{let n=me(e,t),o=new Float64Array(128);for(let r=0;r<128;r++)o[r]=ge(n,r/127);return o},Sn="repeating-conic-gradient(#6b6b6b 0% 25%, #9a9a9a 0% 50%) 0 0 / 8px 8px",Vn=Object.assign(Object.create(null),{srgb:"srgb","display-p3":"p3",rec2020:"rec2020","prophoto-rgb":"prophoto-rgb"}),De=/^(rgba?|hsla?|hwb)\([ \t\n\r\f]*([^)]*?)[ \t\n\r\f]*\)$/i,Xe=/^(oklch|oklab|lch|lab|color)\([ \t\n\r\f]*([^)]*?)[ \t\n\r\f]*\)$/i,Ln=/^(srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020|xyz|xyz-d50|xyz-d65)$/i,Ce=/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,Ge,jt=()=>Ge===void 0?Ge=document.createElement("canvas").getContext("2d"):Ge,On=/^(#[0-9a-f]{3,8}|[a-z][a-z-]*(?:\([\w\s.,%+\-\/]*\))?)$/i;function Kn(e){if(e=String(e??"").trim(),!On.test(e))return!1;if(Ce.test(e))return!0;if(Xe.test(e))return An(e);if(De.test(e))return Yt(e)!==null;let t=jt();return t?["#000","#fff"].some(n=>{t.fillStyle=n;let o=t.fillStyle;return t.fillStyle=e,t.fillStyle!==o}):!0}var je="[+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?",Tn=new RegExp("^"+je+"$","i"),Rn=new RegExp("^"+je+"%$","i"),Kt=new RegExp("^("+je+")(deg|grad|rad|turn)$","i"),Ke=/[ \t\n\r\f]+/,Ye=/^none$/i,Ie=e=>e.replace(/^[ \t\n\r\f]+|[ \t\n\r\f]+$/g,""),Be=e=>!!e&&!Ke.test(e),H=e=>Ye.test(e)?"none":Tn.test(e)?"num":Rn.test(e)?"pct":Kt.test(e)?"angle":null,Pe=e=>{let t=Kt.exec(e);if(!t)return d(parseFloat(e));let n=parseFloat(t[1]),o=t[2].toLowerCase();return d(o==="turn"?n*360:o==="grad"?n*.9:o==="rad"?n*180/Math.PI:n)};function Yt(e){let t=De.exec(e);if(!t)return null;let n=t[1].toLowerCase().replace(/a$/,""),o=t[2],r,s,a;if(o.includes(",")){if(n==="hwb")return null;let l=o.split(",").map(Ie);if(l.length<3||l.length>4||!l.every(Be)||(r=l.slice(0,3),s=l[3],a=r.map(H),n==="rgb"?!(a.every(b=>b==="num")||a.every(b=>b==="pct")):!((a[0]==="num"||a[0]==="angle")&&a[1]==="pct"&&a[2]==="pct"))||s!==void 0&&H(s)!=="num"&&H(s)!=="pct")return null}else{let l=o.split("/");if(l.length>2||(r=l[0].split(Ke).filter(Boolean),r.length!==3))return null;if(l.length===2){s=Ie(l[1]);let b=Be(s)?H(s):null;if(!b||b==="angle")return null}if(a=r.map(H),n==="rgb"?!a.every(b=>b&&b!=="angle"):!(a[0]&&a[0]!=="pct"&&a[1]&&a[1]!=="angle"&&a[2]&&a[2]!=="angle"))return null}let c=(l,b)=>Ye.test(l)?0:/%$/.test(l)?parseFloat(l)/100*b:parseFloat(l),h=s===void 0?1:m(c(s,1),0,1);return[n==="rgb"?x([m(c(r[0],255)/255,0,1),m(c(r[1],255)/255,0,1),m(c(r[2],255)/255,0,1)],"srgb","oklch"):x([a[0]==="none"?0:Pe(r[0]),m(c(r[1],100),0,100),m(c(r[2],100),0,100)],n,"oklch"),h]}var An=e=>{let t=Xe.exec(e);if(!t)return!1;let n=t[1].toLowerCase(),o=t[2].split("/");if(o.length>2)return!1;let r=o[0].split(Ke).filter(Boolean);if(n==="color"&&!Ln.test(r.shift()||"")||r.length!==3)return!1;let s=n==="lch"||n==="oklch";if(!r.every((a,c)=>{let h=H(a);return h&&(s&&c===2?h!=="pct":h!=="angle")}))return!1;if(o.length===2){let a=Ie(o[1]),c=Be(a)?H(a):null;if(!c||c==="angle")return!1}return!0};function we(e){if(e=String(e??"").trim(),Ce.test(e)){let c=e.replace("#",""),h=1;c.length===4?(h=parseInt(c[3]+c[3],16)/255,c=c.slice(0,3)):c.length===8&&(h=parseInt(c.slice(6,8),16)/255,c=c.slice(0,6));let[p,l,b]=At("#"+c);return[p,l,b,h]}let t=Xe.exec(e);if(t){let c=t[1].toLowerCase(),[h,p]=t[2].split("/").map(v=>v.trim()),l=h.split(/\s+/).filter(Boolean),b=c;if(c==="color"&&(b=Vn[(l[0]||"").toLowerCase()],l=l.slice(1),!b))return[.7,.1,280,1];let g=(v,S=1)=>!v||Ye.test(v)?0:d(parseFloat(v))*(/%$/.test(v)?S:1),$=p?m(g(p,.01),0,1):1,C=c==="lab"?[m(g(l[0]),0,100),g(l[1],1.25),g(l[2],1.25)]:c==="lch"?[m(g(l[0]),0,100),Math.max(0,g(l[1],1.5)),Pe(l[2]||"0")]:c==="color"?[g(l[0],.01),g(l[1],.01),g(l[2],.01)]:c==="oklab"?[m(g(l[0],.01),0,1),g(l[1],.004),g(l[2],.004)]:[m(g(l[0],.01),0,1),Math.max(0,g(l[1],.004)),Pe(l[2]||"0")],f=b==="oklch"?C:x(C,b,"oklch");return[d(f[0]),m(d(f[1]),0,Me),(d(f[2])%360+360)%360,$]}if(De.test(e)){let c=Yt(e);if(!c)return[0,0,0,1];let[h,p]=c;return[d(h[0]),m(d(h[1]),0,Me),(d(h[2])%360+360)%360,p]}let n=jt();if(!n)return[0,0,0,1];n.fillStyle="#000",n.fillStyle=e;let o=n.fillStyle;if(Ce.test(o))return we(o);let r=o.match(/^rgba?\(([^)]*)\)/i),s=((r?r[1]:"").match(/-?[\d.]+(?:e[+-]?\d+)?/gi)||[0,0,0]).map(Number),a=x([s[0]/255,s[1]/255,s[2]/255],"srgb","oklch");return[d(a[0]),d(a[1]),d(a[2]),s[3]!=null?m(d(s[3]),0,1):1]}function Zt(e,t){let[n,o,r,s]=we(e.value||"#7c5cff"),a=fe.includes(e.mode)?e.mode:"oklch",c=NaN,h=null,p=[],l=NaN,b="",g=()=>Dt([n,o,r],a,s),$=w("div","tw-color-body"),C=w("div","tw-wg-area"),f=document.createElement("canvas");f.className="tw-wg-canvas";let v=w("div","tw-wg-thumb");C.append(f,v);let S=w("div","tw-wg-hue"),E=document.createElement("canvas");E.className="tw-wg-hue-canvas";let G=w("div","tw-wg-hue-thumb");S.append(E,G),f.setAttribute("role","img"),f.setAttribute("aria-label","Colour plane: chroma across, lightness up"),E.setAttribute("role","img"),E.setAttribute("aria-label","Hue strip");let _=w("div","tw-wg-alpha"),Ze=w("div","tw-wg-alpha-grad"),ve=w("div","tw-wg-hue-thumb");_.append(Ze,ve),_.tabIndex=0,_.setAttribute("role","slider"),_.setAttribute("aria-label","Alpha"),_.setAttribute("aria-valuemin","0"),_.setAttribute("aria-valuemax","1");let ze=w("div","tw-color-mode-row"),O=w("select","tw-color-mode");O.setAttribute("aria-label","Color mode"),fe.forEach(i=>{let u=document.createElement("option");u.value=i,u.textContent=Nt[i],O.append(u)}),O.value=a;let We=w("span","tw-color-gamut");ze.append(O,We);let T=w("div","tw-color-channels");$.append(C,S,_,ze,T);let y=f.getContext("2d",He),Ue=E.getContext("2d"),I=document.createElement("canvas"),zt=I.getContext("2d",He),ye=null,$e=()=>{let i=C.getBoundingClientRect(),u=Math.round(i.width),M=Math.round(i.height);if(u<2)return;let k=window.devicePixelRatio||1,P=Ne(a)?"p3":"srgb",D=_n(r,P);h=D;let z=Math.round(u*k),ee=Math.round(M*k),R=Math.max(1,Math.round(z/4)),X=Math.max(1,Math.round(ee/4));(I.width!==R||I.height!==X)&&(I.width=R,I.height=X,ye=new ImageData(R,X,He));let te=ye.data,tn=X>1?1/(X-1):0,nn=R>1?1/(R-1):0,rn=Rt(r,En),ne=[0,0,0];for(let A=0;A<X;A++){let re=1-A*tn,_e=ke(D,re);for(let N=0;N<R;N++){rn(re,N*nn*_e,ne);let j=(A*R+N)*4;te[j]=Math.round(m(ne[0],0,1)*255),te[j+1]=Math.round(m(ne[1],0,1)*255),te[j+2]=Math.round(m(ne[2],0,1)*255),te[j+3]=255}}if(zt.putImageData(ye,0,0),f.width=z,f.height=ee,y.imageSmoothingEnabled=!0,y.drawImage(I,0,0,z,ee),P!=="srgb"){let A=(re,_e,N,j)=>{let on=me(r,re),Se=[];for(let V=0;V<=100;V++){let W=V/100,Ve=ke(D,W);if(Ve<=0)continue;let rt=ge(on,W,Ve);rt<=0||Se.push([Math.min(rt/Ve*z,z-N*k/2),(1-W)*ee])}Se.length<2||(y.save(),y.strokeStyle=_e,y.lineWidth=N*k,y.lineJoin=y.lineCap="round",y.setLineDash(j.map(V=>V*k)),y.beginPath(),Se.forEach((V,W)=>W?y.lineTo(V[0],V[1]):y.moveTo(V[0],V[1])),y.stroke(),y.restore())};A("srgb","rgba(255,255,255,0.7)",1.5,[]),A("p3","rgba(255,255,255,0.4)",1,[3,3])}c=r},qe=.7,Je=i=>{let u=x([qe,ge(me(i,"srgb"),qe),i],"oklch","srgb");return`rgb(${m(u[0]*255,0,255)|0},${m(u[1]*255,0,255)|0},${m(u[2]*255,0,255)|0})`},Qe=0,Wt=()=>{let i=S.getBoundingClientRect(),u=Math.max(1,Math.round(i.width)),M=Math.max(1,Math.round(i.height));if(!(u<2)&&!(u===Qe&&E.width===u)){Qe=u,E.width=u,E.height=M;for(let k=0;k<u;k++)Ue.fillStyle=Je(k/(u-1)*360),Ue.fillRect(k,0,1,M)}},Ee=()=>{let i=h?ke(h,n):.4,u=k=>`${m(k,0,1)*100}%`,M=(k,P)=>{let D=m(k,0,1);return`calc(${D*100}% + ${(.5-D)*P}px)`};v.style.left=u(i>0?o/i:0),v.style.top=u(1-n),G.style.left=M(r/360,16),ve.style.left=M(s,16),_.setAttribute("aria-valuenow",String(+s.toFixed(2))),Ze.style.background=`linear-gradient(to right, oklch(${n} ${o} ${r} / 0), oklch(${n} ${o} ${r}))`,v.style.background=`oklch(${n} ${o} ${r})`,ve.style.background=`linear-gradient(oklch(${n} ${o} ${r} / ${s}), oklch(${n} ${o} ${r} / ${s})), var(--tw-dropdown-bg)`,r!==l&&(b=Je(r),l=r),G.style.background=b},Q=()=>{if(We.textContent=Pt([n,o,r],a),a==="hex"){let i=T.querySelector(".tw-color-chan-input");i&&document.activeElement!==i&&(i.value=de(n,o,r)+(s<.999?F(s):""))}else{let i=xe([n,o,r],a);p.forEach((u,M)=>{u.el.contains(document.activeElement)||u.set(i[M])})}},Ut=()=>{Wt(),$e(),Ee()},qt=()=>t(g()),et=i=>{i&&r!==c&&$e(),Ee(),Q()},B=i=>{et(i),qt()},tt=()=>{if(T.replaceChildren(),p=[],a==="hex"){T.classList.add("tw-color-channels--hex");let i=w("div","tw-color-chan"),u=w("input","tw-color-chan-input");u.type="text",u.spellcheck=!1,u.setAttribute("aria-label","Hex color"),at(u),lt(u),u.addEventListener("change",()=>{let M=u.value.trim();Ce.test(M)&&([n,o,r,s]=we(M),B(!0))}),u.addEventListener("blur",Q),u.addEventListener("keydown",M=>{M.key==="Enter"&&u.blur()}),i.append(st("span","tw-color-chan-label","HEX"),u),T.append(i)}else{T.classList.remove("tw-color-channels--hex");let i=xe([n,o,r],a);J[a].forEach((u,M)=>{let k=ut({label:u.k,value:i[M],min:u.min,max:u.max,step:u.step},P=>{[n,o,r]=Bt([n,o,r],a,M,m(P,u.min,u.max)),B(!0)});k.el.addEventListener("focusout",Q),p.push(k),T.append(k.el)})}Q()},Jt=i=>se(i,C);oe(C,i=>{let[u,M]=Jt(i);n=1-M,o=u*(h?ke(h,n):.4),B(!1)});let Qt=i=>se(i,S)[0]*360;oe(S,i=>{r=Qt(i),B(!0)});let en=i=>se(i,_)[0];oe(_,i=>{s=en(i),B(!1)}),_.addEventListener("keydown",i=>{let u=ot(i,s,.01,0,1);u!=null&&(i.preventDefault(),s=m(u,0,1),B(!1))});let nt=i=>{a=i,O.value=i,tt(),$e(),Ee()};return O.addEventListener("change",()=>{nt(O.value),e.onMode&&e.onMode()}),tt(),{el:$,set:i=>{let u=document.activeElement;u&&$.contains(u)&&u.blur(),[n,o,r,s]=we(i),et(!0)},get:()=>g(),mode:()=>a,setMode:i=>{i!==a&&fe.includes(i)&&nt(i)},reflow:Ut,swatchCss:()=>`linear-gradient(oklch(${n} ${o} ${r} / ${s}), oklch(${n} ${o} ${r} / ${s})), ${Sn}`,valueText:()=>Fe([n,o,r],a)+(s<.999?a==="hex"?F(s):` / ${+s.toFixed(2)}`:"")}}function Nn(e,t){let{root:n,trigger:o,right:r}=it("tw-color",e.label??"Colour"),s=w("span","tw-trigger-chip tw-color-swatch"),a=w("span","tw-trigger-value");r.append(s,a);let c=w("div","tw-color-pop"),h=()=>{s.style.background=p.swatchCss(),a.textContent=p.valueText()},p=Zt({value:e.value,onMode:()=>h()},l=>{h(),t(l)});return c.append(p.el),n.append(c),ct(n,o,c,{width:240,fallbackH:340,gap:6,onOpen:p.reflow,onReflow:p.reflow}),h(),{el:n,set:l=>{p.set(l),h()},get:()=>p.get()}}var Yn=(e,t,n,o)=>o<.999?`oklch(${+e.toFixed(4)} ${+t.toFixed(4)} ${+n.toFixed(2)} / ${+o.toFixed(3)})`:`oklch(${+e.toFixed(4)} ${+t.toFixed(4)} ${+n.toFixed(2)})`;Le("color",Nn);Le("colorpicker",Zt);export{In as a,Bn as b,Sn as c,Kn as d,we as e,Zt as f,Yn as g};
@@ -1 +0,0 @@
1
- var k=e=>e.replace(/([A-Z])/g," $1").replace(/^./,t=>t.toUpperCase()).trim(),x=(e,t,n)=>Math.min(n,Math.max(t,e)),Z=e=>typeof e=="string"&&(/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(e.trim())||/^(oklch|oklab|rgba?|hsla?|hwb|lab|lch|color)\(/i.test(e.trim()));var C=e=>{let t=String(e),n=/e-(\d+)$/i.exec(t);if(n)return Math.min(20,Number(n[1])+(t.split("e")[0].split(".")[1]||"").length);let r=t.indexOf(".");return r===-1?0:Math.min(20,t.length-r-1)},H=(e,t,n)=>{if(!(n>0))return e;let r=C(n),o=Number((+t).toFixed(r)),s=Math.round((e-o)/n);return Number.isFinite(s)?Number((o+s*n).toFixed(r)):e},Q=(e,t,n,r=e)=>{let o=a=>H(a,r,n),s=Number.isFinite(e)?o(e):-1/0,i=Number.isFinite(t)?o(t):1/0;return s<e&&(s=o(s+n)),i>t&&(i=o(i-n)),s>i?[e,e]:[s,i]},S=(e,t)=>{let n=t-e;return n<=1?.01:n<=10?.1:n<=100?1:10},ee=(e,t,n,r=0,o=null)=>{let s=+e,i=+t,a=+n;if(Number.isFinite(s)||(s=r),Number.isFinite(i)||(i=o??s+100),i<s){let d=s;s=i,i=d}return(!(a>0)||a>i-s)&&(a=S(s,i)),{min:s,max:i,step:a}},te=(e,t,n,r,o,s=null)=>{let i=e.shiftKey?10:1;switch(e.key){case"ArrowRight":case"ArrowUp":return t+n*i;case"ArrowLeft":case"ArrowDown":return t-n*i;case"PageUp":return s!=null?t+s:null;case"PageDown":return s!=null?t-s:null;case"Home":return r;case"End":return o}return null},ne=(e,t,n,r,o=0)=>{let s=e.offsetLeft,i=s+e.offsetWidth,a=t.offsetLeft,d=a+t.offsetWidth;return n<i&&n+r>s||n<d+o&&n+r>a-o},re=e=>e>=0?[0,e<=1?1:e*3||100]:[e>=-1?-1:e*3,0],P=e=>e==null?void 0:typeof e=="object"?e.value:e,F=e=>{try{return JSON.stringify(e)}catch{return String(e)}},O=e=>e==null?"":typeof e=="string"?k(e):typeof e=="object"?e.label??(e.value!==void 0?String(e.value):F(e)):String(e),p=(e,t,n)=>{let r=document.createElement(e);return t&&(r.className=t),n!=null&&(r.innerHTML=n),r},oe=(e,t)=>{let n=p("button",e,t);return n.type="button",n},R=(e,t,n)=>{let r=p(e,t);return r.textContent=n,e==="button"&&(r.type="button"),r},N=e=>["pointerdown","pointermove","pointerup"].forEach(t=>e.addEventListener(t,n=>n.stopPropagation())),_=e=>{requestAnimationFrame(e),document.fonts&&document.fonts.ready&&document.fonts.ready.then(e)},V=(e,t,n)=>{let r=e.isConnected;r||requestAnimationFrame(()=>{e.isConnected&&(r=!0)});let o=i=>{if(!e.isConnected){(r||e.closest("[data-tw-destroyed]"))&&s();return}r=!0,n(i)},s=()=>t.forEach(([i,a])=>i.removeEventListener(a,o));return t.forEach(([i,a])=>i.addEventListener(a,o)),s},se=()=>requestAnimationFrame(()=>window.dispatchEvent(new Event("tw-reflow"))),ie=(e,t)=>{e.addEventListener("pointerenter",()=>{e.classList.add("is-hover"),t&&t()}),e.addEventListener("pointerleave",()=>e.classList.remove("is-hover"))},g=!1;typeof document<"u"&&(document.addEventListener("pointerdown",()=>{g=!0},!0),document.addEventListener("keydown",()=>{g=!1},!0));var ae=e=>{e.addEventListener("focus",()=>e.classList.toggle("tw-focus-quiet",g)),e.addEventListener("blur",()=>e.classList.remove("tw-focus-quiet"))},B=(e,t,{width:n,fallbackH:r=300,gap:o=6,align:s="start",prefer:i="below"}={})=>{let a=e.getBoundingClientRect();n==="match"&&(t.style.width=a.width+"px");let d=n==="match"?a.width:t.offsetWidth||n||0,b=s==="end"?a.right-d:s==="center"?a.left+a.width/2-d/2:a.left;t.style.left=Math.max(8,Math.min(b,window.innerWidth-d-8))+"px";let l=t.offsetHeight||r,f=window.innerHeight-a.bottom,u=a.top,E=l+12,v=f>=E,m=u>=E,w=(i==="above"?m||!v&&u>=f:!v&&(m||u>f))?a.top-l-o:a.bottom+o;t.style.top=x(w,o,window.innerHeight-l-o)+"px"},I=Object.assign(Object.create(null),{accent:"--tw-accent",onAccent:"--tw-on-accent",base:"--tw-base",dropdownBg:"--tw-dropdown-bg",surface:"--tw-surface",surfaceHover:"--tw-surface-hover",surfaceActive:"--tw-surface-active",border:"--tw-border",borderHover:"--tw-border-hover",selection:"--tw-selection",title:"--tw-text-root",section:"--tw-text-section",text:"--tw-text-primary",label:"--tw-text-label",textMuted:"--tw-text-secondary",textFaint:"--tw-text-tertiary",focus:"--tw-text-focus",success:"--tw-success",danger:"--tw-danger",shadow:"--tw-shadow-dropdown",shadowPanel:"--tw-shadow-panel",shadowPanelLifted:"--tw-shadow-panel-lifted",font:"--tw-font-sans",fontMono:"--tw-font-mono",radius:"--tw-radius",density:"--tw-row-height"}),j=new Set(["radius","density"]),y=e=>(e/=255,e<=.03928?e/12.92:((e+.055)/1.055)**2.4),$=e=>{e=String(e).trim();let t=/^#([0-9a-f]{3})$/i.exec(e);if(t)return t[1].split("").map(n=>parseInt(n+n,16));if(t=/^#([0-9a-f]{6})$/i.exec(e),t)return[0,2,4].map(n=>parseInt(t[1].slice(n,n+2),16));if(t=/^rgba?\(([^)]+)\)/i.exec(e),t){let n=t[1].split(/[\s,/]+/).filter(Boolean).map(parseFloat);return[n[0],n[1],n[2]]}return null},D=e=>{let t=$(e);if(!t||t.some(r=>!Number.isFinite(r)))return"#ffffff";let n=.2126*y(t[0])+.7152*y(t[1])+.0722*y(t[2]);return 1.05/(n+.05)>=(n+.05)/.0571?"#ffffff":"#161616"},le=e=>{if(!e||typeof e!="object")return null;let t={};for(let[n,r]of Object.entries(e)){if(n.startsWith("--")){t[n]=String(r);continue}let o=I[n];o&&(t[o]=j.has(n)&&typeof r=="number"?`${r}px`:String(r))}return t["--tw-accent"]&&!t["--tw-on-accent"]&&(t["--tw-on-accent"]=D(t["--tw-accent"])),Object.keys(t).length?t:null},X=(e,t)=>{if(e){if(e._twAppliedVars)for(let n of e._twAppliedVars)e.style.removeProperty(n);if(e._twAppliedVars=t?Object.keys(t):null,t)for(let n in t)e.style.setProperty(n,t[n])}},K=(e,t)=>{let n=t?.closest('[data-tw-scheme="light"]')?"light":t?.closest('[data-tw-scheme="dark"]')?"dark":null;n?e.setAttribute("data-tw-scheme",n):e.removeAttribute("data-tw-scheme")},M=(e,t)=>{X(e,t?.closest(".tw-panel")?._twTheme),K(e,t)},h=null,L=null,ce=e=>{h&&(!e||e.contains(L))&&h()};function ue(e,t,n,r={}){let o=!1,s=null;n.classList.add("tw-portal"),n.addEventListener("pointerdown",c=>t.closest(".tw-panel")?._twEditPointer?.(c),!0),N(n);let i=()=>B(t,n,{width:r.width,fallbackH:r.fallbackH,gap:r.gap,align:r.align}),a=()=>{if(o){if(!e.isConnected)return m();i(),r.onReflow&&r.onReflow()}},d=c=>{!e.contains(c.target)&&!n.contains(c.target)&&m()},b=c=>{c.key==="Escape"&&o&&(m(),t.focus())},l=c=>{if(!o)return;let w=c.relatedTarget;(w?e.contains(w)||n.contains(w):g)||(m(),w&&!t.closest(".tw-panel")?.contains(w)&&setTimeout(()=>{!o&&document.activeElement===w&&t.focus()},0))};e.addEventListener("focusout",l),n.addEventListener("focusout",l);let f=()=>n.querySelector('button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [href], [tabindex]:not([tabindex="-1"])'),u=()=>M(n,e),E=c=>{c.every(w=>w.target===n)||u()},v=()=>{h&&h!==m&&h(),h=m,L=t,o=!0,e.classList.add("is-open"),t.setAttribute("aria-expanded","true"),document.body.appendChild(n),M(n,e),window.addEventListener("tw-retheme",u),typeof MutationObserver=="function"&&(s=new MutationObserver(E),s.observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-tw-scheme"]})),i(),requestAnimationFrame(()=>{if(o&&(n.classList.add("is-open"),r.onOpen&&r.onOpen(),i(),!n.contains(document.activeElement))){let c=r.initialFocus&&r.initialFocus()||f();c&&c.focus({focusVisible:!g})}}),requestAnimationFrame(function c(){if(o){if(!e.isConnected)return m();requestAnimationFrame(c)}}),setTimeout(()=>{o&&document.addEventListener("pointerdown",d,!0)},0),document.addEventListener("keydown",b),window.addEventListener("scroll",a,!0),window.addEventListener("resize",a)},m=()=>{h===m&&(h=null,L=null),n.contains(document.activeElement)&&t.focus(),o=!1,e.classList.remove("is-open"),n.classList.remove("is-open"),t.setAttribute("aria-expanded","false"),document.removeEventListener("pointerdown",d,!0),document.removeEventListener("keydown",b),window.removeEventListener("scroll",a,!0),window.removeEventListener("resize",a),window.removeEventListener("tw-retheme",u),s&&(s.disconnect(),s=null),setTimeout(()=>{o||n.remove()},200)};return t.addEventListener("click",()=>{t.disabled||(o?m():v())}),{open:v,close:m,isOpen:()=>o,reflow:a}}var de=(e,t)=>{if(e=e.toLowerCase(),e.includes(t))return!0;if(t.length<3)return!1;let n=t.length,r=e.length,o=new Array(r+1).fill(0);for(let s=1;s<=n;s++){let i=[s];for(let a=1;a<=r;a++)i[a]=Math.min(o[a]+1,i[a-1]+1,o[a-1]+(t[s-1]===e[a-1]?0:1));o=i}return Math.min(...o)<=(t.length<6?1:2)},q=typeof matchMedia=="function"?matchMedia("(prefers-reduced-motion: reduce)"):{matches:!1},z="cubic-bezier(0.22, 1, 0.36, 1)",fe="cubic-bezier(0.34, 1.2, 0.64, 1)",W=(e,t)=>{q.matches||typeof e.animate!="function"||(e.style.transformOrigin=t>0?"left center":"right center",e.animate([{transform:"scaleX(1)"},{transform:"scaleX(1.18)"},{transform:"scaleX(1)"}],{duration:300,easing:z}))},U=(e,t,n)=>{let r=e.querySelector('[data-active="true"]');if(!r)return;let o=r.offsetLeft,s=r.offsetWidth,i=parseFloat(t.style.left);t.style.left=o+"px",t.style.width=s+"px",n&&Number.isFinite(i)&&i!==o&&W(t,o>i?1:-1)},me=(e,t)=>{e.classList.toggle("is-disabled",t);for(let n of e.children)n.inert=t},we=(e,t,n,r)=>{e.classList.toggle("is-collapsed",r),t.setAttribute("aria-expanded",String(!r)),n.inert=r},T=(e,t)=>{let n=e.findIndex(r=>r.dataset.value===String(t));return n<0&&e.length?0:n},G=(e,t)=>{let n=T(e,t);e.forEach((r,o)=>{let s=r.dataset.value===String(t);r.dataset.active=String(s),r.setAttribute("aria-checked",String(s)),r.tabIndex=o===n?0:-1})},J=(e,t,n)=>{let r=R("button",e,O(t));return r.setAttribute("role","radio"),r._twVal=P(t),r.dataset.value=r._twVal,r.addEventListener("click",()=>n(r._twVal)),r},Y=(e,t,n,r=0)=>{switch(e){case"ArrowRight":return(t+1)%n;case"ArrowLeft":return(t-1+n)%n;case"ArrowDown":return r<0?-1:r?t+r<n?t+r:t:(t+1)%n;case"ArrowUp":return r<0?-1:r?t-r>=0?t-r:t:(t-1+n)%n;case"Home":return 0;case"End":return n-1}return-1};function be(e,t,n,r){let o=p("div","tw-seg");o.setAttribute("role","radiogroup"),r&&o.setAttribute("aria-label",r);let s=p("div","tw-seg-pill");o.append(s);let i=e.map(l=>{let f=J("tw-seg-btn",l,u=>b(u));return o.append(f),f}),a=l=>U(o,s,l),d=()=>{G(i,t),a(!0)},b=(l,f=!0)=>{l!=null&&!i.some(u=>u._twVal===l)||(t=l,d(),f&&n(l))};return o.addEventListener("keydown",l=>{let f=T(i,t);if(f<0)return;let u=Y(l.key,f,i.length);u<0||(l.preventDefault(),b(i[u]._twVal),i[u].focus())}),d(),_(()=>{a(),o.classList.add("is-ready")}),V(o,[[window,"tw-reflow"]],()=>a()),{el:o,set:l=>b(l,!1),get:()=>t}}var he=(e,t="",n=2,r=24)=>`<svg${t?` class="${t}"`:""} viewBox="0 0 ${r} ${r}" fill="none" stroke="currentColor" stroke-width="${n}" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`,ve=(e,t)=>({el:e,set:()=>{},get:()=>{},destroy:t}),A={},ge=(e,t)=>{A[e]=t},Ee=e=>A[e];export{k as a,x as b,Z as c,C as d,H as e,Q as f,S as g,ee as h,te as i,ne as j,re as k,P as l,F as m,O as n,p as o,oe as p,R as q,N as r,_ as s,V as t,se as u,ie as v,ae as w,B as x,le as y,X as z,K as A,M as B,ce as C,ue as D,de as E,q as F,z as G,fe as H,U as I,me as J,we as K,T as L,G as M,J as N,Y as O,be as P,he as Q,ve as R,ge as S,Ee as T};
@@ -1 +0,0 @@
1
- import{c as a,d as b,e as c,f as d,g as e}from"./chunk-AUZVP7BC.js";import"./chunk-36ETNTXF.js";import"./chunk-NGLZEK5U.js";export{a as CHECKER,d as createPickerBody,b as isColor,e as oklchStr,c as parseColor};
@@ -1 +0,0 @@
1
- import{a as V,b as D,c as q,d as J,e as P,f as Q,g as W}from"./chunk-AUZVP7BC.js";import{e as z,i as U}from"./chunk-36ETNTXF.js";import{D as X,Q as N,S as Y,b as f,o as g,p as B}from"./chunk-NGLZEK5U.js";var it=N('<path d="M12 5v14m7-7H5"/>',"",2.5),Z=i=>i&&!Array.isArray(i)&&typeof i.interpolation=="string"?i.interpolation:null;function tt(i){let x=[{color:"oklch(0.72 0.19 25)",pos:0},{color:"oklch(0.72 0.16 280)",pos:1}],l=Array.isArray(i)?i:i&&Array.isArray(i.stops)?i.stops:null,n=(p,G)=>J(p)?{color:String(p).trim(),pos:f(+G||0,0,1)}:null,m=(l||[]).map(p=>Array.isArray(p)?n(p[0],p[1]):p&&typeof p=="object"?n(p.color,p.pos):null).filter(Boolean);return m.length>=2?m:x}function pt(i,x){let l=tt(i.value),n=l[0],{root:m,trigger:p,right:G}=U("tw-gradient",i.label??"Gradient"),R=g("span","tw-gradient-count"),_=g("span","tw-trigger-chip tw-gradient-preview");G.append(R,_);let S=g("div","tw-color-pop tw-gradient-pop"),j=g("div","tw-gradient-bar-row"),L=g("div","tw-gradient-bar"),F=g("div","tw-gradient-grad"),u=g("div","tw-gradient-rail");L.append(F,u);let v=B("tw-gradient-add",it);v.title="Add a stop after the selected one",v.setAttribute("aria-label","Add a colour stop after the selected one"),j.append(L,v);let k=()=>[...l].sort((t,o)=>t.pos-o.pos),ot=()=>k().map(t=>`${t.color} ${(t.pos*100).toFixed(1)}%`).join(", "),I=()=>V(h.mode()),et=()=>`linear-gradient(in ${I()} to right, ${ot()})`,c=()=>{let t=et();F.style.background=t,_.style.background=`${t}, ${q}`},C=()=>{R.textContent=`${l.length} stop${l.length===1?"":"s"}`},K=()=>({stops:k().map(t=>({color:t.color,pos:+t.pos.toFixed(4)})),interpolation:I()}),w=()=>x(K()),A=t=>[...u.children].find(o=>o._stop===t),h=Q({value:n.color,mode:D(Z(i.value)||"oklch"),onMode:()=>{c(),w()}},t=>{n.color=t,A(n)?.style.setProperty("--stop",t),c(),w()});S.append(j,h.el),m.append(S);let E=t=>t.setAttribute("aria-label",`Colour stop at ${Math.round(t._stop.pos*100)}%${t._stop===n?", selected":""}`),nt=()=>{for(let t of u.children)t.dataset.sel=String(t._stop===n),E(t)},$=()=>{u.replaceChildren();for(let t of l){let o=B("tw-gradient-stop");o._stop=t,o.style.left=t.pos*100+"%",o.style.setProperty("--stop",t.color),o.dataset.sel=String(t===n),E(o),o.addEventListener("focus",()=>M(t,!1));let s=!1;z(o,{onDown:e=>{e.preventDefault(),e.stopPropagation(),o.focus({focusVisible:!1}),M(t,!1),s=!1},onMove:e=>{let r=u.getBoundingClientRect();t.pos=f((e.clientX-r.left)/(r.width||1),0,1),o.style.left=t.pos*100+"%",E(o),c(),w(),s=l.length>2&&(e.clientY<r.top-24||e.clientY>r.bottom+24),o.dataset.removing=String(s)},onEnd:()=>{s?O(t):o.dataset.removing="false"}}),o.addEventListener("dblclick",e=>{e.preventDefault(),O(t)}),o.addEventListener("keydown",e=>{let r=e.key==="ArrowLeft"?-1:e.key==="ArrowRight"?1:0;r&&(e.preventDefault(),t.pos=f(t.pos+r*(e.shiftKey?.1:.01),0,1),o.style.left=t.pos*100+"%",E(o),c(),w())}),u.append(o)}},M=(t,o)=>{t!==n&&(h.set(t.color),n=t),o?$():nt()},rt=t=>{let o=u.getBoundingClientRect();return f((t-o.left)/(o.width||1),0,1)},st=t=>{let o=k(),s=o[0],e=o[o.length-1];for(let d=0;d<o.length-1;d++)if(t>=o[d].pos&&t<=o[d+1].pos){s=o[d],e=o[d+1];break}let r=e.pos>s.pos?f((t-s.pos)/(e.pos-s.pos),0,1):0,a=P(s.color),y=P(e.color),H=d=>d[1]<1e-4,b=y[2]-a[2];b>180?b-=360:b<-180&&(b+=360),(H(a)||H(y))&&(b=0);let at=(((H(a)&&!H(y)?y[2]:a[2])+b*r)%360+360)%360;return W(a[0]+(y[0]-a[0])*r,a[1]+(y[1]-a[1])*r,at,a[3]+(y[3]-a[3])*r)},O=t=>{if(l.length<=2)return;let o=l.indexOf(t);if(o<0)return;l.splice(o,1);let s=n===t?l[Math.max(0,o-1)]:n;c(),M(s,!0),C(),w(),A(n)?.focus()},T=t=>{let o={color:st(t),pos:f(t,0,1)};return l.push(o),c(),M(o,!0),C(),w(),o},lt=()=>{let t=k(),o=t.indexOf(n);o<0&&(o=0);let s=o<t.length-1?(t[o].pos+t[o+1].pos)/2:o>0?(t[o-1].pos+t[o].pos)/2:f(t[o].pos+.1,0,1);T(s)};return v.addEventListener("click",t=>{t.stopPropagation(),lt()}),L.addEventListener("dblclick",t=>{t.target.closest(".tw-gradient-stop")||(t.preventDefault(),T(rt(t.clientX)))}),S.tabIndex=-1,S.addEventListener("keydown",t=>{(t.key==="Delete"||t.key==="Backspace")&&!t.altKey&&!/^(input|textarea|select)$/i.test(t.target.tagName)&&l.length>2&&(t.preventDefault(),O(n))}),X(m,p,S,{width:260,fallbackH:392,gap:6,onOpen:h.reflow,onReflow:h.reflow,initialFocus:()=>A(n)}),$(),c(),C(),{el:m,set:t=>{let o=Z(t);o&&h.setMode(D(o));let s=tt(t).sort((e,r)=>e.pos-r.pos);if(s.length===l.length)k().forEach((e,r)=>{e.color=s[r].color,e.pos=s[r].pos;let a=A(e);a&&(a.style.left=e.pos*100+"%",a.style.setProperty("--stop",e.color))});else{let e=n.pos;l=s,n=l.reduce((r,a)=>Math.abs(a.pos-e)<Math.abs(r.pos-e)?a:r,l[0]),$()}c(),C(),h.set(n.color)},get:()=>K()}}Y("gradient",pt);
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i,j}from"./chunk-36ETNTXF.js";import"./chunk-NGLZEK5U.js";export{c as accentColor,g as boxFrac,b as cssVar,e as dragGesture,h as fitCanvas,f as grabSurface,j as numField,d as selectAllOnFocus,a as svgEl,i as triggerRow};
@@ -1 +0,0 @@
1
- import{e as P}from"./chunk-36ETNTXF.js";import{S as G,b as r,d as j,e as H,f as X,h as z,i as A,j as I,o as f,q as K,s as T,t as q,v as B}from"./chunk-NGLZEK5U.js";function U(a,V){let C=a.label,w=+(a.value&&a.value[0]),x=+(a.value&&a.value[1]),{min:n,max:l,step:h}=z(a.min,a.max,a.step,Number.isFinite(w)?w:0,Number.isFinite(x)?x:1);[n,l]=X(n,l,h);let E=j(h),b=t=>H(t,n,h),i=r(b(Number.isFinite(w)?w:n),n,l),s=r(b(Number.isFinite(x)?x:l),n,l);if(i>s){let t=i;i=s,s=t}let p=f("div","tw-slider-wrap"),d=f("div","tw-slider tw-interval"),L=f("div","tw-slider-fill"),c=f("div","tw-slider-handle"),u=f("div","tw-slider-handle"),F=K("span","tw-slider-label",C),y=f("span","tw-slider-value");d.append(L,c,u,F,y),p.append(d),[["minimum",c],["maximum",u]].forEach(([t,e])=>{e.tabIndex=0,e.setAttribute("role","slider"),e.setAttribute("aria-label",`${C} ${t}`),e.setAttribute("aria-valuemin",String(n)),e.setAttribute("aria-valuemax",String(l))});let M=t=>(t-n)/(l-n||1)*100,N=t=>`clamp(5px, calc(${t}% - 1.5px), calc(100% - 9px))`,m=()=>{let t=M(i),e=M(s);L.style.left=t+"%",L.style.width=Math.max(0,e-t)+"%",c.style.left=N(t),u.style.left=N(e),y.textContent=`${i.toFixed(E)} \u2013 ${s.toFixed(E)}`,c.setAttribute("aria-valuenow",String(i)),u.setAttribute("aria-valuenow",String(s));let o=p.offsetWidth;if(o){F.style.maxWidth=Math.max(0,o-y.offsetWidth-12-8-10)+"px";let R=Q=>I(F,y,Q/100*o-1.5,3);c.classList.toggle("is-dodge",R(M(i))),u.classList.toggle("is-dodge",R(M(s)))}};m();let S=()=>V([i,s]),W=t=>{i=r(Math.min(b(t),s),n,l),m()},k=t=>{s=r(Math.max(b(t),i),n,l),m()},v=null,$=1,g=null,J=t=>{let e=p.offsetWidth||v.width,o=r((t-v.left)/$/e,0,1);return r(n+o*(l-n),n,l)},D=t=>{let e=J(t);g||(g=e<i?"lo":e>s?"hi":Math.abs(e-i)<=Math.abs(e-s)?"lo":"hi"),g==="lo"?W(e):k(e),S()};P(d,{onDown:t=>{t.preventDefault(),v=p.getBoundingClientRect(),$=v.width/(p.offsetWidth||v.width),d.classList.add("is-active","is-dragging"),g=null,D(t.clientX),(g==="lo"?c:u).focus({focusVisible:!1})},onMove:t=>D(t.clientX),onEnd:()=>{v=null,g=null,d.classList.remove("is-active","is-dragging")}}),B(d,m),T(m),q(d,[[window,"resize"],[window,"tw-reflow"]],m);let O=t=>e=>{let o=t==="lo"?A(e,i,h,n,s):A(e,s,h,i,l);o!=null&&(e.preventDefault(),t==="lo"?W(o):k(o),S())};return c.addEventListener("keydown",O("lo")),u.addEventListener("keydown",O("hi")),{el:p,set:t=>{if(Array.isArray(t)){let e=+t[0],o=+t[1];if(!Number.isFinite(e)||!Number.isFinite(o))return;i=r(b(Math.min(e,o)),n,l),s=r(b(Math.max(e,o)),n,l),m()}},get:()=>[i,s]}}G("interval",U);
@@ -1,2 +0,0 @@
1
- import{a as k}from"./chunk-36ETNTXF.js";import{S as D,b as H,o as N,q as T,s as $,t as Y,w as Z}from"./chunk-NGLZEK5U.js";var V=Object.assign(Object.create(null),{sin:Math.sin,cos:Math.cos,tan:Math.tan,asin:Math.asin,acos:Math.acos,atan:Math.atan,atan2:Math.atan2,sinh:Math.sinh,cosh:Math.cosh,tanh:Math.tanh,sqrt:Math.sqrt,cbrt:Math.cbrt,abs:Math.abs,exp:Math.exp,log:Math.log,ln:Math.log,log10:Math.log10,log2:Math.log2,floor:Math.floor,ceil:Math.ceil,round:Math.round,sign:Math.sign,trunc:Math.trunc,min:Math.min,max:Math.max,pow:Math.pow,hypot:Math.hypot,mod:(i,f)=>i%f,clamp:(i,f,r)=>Math.min(Math.max(i,f),r)}),G=Object.assign(Object.create(null),{pi:Math.PI,e:Math.E,tau:Math.PI*2,phi:(1+Math.sqrt(5))/2});function S(i){if(typeof i!="string"||!i.trim()||i.length>512)return null;let f=i,r=[],c=/\d*\.?\d+(?:[eE][+-]?\d+)?/y,x=/[A-Za-z_]\w*/y,a=0;for(;a<f.length;){let t=f[a];if(t===" "||t===" "||t===`
2
- `){a++;continue}if(t>="0"&&t<="9"||t==="."&&f[a+1]>="0"&&f[a+1]<="9"){c.lastIndex=a;let n=c.exec(f);if(!n||n.index!==a)return null;r.push({t:"num",v:parseFloat(n[0])}),a=c.lastIndex;continue}if(t>="A"&&t<="Z"||t>="a"&&t<="z"||t==="_"){x.lastIndex=a;let n=x.exec(f);r.push({t:"id",v:n[0]}),a=x.lastIndex;continue}if(t==="*"&&f[a+1]==="*"){r.push({t:"op",v:"^"}),a+=2;continue}if("+-*/%^".includes(t)){r.push({t:"op",v:t}),a++;continue}if(t==="("){r.push({t:"lp"}),a++;continue}if(t===")"){r.push({t:"rp"}),a++;continue}if(t===","){r.push({t:"comma"}),a++;continue}return null}if(!r.length)return null;let d=0,e=()=>r[d],p=t=>{let n=r[d];return!n||t&&n.t!==t?null:(d++,n)},b=()=>{let t=v();if(!t)return null;for(;e()&&e().t==="op"&&(e().v==="+"||e().v==="-");){let n=p("op").v,o=v();if(!o)return null;let u=t;t=n==="+"?s=>u(s)+o(s):s=>u(s)-o(s)}return t},v=()=>{let t=m();if(!t)return null;for(;e()&&e().t==="op"&&(e().v==="*"||e().v==="/"||e().v==="%");){let n=p("op").v,o=m();if(!o)return null;let u=t;t=n==="*"?s=>u(s)*o(s):n==="/"?s=>u(s)/o(s):s=>u(s)%o(s)}return t},m=()=>{if(e()&&e().t==="op"&&(e().v==="-"||e().v==="+")){let t=p("op").v,n=m();return n?t==="-"?o=>-n(o):n:null}return F()},F=()=>{let t=L();if(!t)return null;if(e()&&e().t==="op"&&e().v==="^"){p("op");let n=m();return n?o=>Math.pow(t(o),n(o)):null}return t},L=()=>{let t=e();if(!t)return null;if(t.t==="num")return p("num"),()=>t.v;if(t.t==="lp"){p("lp");let n=b();return!n||!p("rp")?null:n}if(t.t==="id"){p("id");let n=t.v.toLowerCase();if(e()&&e().t==="lp"){let o=V[n];if(!o)return null;p("lp");let u=[];if(e()&&e().t!=="rp")do{let s=b();if(!s)return null;u.push(s)}while(p("comma"));return p("rp")?s=>o(...u.map(g=>g(s))):null}if(n==="x")return o=>o;if(n in G){let o=G[n];return()=>o}return null}return null},w=b();return w&&d===r.length?w:null}function W(i,f){let r=Number(i.xMin),c=Number(i.xMax);if(Number.isFinite(r)||(r=-10),Number.isFinite(c)||(c=10),c<r){let u=r;r=c,c=u}c===r&&(r-=1,c+=1);let x=Math.max(2,Math.min(4096,i.samples|0||256)),a=Number.isFinite(i.yMin)&&Number.isFinite(i.yMax)&&+i.yMax>+i.yMin,d=i.editable!==!1&&!i.fn,e=i.expr!=null?String(i.expr):"",p=typeof i.fn=="function"?i.fn:S(e),b=N("div","tw-plot");i.label&&b.append(T("div","tw-plot-label",i.label));let v=N("div","tw-plot-graph"),m=k("svg","tw-plot-svg");m.setAttribute("preserveAspectRatio","none");let F=k("line","tw-plot-axis"),L=k("line","tw-plot-axis"),w=k("path","tw-plot-curve");m.append(F,L,w),v.append(m),b.append(v);let t=null;if(d){let u=N("div","tw-plot-field");t=N("input","tw-plot-input"),t.type="text",t.value=e,t.spellcheck=!1,t.autocapitalize="off",t.autocomplete="off",Z(t),t.setAttribute("aria-label",`${i.label||"Plot"} \u2014 expression in x`),t.setAttribute("aria-invalid","false"),u.append(T("span","tw-plot-fx","y ="),t),b.append(u)}let n=6,o=()=>{let u=typeof p=="function";b.classList.toggle("is-invalid",d&&!u),t&&t.setAttribute("aria-invalid",d&&!u?"true":"false");let s=v.getBoundingClientRect(),g=s.width,C=s.height;if(g<2)return;m.setAttribute("viewBox",`0 0 ${g} ${C}`);let q=[],M=1/0,E=-1/0;if(u)for(let l=0;l<x;l++){let y=r+(c-r)*(l/(x-1)),h;try{h=p(y)}catch{h=NaN}q.push(h),Number.isFinite(h)&&(h<M&&(M=h),h>E&&(E=h))}let A=i.yMin,I=i.yMax;if(!a)if(!Number.isFinite(M)||M===E){let l=Number.isFinite(M)?M:0;A=l-1,I=l+1}else{let l=(E-M)*.12;A=M-l,I=E+l}let O=l=>n+(l-r)/(c-r)*(g-2*n),P=l=>C-n-(l-A)/(I-A)*(C-2*n),z=(l,y,h,R,U,_)=>{l.style.display=_?"":"none",_&&(l.setAttribute("x1",y),l.setAttribute("y1",h),l.setAttribute("x2",R),l.setAttribute("y2",U))};z(F,n,P(0),g-n,P(0),A<=0&&I>=0),z(L,O(0),n,O(0),C-n,r<=0&&c>=0);let B="",j=!1;if(u)for(let l=0;l<x;l++){let y=q[l];if(!Number.isFinite(y)){j=!1;continue}let h=O(r+(c-r)*(l/(x-1))),R=H(P(y),-1e4,1e4);B+=(j?"L":"M")+h.toFixed(1)+","+R.toFixed(1)+" ",j=!0}w.setAttribute("d",B)};return d&&t.addEventListener("input",()=>{e=t.value,p=S(e),o(),f(e)}),$(o),Y(b,[[window,"resize"],[window,"tw-reflow"]],o),{el:b,get:()=>e,set:u=>{u!=null&&(e=String(u),t&&(t.value=e),i.fn||(p=S(e)),o())}}}D("plot",W);export{S as compileExpr};
@@ -1 +0,0 @@
1
- import{b as te,c as se,e as ie,j as U}from"./chunk-36ETNTXF.js";import{P as ee,S as ne,b as _,o as R,q as B,s as Z,t as $}from"./chunk-NGLZEK5U.js";function ue(c,A,D,g=64){let n=Math.sqrt(c/D),l=A/(2*Math.sqrt(c*D)),V=Math.min(2.2,9/Math.max(l*n,.5)),x=[];for(let b=0;b<g;b++){let d=b/(g-1)*V,h;if(l<1-1e-4){let a=n*Math.sqrt(1-l*l);h=1-Math.exp(-l*n*d)*(Math.cos(a*d)+l*n/a*Math.sin(a*d))}else if(l<=1+1e-4)h=1-Math.exp(-n*d)*(1+n*d);else{let a=Math.sqrt(l*l-1),r=n*(l+a),i=n*(l-a);h=1-(r*Math.exp(-i*d)-i*Math.exp(-r*d))/(r-i)}x.push(h)}return x}function ce(c,A){let D=(e,t,s)=>Number.isFinite(+e)?Math.max(t,+e):s,g=e=>({stiffness:D(e.stiffness,1,300),damping:D(e.damping,.5,26),mass:D(e.mass,.1,1)}),n=e=>Number.isFinite(+e),x=e=>_(n(e)?+e:.5,.1,1),b=e=>_(n(e)?+e:.2,0,1),d=e=>{let t=(2*Math.PI/e.visualDuration)**2,s=1-e.bounce,u=1;return{stiffness:t,damping:2*s*Math.sqrt(t*u),mass:u}},h=e=>e==="time"||e==="physics"?e:null,a={stiffness:c.stiffness,damping:c.damping,mass:c.mass,visualDuration:c.visualDuration,bounce:c.bounce,...c.value||{}},r=h(a.mode)??h(c.mode)??(n(a.visualDuration)||n(a.bounce)?"time":"physics"),i={visualDuration:x(a.visualDuration),bounce:b(a.bounce)},m=g({stiffness:a.stiffness,damping:a.damping,mass:a.mass}),T=R("div","tw-spring"),M=R("div","tw-spring-viz"),w=document.createElement("canvas");w.className="tw-spring-canvas",M.append(w);let I=R("div","tw-fields"),X=R("div","tw-fields"),o=w.getContext("2d"),O=()=>g(r==="time"?d(i):m),p=()=>{let e=M.getBoundingClientRect(),t=Math.max(1,Math.round(e.width)),s=Math.max(1,Math.round(e.height));if(t<2)return;let u=window.devicePixelRatio||1;w.width=t*u,w.height=s*u,o.setTransform(u,0,0,u,0,0),o.clearRect(0,0,t,s);let E=O(),q=ue(E.stiffness,E.damping,E.mass,Math.max(160,Math.round(t*u))),re=Math.max(1.05,...q),P=8,Q=S=>P+S/(q.length-1)*(t-2*P),F=S=>s-P-S/re*(s-2*P);o.strokeStyle=te(T,"--tw-surface-active")||"rgba(255,255,255,0.1)",o.lineWidth=1,o.beginPath(),o.moveTo(P,F(1)),o.lineTo(t-P,F(1)),o.stroke(),o.strokeStyle=se(T),o.lineWidth=1.5,o.lineJoin=o.lineCap="round",o.beginPath(),q.forEach((S,j)=>j?o.lineTo(Q(j),F(S)):o.moveTo(Q(j),F(S))),o.stroke()},L=()=>r==="time"?{...O(),visualDuration:i.visualDuration,bounce:i.bounce}:O(),k=()=>A(L()),f={};[["stiffness","Stiffness",1],["damping","Damping",.5],["mass","Mass",.1]].forEach(([e,t,s])=>{f[e]=U({label:t,value:m[e],step:s,min:s},u=>{m[e]=u,p(),k()}),I.append(f[e].el)});let C=U({label:"Duration",value:i.visualDuration,step:.05,min:.1,max:1},e=>{i.visualDuration=x(e),p(),k()}),N=U({label:"Bounce",value:i.bounce,step:.05,min:0,max:1},e=>{i.bounce=b(e),p(),k()});X.append(C.el,N.el);let z=()=>{X.style.display=r==="time"?"":"none",I.style.display=r==="physics"?"":"none"},K=ee([{value:"time",label:"Time"},{value:"physics",label:"Physics"}],r,e=>{e!=="time"&&e!=="physics"||e===r||(r=e,z(),p(),k())},"Spring mode"),W=R("div","tw-row");W.append(B("span","tw-row-label","Mode"),K.el),c.label&&T.append(B("div","tw-spring-label",c.label)),T.append(M,W,I,X);let Y=1,oe=500,G=1,ae=40,y=null,J=e=>{if(!y)return;let t=_((e.clientX-y.left)/y.width,0,1),s=_((e.clientY-y.top)/y.height,0,1);r==="time"?(C.set(.1+t*(1-.1)),i.visualDuration=C.get(),N.set(1-s),i.bounce=N.get()):(f.stiffness.set(Y+t*(oe-Y)),m.stiffness=f.stiffness.get(),f.damping.set(G+s*(ae-G)),m.damping=f.damping.get()),p(),k()};ie(M,{onDown:e=>{e.preventDefault(),y=M.getBoundingClientRect(),M.classList.add("is-dragging"),J(e)},onMove:J,onEnd:()=>{y=null,M.classList.remove("is-dragging")}}),z(),Z(p),$(w,[[window,"resize"],[window,"tw-reflow"],[matchMedia("(prefers-color-scheme: dark)"),"change"],[window,"tw-retheme"]],p);let v=null,H=!1;return typeof MutationObserver=="function"&&(v=new MutationObserver(()=>{w.isConnected?(H=!0,p()):H&&(v.disconnect(),v=null)}),v.observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-tw-scheme"]})),{el:T,destroy:()=>{v&&(v.disconnect(),v=null)},set:e=>{if(!e||typeof e!="object")return;let t=h(e.mode),s=n(e.visualDuration)||n(e.bounce),u=n(e.stiffness)||n(e.damping)||n(e.mass);!s&&!u&&!t||(r=t??(s?"time":"physics"),s&&(n(e.visualDuration)&&(i.visualDuration=x(e.visualDuration)),n(e.bounce)&&(i.bounce=b(e.bounce))),u&&(m=g({...m,...e})),K.set(r),C.set(i.visualDuration),N.set(i.bounce),f.stiffness.set(m.stiffness),f.damping.set(m.damping),f.mass.set(m.mass),z(),p())},get:()=>L()}}ne("spring",ce);
@@ -1 +0,0 @@
1
- import{I as f,O as g,S as w,o as s,q as v,s as m}from"./chunk-NGLZEK5U.js";var A=0;function x(E){let o=`tw-tabs-${++A}`,c=s("div","tw-tabs"),r=s("div","tw-tabs-bar");r.setAttribute("role","tablist");let l=s("div","tw-tabs-pill");r.append(l);let u=s("div","tw-tabs-pages"),d=[],i=E.pages.map((a,e)=>{let t=v("button","tw-tabs-tab",a.title);t.setAttribute("role","tab"),t.dataset.active=String(e===0),t.setAttribute("aria-selected",String(e===0)),t.tabIndex=e===0?0:-1,t.id=`${o}-tab-${e}`,t.setAttribute("aria-controls",`${o}-page-${e}`);let n=s("div","tw-tabs-page tw-controls");return n.dataset.active=String(e===0),n.setAttribute("role","tabpanel"),n.id=`${o}-page-${e}`,n.setAttribute("aria-labelledby",t.id),d.push(n),u.append(n),t.addEventListener("click",()=>b(e)),r.append(t),t});c.append(r,u);let p=a=>f(r,l,a);function b(a){i.forEach((e,t)=>{e.dataset.active=String(t===a),e.setAttribute("aria-selected",String(t===a)),e.tabIndex=t===a?0:-1}),d.forEach((e,t)=>e.dataset.active=String(t===a)),p(!0),requestAnimationFrame(()=>window.dispatchEvent(new Event("tw-reflow")))}return r.addEventListener("keydown",a=>{let e=i.findIndex(n=>n.dataset.active==="true");if(e<0)return;let t=g(a.key,e,i.length,-1);t<0||(a.preventDefault(),b(t),i[t].focus())}),m(p),{el:c,bodies:d,activate:b,active:()=>i.findIndex(a=>a.dataset.active==="true")}}w("tabs",x);