tweakit 0.5.2 → 0.6.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.
Files changed (111) hide show
  1. package/AGENTS.md +31 -29
  2. package/README.md +55 -29
  3. package/THIRD-PARTY-NOTICES.md +0 -1
  4. package/dist/tweaks/auto.js +2 -0
  5. package/dist/tweaks/auto.js.map +6 -0
  6. package/dist/tweaks/bezier-JFEZMCLP.js +2 -0
  7. package/dist/tweaks/bezier-JFEZMCLP.js.map +6 -0
  8. package/dist/tweaks/chunk-6UO4DHBN.js +2 -0
  9. package/dist/tweaks/chunk-6UO4DHBN.js.map +6 -0
  10. package/dist/tweaks/chunk-DIQMLBAS.js +2 -0
  11. package/dist/tweaks/chunk-DIQMLBAS.js.map +6 -0
  12. package/dist/tweaks/chunk-XE6OUJBG.js +2 -0
  13. package/dist/tweaks/chunk-XE6OUJBG.js.map +6 -0
  14. package/dist/tweaks/clip-WW7JYO4X.js +2 -0
  15. package/dist/tweaks/clip-WW7JYO4X.js.map +6 -0
  16. package/dist/tweaks/color-YMMFURP6.js +2 -0
  17. package/dist/tweaks/color-YMMFURP6.js.map +6 -0
  18. package/dist/tweaks/core.js +2 -1
  19. package/dist/tweaks/core.js.map +6 -0
  20. package/dist/tweaks/{fold-UGN7TXGX.js → fold-U6YRZLCJ.js} +2 -1
  21. package/dist/tweaks/fold-U6YRZLCJ.js.map +6 -0
  22. package/dist/tweaks/gradient-JER7PW4D.js +2 -0
  23. package/dist/tweaks/gradient-JER7PW4D.js.map +6 -0
  24. package/dist/tweaks/heavy-CLD7UAVI.js +2 -0
  25. package/dist/tweaks/heavy-CLD7UAVI.js.map +6 -0
  26. package/dist/tweaks/image-H6QSLGO3.js +4 -0
  27. package/dist/tweaks/image-H6QSLGO3.js.map +6 -0
  28. package/dist/tweaks/image-store-WRKY2NPU.js +2 -0
  29. package/dist/tweaks/image-store-WRKY2NPU.js.map +6 -0
  30. package/dist/tweaks/interval-TEUHQGZN.js +2 -0
  31. package/dist/tweaks/interval-TEUHQGZN.js.map +6 -0
  32. package/dist/tweaks/markup-NIBJD6E2.js +2 -0
  33. package/dist/tweaks/markup-NIBJD6E2.js.map +6 -0
  34. package/dist/tweaks/monitor-3BY7YCGX.js +3 -0
  35. package/dist/tweaks/monitor-3BY7YCGX.js.map +6 -0
  36. package/dist/tweaks/motion-FQPUBKKM.js +2 -0
  37. package/dist/tweaks/motion-FQPUBKKM.js.map +6 -0
  38. package/dist/tweaks/plot-2HBNBZSG.js +3 -0
  39. package/dist/tweaks/plot-2HBNBZSG.js.map +6 -0
  40. package/dist/tweaks/point-VV6XV3I6.js +2 -0
  41. package/dist/tweaks/point-VV6XV3I6.js.map +6 -0
  42. package/dist/tweaks/shadow-5E4E55I2.js +2 -0
  43. package/dist/tweaks/shadow-5E4E55I2.js.map +6 -0
  44. package/dist/tweaks/sides-P3STEVYY.js +2 -0
  45. package/dist/tweaks/sides-P3STEVYY.js.map +6 -0
  46. package/dist/tweaks/spring-HUVSXNVN.js +2 -0
  47. package/dist/tweaks/spring-HUVSXNVN.js.map +6 -0
  48. package/dist/tweaks/tabs-76FW7LQ7.js +2 -0
  49. package/dist/tweaks/tabs-76FW7LQ7.js.map +6 -0
  50. package/dist/tweaks.css +1 -1
  51. package/dist/tweaks.js +6 -3
  52. package/dist/tweaks.js.map +6 -0
  53. package/dist/types/tweaks/easing.d.ts +8 -11
  54. package/dist/types/tweaks/panel.d.ts +6 -4
  55. package/dist/types/tweaks/schema.d.ts +4 -8
  56. package/dist/types/tweaks/standalone.d.ts +3 -3
  57. package/dist/types/tweaks/types.d.ts +278 -101
  58. package/package.json +27 -5
  59. package/src/tweaks/auto.ts +12 -0
  60. package/src/tweaks/clip.ts +94 -0
  61. package/src/tweaks/controls/basic.ts +403 -0
  62. package/src/tweaks/controls/bezier.ts +99 -0
  63. package/src/tweaks/controls/color.ts +412 -0
  64. package/src/tweaks/controls/gradient.ts +240 -0
  65. package/src/tweaks/controls/image.ts +299 -0
  66. package/src/tweaks/controls/interval.ts +104 -0
  67. package/src/tweaks/controls/monitor.ts +105 -0
  68. package/src/tweaks/controls/motion.ts +141 -0
  69. package/src/tweaks/controls/plot.ts +220 -0
  70. package/src/tweaks/controls/point.ts +119 -0
  71. package/src/tweaks/controls/shadow.ts +83 -0
  72. package/src/tweaks/controls/sides.ts +86 -0
  73. package/src/tweaks/controls/spring.ts +148 -0
  74. package/src/tweaks/controls/tabs.ts +47 -0
  75. package/src/tweaks/core.ts +9 -0
  76. package/src/tweaks/easing.ts +93 -0
  77. package/src/tweaks/enhance.ts +20 -0
  78. package/src/tweaks/feedback.ts +119 -0
  79. package/src/tweaks/fold.ts +21 -0
  80. package/src/tweaks/heavy.ts +302 -0
  81. package/src/tweaks/icons.ts +19 -0
  82. package/src/tweaks/image-store.ts +101 -0
  83. package/src/tweaks/lazy.ts +46 -0
  84. package/src/tweaks/markup.ts +154 -0
  85. package/src/tweaks/panel.ts +869 -0
  86. package/src/tweaks/schema.ts +189 -0
  87. package/src/tweaks/shared.ts +525 -0
  88. package/src/tweaks/single.ts +22 -0
  89. package/src/tweaks/standalone.ts +89 -0
  90. package/src/tweaks/types.ts +526 -0
  91. package/src/tweaks.css +959 -0
  92. package/src/wide-gamut.ts +310 -0
  93. package/dist/tweaks/bezier-2RABC6LD.js +0 -1
  94. package/dist/tweaks/chunk-4ATI34PB.js +0 -1
  95. package/dist/tweaks/chunk-7OSCMZ2J.js +0 -1
  96. package/dist/tweaks/chunk-W3JNIJ2F.js +0 -1
  97. package/dist/tweaks/clip-ECGCECEC.js +0 -1
  98. package/dist/tweaks/colour-2RE3FQ5E.js +0 -1
  99. package/dist/tweaks/gradient-DB6XTDHO.js +0 -1
  100. package/dist/tweaks/heavy-PKOMHB3C.js +0 -1
  101. package/dist/tweaks/image-7MCLBOZ3.js +0 -1
  102. package/dist/tweaks/interval-L2E4L3AZ.js +0 -1
  103. package/dist/tweaks/markup-ZJJ6CCWM.js +0 -1
  104. package/dist/tweaks/monitor-IEK742PG.js +0 -2
  105. package/dist/tweaks/motion-N5UNVR55.js +0 -1
  106. package/dist/tweaks/plot-VVTOY3RA.js +0 -2
  107. package/dist/tweaks/point-YMMHSLO7.js +0 -1
  108. package/dist/tweaks/shadow-IKYOV3VN.js +0 -1
  109. package/dist/tweaks/sides-FH227Z54.js +0 -1
  110. package/dist/tweaks/spring-3PKAFIH7.js +0 -1
  111. package/dist/tweaks/tabs-BKK5NIIY.js +0 -1
@@ -0,0 +1,310 @@
1
+ /* Wide-gamut color engine and mode model for the OKLCH color picker: CSS Color 4
2
+ * conversions hubbed through CIE XYZ, gamut mapping, and the channel/mode tables. */
3
+ import type { ColorMode, GradientInterpolation } from "./tweaks/types.js";
4
+
5
+ /** Three channels in some space — RGB, XYZ, OKLab/OKLCH, Lab/LCH, HSL/HWB. */
6
+ export type Vec3 = [number, number, number];
7
+ type Mat3 = [Vec3, Vec3, Vec3];
8
+ /** The spaces convert() hubs between, through CIE XYZ. */
9
+ export type Space = "srgb" | "p3" | "rec2020" | "prophoto-rgb" | "a98-rgb" | "srgb-linear" | "xyz-d65" | "xyz-d50" | "oklab" | "oklch" | "lab" | "lch" | "hsl" | "hwb";
10
+ /** The RGB gamuts a color can be mapped into. */
11
+ export type Gamut = "srgb" | "p3" | "rec2020";
12
+ /** One editable channel of a mode: label, display range and step, engine-to-display scale. */
13
+ export interface Channel { k: string; min: number; max: number; step: number; scale: number }
14
+
15
+ const DEG = 180 / Math.PI;
16
+ const RAD = Math.PI / 180;
17
+ const mul = (m: Mat3, v: Vec3): Vec3 => [
18
+ m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2],
19
+ m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2],
20
+ m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2],
21
+ ];
22
+ const mulMat = (a: Mat3, b: Mat3): Mat3 => {
23
+ const o: Mat3 = [[0, 0, 0], [0, 0, 0], [0, 0, 0]];
24
+ for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) o[i][j] = a[i][0] * b[0][j] + a[i][1] * b[1][j] + a[i][2] * b[2][j];
25
+ return o;
26
+ };
27
+ // Non-finite channels (null, NaN, ±Infinity) fall to 0; an infinite chroma would hang toGamut's bisection.
28
+ export const num = (x: number) => (Number.isFinite(x) ? x : 0);
29
+ const clamp = (x: number, lo: number, hi: number) => Math.min(hi, Math.max(lo, x));
30
+
31
+ // ── transfer functions ──
32
+ const srgbLin = (c: number) => { const a = Math.abs(c); return a <= 0.04045 ? c / 12.92 : Math.sign(c) * ((a + 0.055) / 1.055) ** 2.4; };
33
+ const srgbGam = (c: number) => { const a = Math.abs(c); return a <= 0.0031308 ? c * 12.92 : Math.sign(c) * (1.055 * a ** (1 / 2.4) - 0.055); };
34
+ const REC_A = 1.09929682680944, REC_B = 0.018053968510807; // BT.2020 piecewise OETF constants, not a pure gamma
35
+ const rec2020Lin = (c: number) => { const a = Math.abs(c); return a < REC_B * 4.5 ? c / 4.5 : Math.sign(c) * ((a + REC_A - 1) / REC_A) ** (1 / 0.45); };
36
+ const rec2020Gam = (c: number) => { const a = Math.abs(c); return a < REC_B ? c * 4.5 : Math.sign(c) * (REC_A * a ** 0.45 - (REC_A - 1)); };
37
+ const PRO_ET = 1 / 512;
38
+ const prophotoLin = (c: number) => { const a = Math.abs(c); return a <= PRO_ET * 16 ? c / 16 : Math.sign(c) * a ** 1.8; };
39
+ const prophotoGam = (c: number) => { const a = Math.abs(c); return a >= PRO_ET ? Math.sign(c) * a ** (1 / 1.8) : 16 * c; };
40
+
41
+ // ── matrices (D65 unless noted) ──
42
+ const LIN_SRGB_TO_XYZ: Mat3 = [[0.41239079926595934, 0.357584339383878, 0.1804807884018343], [0.21263900587151027, 0.715168678767756, 0.07219231536073371], [0.01933081871559182, 0.11919477979462598, 0.9505321522496607]];
43
+ const XYZ_TO_LIN_SRGB: Mat3 = [[3.2409699419045226, -1.537383177570094, -0.4986107602930034], [-0.9692436362808796, 1.8759675015077202, 0.04155505740717559], [0.05563007969699366, -0.20397695888897652, 1.0569715142428786]];
44
+ const LIN_P3_TO_XYZ: Mat3 = [[0.4865709486482162, 0.26566769316909306, 0.19821728523436247], [0.2289745640697488, 0.6917385218365064, 0.079286914093745], [0, 0.04511338185890264, 1.043944368900976]];
45
+ const XYZ_TO_LIN_P3: Mat3 = [[2.493496911941425, -0.9313836179191239, -0.40271078445071684], [-0.8294889695615747, 1.7626640603183463, 0.023624685841943577], [0.03584583024378447, -0.07617238926804182, 0.9568845240076872]];
46
+ const LIN_REC2020_TO_XYZ: Mat3 = [[0.6369580483012914, 0.14461690358620832, 0.16888097516417205], [0.2627002120112671, 0.6779980715188708, 0.05930171646986196], [0, 0.028072693049087428, 1.060985057710791]];
47
+ const XYZ_TO_LIN_REC2020: Mat3 = [[1.7166511879712674, -0.35567078377639233, -0.25336628137365974], [-0.6666843518324892, 1.6164812366349395, 0.01576854581391113], [0.017639857445310783, -0.042770613257808524, 0.9421031212354738]];
48
+ const LIN_PRO_TO_XYZ_D50: Mat3 = [[0.7977604896723027, 0.13518583717574031, 0.0313493495815248], [0.2880711282292934, 0.7118432178101014, 0.00008565396060525902], [0, 0, 0.8251046025104601]];
49
+ const XYZ_D50_TO_LIN_PRO: Mat3 = [[1.3457989731028281, -0.25558010007997534, -0.05110628506753401], [-0.5446224939028347, 1.5082327413132781, 0.02053603239147973], [0, 0, 1.2119675456389454]];
50
+ // CSS Color 4's a98-rgb (Adobe RGB 1998): a pure 563/256 gamma over these primaries, D65.
51
+ const A98_GAMMA = 563 / 256, a98Lin = (c: number) => Math.sign(c) * Math.abs(c) ** A98_GAMMA, a98Gam = (c: number) => Math.sign(c) * Math.abs(c) ** (1 / A98_GAMMA);
52
+ const LIN_A98_TO_XYZ: Mat3 = [[573536 / 994567, 263643 / 1420810, 187206 / 994567], [591459 / 1989134, 6239551 / 9945670, 374412 / 4972835], [53769 / 1989134, 351524 / 4972835, 4929758 / 4972835]];
53
+ const XYZ_TO_LIN_A98: Mat3 = [[1829569 / 896150, -506331 / 896150, -308931 / 896150], [-851781 / 878810, 1648619 / 878810, 36519 / 878810], [16779 / 1248040, -147721 / 1248040, 1266979 / 1248040]];
54
+ const same = (c: number) => c;
55
+ const XYZ_D65_TO_D50: Mat3 = [[1.0479298208405488, 0.022946793341019088, -0.05019222954313557], [0.029627815688159344, 0.990434484573249, -0.01707382502938514], [-0.009243058152591178, 0.015055144896577895, 0.7518742899580008]];
56
+ const XYZ_D50_TO_D65: Mat3 = [[0.9554734527042182, -0.023098536874261423, 0.0632593086610217], [-0.028369706963208136, 1.0099954580058226, 0.021041398966943008], [0.012314001688319899, -0.020507696433477912, 1.3303659366080753]];
57
+ const XYZ_TO_LMS: Mat3 = [[0.819022437996703, 0.3619062600528904, -0.1288737815209879], [0.0329836539323885, 0.9292868615863434, 0.0361446663506424], [0.0481771893596242, 0.2642395317527308, 0.6335478284694309]];
58
+ const LMS_TO_XYZ: Mat3 = [[1.2268798758459243, -0.5578149944602171, 0.2813910456659647], [-0.0405757452148008, 1.112286803280317, -0.0717110580655164], [-0.0763729366746601, -0.4214933324022432, 1.5869240198367816]];
59
+ const LMS_TO_OKLAB: Mat3 = [[0.210454268309314, 0.7936177747023054, -0.0040720430116193], [1.9779985324311684, -2.42859224204858, 0.450593709617411], [0.0259040424655478, 0.7827717124575296, -0.8086757549230774]];
60
+ const OKLAB_TO_LMS: Mat3 = [[1.0, 0.3963377773761749, 0.2158037573099136], [1.0, -0.1055613458156586, -0.0638541728258133], [1.0, -0.0894841775298119, -1.2914855480194092]];
61
+ const LAB_E = 216 / 24389, LAB_K = 24389 / 27;
62
+ const WHITE_D50: Vec3 = [0.3457 / 0.3585, 1.0, (1.0 - 0.3457 - 0.3585) / 0.3585];
63
+
64
+ const rgbToXyz = (c: Vec3, lin: (c: number) => number, m: Mat3) => mul(m, [lin(c[0]), lin(c[1]), lin(c[2])]);
65
+ const xyzToRgb = (xyz: Vec3, gam: (c: number) => number, m: Mat3): Vec3 => { const l = mul(m, xyz); return [gam(l[0]), gam(l[1]), gam(l[2])]; };
66
+ const oklabToXyz = (lab: Vec3) => { const p = mul(OKLAB_TO_LMS, lab); return mul(LMS_TO_XYZ, [p[0] ** 3, p[1] ** 3, p[2] ** 3]); };
67
+ const xyzToOklab = (xyz: Vec3) => { const lms = mul(XYZ_TO_LMS, xyz); return mul(LMS_TO_OKLAB, [Math.cbrt(lms[0]), Math.cbrt(lms[1]), Math.cbrt(lms[2])]); };
68
+ function labToXyz(lab: Vec3): Vec3 {
69
+ const [L, a, b] = lab; const fy = (L + 16) / 116, fx = a / 500 + fy, fz = fy - b / 200;
70
+ const x = fx ** 3 > LAB_E ? fx ** 3 : (116 * fx - 16) / LAB_K;
71
+ const y = L > LAB_K * LAB_E ? fy ** 3 : L / LAB_K;
72
+ const z = fz ** 3 > LAB_E ? fz ** 3 : (116 * fz - 16) / LAB_K;
73
+ return mul(XYZ_D50_TO_D65, [x * WHITE_D50[0], y * WHITE_D50[1], z * WHITE_D50[2]]);
74
+ }
75
+ function xyzToLab(xyz: Vec3): Vec3 {
76
+ const d50 = mul(XYZ_D65_TO_D50, xyz); const f = (t: number) => (t > LAB_E ? Math.cbrt(t) : (LAB_K * t + 16) / 116);
77
+ const fx = f(d50[0] / WHITE_D50[0]), fy = f(d50[1] / WHITE_D50[1]), fz = f(d50[2] / WHITE_D50[2]);
78
+ return [116 * fy - 16, 500 * (fx - fy), 200 * (fy - fz)];
79
+ }
80
+ const toPolar = (r: Vec3): Vec3 => { const C = Math.hypot(r[1], r[2]); let h = Math.atan2(r[2], r[1]) * DEG; if (h < 0) h += 360; return [r[0], C, h]; };
81
+ const toRect = (p: Vec3): Vec3 => [p[0], p[1] * Math.cos(p[2] * RAD), p[1] * Math.sin(p[2] * RAD)];
82
+ function hslToSrgb(hsl: Vec3): Vec3 {
83
+ const h = (((Number.isNaN(hsl[0]) ? 0 : hsl[0]) % 360) + 360) % 360, s = hsl[1] / 100, l = hsl[2] / 100;
84
+ const f = (n: number) => { const k = (n + h / 30) % 12, a = s * Math.min(l, 1 - l); return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1)); };
85
+ return [f(0), f(8), f(4)];
86
+ }
87
+ function srgbHue(rgb: Vec3) {
88
+ const max = Math.max(...rgb), min = Math.min(...rgb), d = max - min;
89
+ if (d < 1e-9) return NaN; // a gray; the hue would be float noise
90
+ let h: number; if (max === rgb[0]) h = (rgb[1] - rgb[2]) / d + (rgb[1] < rgb[2] ? 6 : 0); else if (max === rgb[1]) h = (rgb[2] - rgb[0]) / d + 2; else h = (rgb[0] - rgb[1]) / d + 4;
91
+ return h * 60;
92
+ }
93
+ function srgbToHsl(rgb: Vec3): Vec3 {
94
+ const max = Math.max(...rgb), min = Math.min(...rgb), l = (min + max) / 2;
95
+ let h = srgbHue(rgb), s = max === min || l === 0 || l === 1 ? 0 : (max - l) / Math.min(l, 1 - l);
96
+ if (s < 0) { h += 180; s = -s; } if (h >= 360) h -= 360;
97
+ return [h, s * 100, l * 100];
98
+ }
99
+ function hwbToSrgb(hwb: Vec3): Vec3 {
100
+ const w = hwb[1] / 100, b = hwb[2] / 100; if (w + b >= 1) { const g = w / (w + b); return [g, g, g]; }
101
+ const rgb = hslToSrgb([hwb[0], 100, 50]), scale = 1 - w - b; return [rgb[0] * scale + w, rgb[1] * scale + w, rgb[2] * scale + w];
102
+ }
103
+ const srgbToHwb = (rgb: Vec3): Vec3 => [srgbHue(rgb), Math.min(...rgb) * 100, (1 - Math.max(...rgb)) * 100];
104
+
105
+ function toXyz(c: Vec3, space: Space): Vec3 {
106
+ switch (space) {
107
+ case "srgb": return rgbToXyz(c, srgbLin, LIN_SRGB_TO_XYZ);
108
+ case "p3": return rgbToXyz(c, srgbLin, LIN_P3_TO_XYZ);
109
+ case "rec2020": return rgbToXyz(c, rec2020Lin, LIN_REC2020_TO_XYZ);
110
+ case "prophoto-rgb": return mul(XYZ_D50_TO_D65, rgbToXyz(c, prophotoLin, LIN_PRO_TO_XYZ_D50));
111
+ case "a98-rgb": return rgbToXyz(c, a98Lin, LIN_A98_TO_XYZ);
112
+ case "srgb-linear": return mul(LIN_SRGB_TO_XYZ, c);
113
+ case "xyz-d65": return [c[0], c[1], c[2]];
114
+ case "xyz-d50": return mul(XYZ_D50_TO_D65, c);
115
+ case "oklab": return oklabToXyz(c);
116
+ case "oklch": return oklabToXyz(toRect(c));
117
+ case "lab": return labToXyz(c);
118
+ case "lch": return labToXyz(toRect(c));
119
+ case "hsl": return rgbToXyz(hslToSrgb(c), srgbLin, LIN_SRGB_TO_XYZ);
120
+ case "hwb": return rgbToXyz(hwbToSrgb(c), srgbLin, LIN_SRGB_TO_XYZ);
121
+ }
122
+ }
123
+ function fromXyz(xyz: Vec3, space: Space): Vec3 {
124
+ switch (space) {
125
+ case "srgb": return xyzToRgb(xyz, srgbGam, XYZ_TO_LIN_SRGB);
126
+ case "p3": return xyzToRgb(xyz, srgbGam, XYZ_TO_LIN_P3);
127
+ case "rec2020": return xyzToRgb(xyz, rec2020Gam, XYZ_TO_LIN_REC2020);
128
+ case "prophoto-rgb": return xyzToRgb(mul(XYZ_D65_TO_D50, xyz), prophotoGam, XYZ_D50_TO_LIN_PRO);
129
+ case "a98-rgb": return xyzToRgb(xyz, a98Gam, XYZ_TO_LIN_A98);
130
+ case "srgb-linear": return xyzToRgb(xyz, same, XYZ_TO_LIN_SRGB);
131
+ case "xyz-d65": return [xyz[0], xyz[1], xyz[2]];
132
+ case "xyz-d50": return mul(XYZ_D65_TO_D50, xyz);
133
+ case "oklab": return xyzToOklab(xyz);
134
+ case "oklch": return toPolar(xyzToOklab(xyz));
135
+ case "lab": return xyzToLab(xyz);
136
+ case "lch": return toPolar(xyzToLab(xyz));
137
+ case "hsl": return srgbToHsl(xyzToRgb(xyz, srgbGam, XYZ_TO_LIN_SRGB));
138
+ case "hwb": return srgbToHwb(xyzToRgb(xyz, srgbGam, XYZ_TO_LIN_SRGB));
139
+ }
140
+ }
141
+ export function convert(coords: Vec3, from: Space, to: Space): Vec3 {
142
+ if (from === to) return [coords[0], coords[1], coords[2]];
143
+ if (from === "oklch" && to === "oklab") return toRect(coords);
144
+ if (from === "oklab" && to === "oklch") return toPolar(coords);
145
+ if (from === "lch" && to === "lab") return toRect(coords);
146
+ if (from === "lab" && to === "lch") return toPolar(coords);
147
+ return fromXyz(toXyz(coords, from), to);
148
+ }
149
+
150
+ // ── gamut ──
151
+ const SLACK = 0.000075;
152
+ const inRange = (rgb: Vec3) => rgb.every((c) => c >= -SLACK && c <= 1 + SLACK);
153
+ const inGamut = (oklch: Vec3, gamut: Gamut) => inRange(convert(oklch, "oklch", gamut));
154
+ const clip = (rgb: Vec3) => rgb.map((c) => Math.min(1, Math.max(0, c))) as Vec3; // map() on a tuple reads back as an array
155
+ const deltaEOK = (a: Vec3, b: Vec3) => Math.hypot(a[0] - b[0], a[1] - b[1], a[2] - b[2]);
156
+ /** Map OKLCH into an RGB gamut (CSS Color 4 chroma reduction + local clip). */
157
+ export function toGamut(oklch: Vec3, dest: Gamut): Vec3 {
158
+ if (inGamut(oklch, dest)) return convert(oklch, "oklch", dest);
159
+ const L = oklch[0]; if (L >= 1) return [1, 1, 1]; if (L <= 0) return [0, 0, 0];
160
+ // An unbounded chroma can't be bisected; fall to the achromatic color at this lightness.
161
+ if (!Number.isFinite(oklch[1])) return clip(convert([L, 0, num(oklch[2])], "oklch", dest));
162
+ const JND = 0.02, EPS = 0.0001; const cur: Vec3 = [oklch[0], oklch[1], oklch[2]];
163
+ let min = 0, max = oklch[1], minIn = true, clipped = clip(convert(cur, "oklch", dest));
164
+ if (deltaEOK(convert(clipped, dest, "oklab"), convert(oklch, "oklch", "oklab")) < JND) return clipped;
165
+ while (max - min > EPS) {
166
+ const chroma = (min + max) / 2; cur[1] = chroma; const inDest = convert(cur, "oklch", dest);
167
+ if (minIn && inRange(inDest)) { min = chroma; continue; }
168
+ clipped = clip(inDest); const e = deltaEOK(convert(clipped, dest, "oklab"), convert(cur, "oklch", "oklab"));
169
+ if (e < JND) { if (JND - e < EPS) return clipped; minIn = false; min = chroma; } else max = chroma;
170
+ }
171
+ return clipped;
172
+ }
173
+ // At a fixed hue OKLab→LMS collapses to p_i = L + C·d_i and LMS→XYZ→RGB to one matrix F, so the
174
+ // two per-pixel helpers run trig- and allocation-free; identical to convert([L,C,hue], "oklch", gamut).
175
+ const hueFold = (hue: number, gamut: Gamut) => {
176
+ const h = hue * RAD, cos = Math.cos(h), sin = Math.sin(h);
177
+ const d = OKLAB_TO_LMS.map((row) => cos * row[1] + sin * row[2]);
178
+ const F = mulMat(gamut === "p3" ? XYZ_TO_LIN_P3 : gamut === "rec2020" ? XYZ_TO_LIN_REC2020 : XYZ_TO_LIN_SRGB, LMS_TO_XYZ);
179
+ return { d, F, gam: gamut === "rec2020" ? rec2020Gam : srgbGam };
180
+ };
181
+ /** OKLCH→RGB at a fixed hue for per-pixel rasterizing; `(L, C, out)` writes into `out`. */
182
+ export function oklchToRgbFn(hue: number, gamut: Gamut) {
183
+ const { d: [d0, d1, d2], F, gam } = hueFold(hue, gamut);
184
+ return (L: number, C: number, out: number[]) => {
185
+ const p0 = L + C * d0, p1 = L + C * d1, p2 = L + C * d2, c0 = p0 ** 3, c1 = p1 ** 3, c2 = p2 ** 3;
186
+ out[0] = gam(F[0][0] * c0 + F[0][1] * c1 + F[0][2] * c2);
187
+ out[1] = gam(F[1][0] * c0 + F[1][1] * c1 + F[1][2] * c2);
188
+ out[2] = gam(F[2][0] * c0 + F[2][1] * c1 + F[2][2] * c2);
189
+ };
190
+ }
191
+ /** Fast in-gamut probe at a fixed hue: `(L, C) => inside?`. */
192
+ export function oklchGamutProbe(hue: number, gamut: Gamut) {
193
+ const toRgb = oklchToRgbFn(hue, gamut), rgb = [0, 0, 0], lo = -SLACK, hi = 1 + SLACK, inside = (v: number) => v >= lo && v <= hi;
194
+ return (L: number, C: number) => { toRgb(L, C, rgb); return rgb.every(inside); };
195
+ }
196
+ /** Bisect the chroma ceiling (highest in-gamut C) at lightness L for an `oklchGamutProbe`. */
197
+ export function chromaCeil(probe: (L: number, C: number) => boolean, L: number, hi = 0.5) {
198
+ if (!probe(L, 0)) return 0;
199
+ let lo = 0; for (let k = 0; k < 16; k++) { const m = (lo + hi) / 2; probe(L, m) ? (lo = m) : (hi = m); }
200
+ return lo;
201
+ }
202
+
203
+ // ── hex ──
204
+ /** One 0–1 channel → a 2-digit hex byte (also the alpha suffix for #RRGGBBAA), upper-case as the readout shows it. */
205
+ export const hexByte = (n: number) => Math.round(Math.min(1, Math.max(0, n)) * 255).toString(16).padStart(2, "0").toUpperCase();
206
+ const rgbToHex = (rgb: Vec3) => `#${hexByte(rgb[0])}${hexByte(rgb[1])}${hexByte(rgb[2])}`;
207
+ export const oklchToHex = (L: number, C: number, H: number) => rgbToHex(toGamut([L, C, H], "srgb"));
208
+ export function hexToOklch(hex: string): Vec3 {
209
+ let h = String(hex).replace("#", "").trim();
210
+ if (h.length === 3) h = h.split("").map((c) => c + c).join("");
211
+ if (h.length < 6) return [0.7, 0.1, 280];
212
+ const rgb: Vec3 = [parseInt(h.slice(0, 2), 16) / 255, parseInt(h.slice(2, 4), 16) / 255, parseInt(h.slice(4, 6), 16) / 255];
213
+ return convert(rgb, "srgb", "oklch").map(num) as Vec3;
214
+ }
215
+
216
+ // ── mode model ──
217
+ export const EDIT_MODES: readonly ColorMode[] = ["hex", "srgb", "css", "hsl", "hwb", "oklch", "oklab", "lch", "lab", "p3", "rec2020"];
218
+ export const MODE_LABELS: Record<ColorMode, string> = { hex: "HEX", srgb: "RGB", css: "CSS", hsl: "HSL", hwb: "HWB", oklch: "OKLCH", oklab: "OKLab", lch: "LCH", lab: "Lab", p3: "P3", rec2020: "Rec2020" };
219
+ const SRGB_BOUND: readonly ColorMode[] = ["srgb", "css", "hsl", "hwb", "hex"];
220
+ export const showsGamutBoundary = (mode: ColorMode) => !SRGB_BOUND.includes(mode);
221
+ const modeSpaceId = (mode: ColorMode): Space => (mode === "hex" || mode === "css" ? "srgb" : mode);
222
+ // The CSS <color-interpolation-method> a gradient authored in each mode blends through.
223
+ // Null-prototype, so a mode named "constructor" misses and falls to the default.
224
+ const MODE_INTERP: Record<string, GradientInterpolation> = 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" });
225
+ export const modeInterpolation = (mode: string) => MODE_INTERP[mode] || "oklch";
226
+ // The reverse: the mode that produced a stored gradient's blend; unknown falls to OKLCH.
227
+ const INTERP_MODE: Record<string, ColorMode> = Object.assign(Object.create(null), { srgb: "srgb", hsl: "hsl", hwb: "hwb", oklch: "oklch", oklab: "oklab", lch: "lch", lab: "lab", "display-p3": "p3", rec2020: "rec2020" });
228
+ export const interpolationMode = (interp: string) => INTERP_MODE[interp] || "oklch";
229
+ /** The picker's chroma ceiling: the C field's max and the parser's cap on any chroma it reads. */
230
+ export const MAX_CHROMA = 0.5;
231
+ // Each triple is shared by two modes and frozen, so a one-mode tweak can't leak into its twin.
232
+ const rgbTriple = (max: number, step: number, scale: number): readonly Channel[] => Object.freeze(["R", "G", "B"].map((k) => Object.freeze({ k, min: 0, max, step, scale })));
233
+ const RGB_255 = rgbTriple(255, 1, 255), RGB_UNIT = rgbTriple(1, 0.01, 1);
234
+ export const MODE_CHANNELS: Partial<Record<ColorMode, readonly Channel[]>> = {
235
+ oklch: [{ k: "L", min: 0, max: 100, step: 1, scale: 100 }, { k: "C", min: 0, max: MAX_CHROMA, step: 0.01, scale: 1 }, { k: "H", min: 0, max: 360, step: 1, scale: 1 }],
236
+ oklab: [{ k: "L", min: 0, max: 100, step: 1, scale: 100 }, { k: "a", min: -0.4, max: 0.4, step: 0.01, scale: 1 }, { k: "b", min: -0.4, max: 0.4, step: 0.01, scale: 1 }],
237
+ 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 }],
238
+ 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 }],
239
+ srgb: RGB_255, css: RGB_255,
240
+ 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 }],
241
+ 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 }],
242
+ p3: RGB_UNIT, rec2020: RGB_UNIT,
243
+ };
244
+ const digitsFor = (step: number) => (step >= 1 ? 0 : step >= 0.1 ? 1 : step >= 0.01 ? 2 : 3);
245
+
246
+ // Display coords for `mode` from canonical OKLCH. sRGB-bound modes read off the same
247
+ // chroma-reduced sRGB hex uses, so every narrow-gamut mode agrees on the color.
248
+ const modeCoords = (oklch: Vec3, sid: Space, mode: ColorMode): Vec3 =>
249
+ sid === "oklch" ? [oklch[0], oklch[1], oklch[2]]
250
+ : SRGB_BOUND.includes(mode) ? (sid === "srgb" ? toGamut(oklch, "srgb") : convert(toGamut(oklch, "srgb"), "srgb", sid))
251
+ : convert(oklch, "oklch", sid);
252
+ /** Display-unit channel values for `mode` from canonical OKLCH. */
253
+ export function channelValues(oklch: Vec3, mode: ColorMode) {
254
+ const c = modeCoords(oklch, modeSpaceId(mode), mode);
255
+ return MODE_CHANNELS[mode].map((ch, i) => { const v = num(c[i]) * ch.scale; return clamp(Math.abs(v) < 0.5 * ch.step ? 0 : v, ch.min, ch.max); });
256
+ }
257
+ /** New OKLCH with channel `index` of `mode` set to `displayValue`. */
258
+ export function withChannel(oklch: Vec3, mode: ColorMode, index: number, displayValue: number): Vec3 {
259
+ const sid = modeSpaceId(mode);
260
+ const c = modeCoords(oklch, sid, mode).map(num) as Vec3;
261
+ c[index] = displayValue / MODE_CHANNELS[mode][index].scale;
262
+ const k = convert(c, sid, "oklch");
263
+ return [num(k[0]), num(k[1]), num(k[2])];
264
+ }
265
+ /** Plain-text gamut label: sRGB / P3 / wide. */
266
+ export function gamutLabel(oklch: Vec3, mode: ColorMode) {
267
+ if (!showsGamutBoundary(mode)) return "sRGB";
268
+ const shown = toGamut(oklch, "srgb");
269
+ if (Math.max(...shown) < 0.03 || Math.min(...shown) > 0.97) return "sRGB";
270
+ if (inGamut(oklch, "srgb")) return "sRGB";
271
+ if (inGamut(oklch, "p3")) return "P3";
272
+ return "wide";
273
+ }
274
+ // The three channels in `mode`'s own syntax: commas for legacy css, a % on lightness or on the last two of hsl/hwb.
275
+ const joinChannels = (mode: ColorMode, s: (i: number) => string) =>
276
+ mode === "css" ? `${s(0)}, ${s(1)}, ${s(2)}`
277
+ : mode === "oklch" || mode === "oklab" || mode === "lch" || mode === "lab" ? `${s(0)}% ${s(1)} ${s(2)}`
278
+ : mode === "hsl" || mode === "hwb" ? `${s(0)} ${s(1)}% ${s(2)}%`
279
+ : `${s(0)} ${s(1)} ${s(2)}`; // srgb / p3 / rec2020
280
+ /** The collapsed-row value string for `mode` (bare channels w/ units, or hex). */
281
+ export function readout(oklch: Vec3, mode: ColorMode) {
282
+ if (mode === "hex") return oklchToHex(oklch[0], oklch[1], oklch[2]);
283
+ const chans = MODE_CHANNELS[mode], v = channelValues(oklch, mode);
284
+ return joinChannels(mode, (i) => { const t = v[i].toFixed(digitsFor(chans[i].step)); return chans[i].k === "H" && +t === 360 ? (0).toFixed(digitsFor(chans[i].step)) : t; }); // 360 is 0; only 0 reads back as itself
285
+ }
286
+ // css is legacy comma rgba with an explicit alpha slot; the rest take modern space syntax.
287
+ const wrapCss = (t: string, mode: ColorMode) =>
288
+ mode === "hex" ? t : mode === "srgb" ? `rgb(${t})` : mode === "css" ? `rgba(${t}, 1)` :
289
+ mode === "hsl" ? `hsl(${t})` : mode === "hwb" ? `hwb(${t})` :
290
+ mode === "p3" ? `color(display-p3 ${t})` : mode === "rec2020" ? `color(rec2020 ${t})` : `${mode}(${t})`;
291
+ // The value's channels, a digit finer than the readout (L 63.2%, C 0.257, H 29.2): rounded to the readout, 98% of colors came
292
+ // back different (#939796's faint green read as a neutral gray). A powerless hue is `none`, as CSS Color 4 writes it: a
293
+ // float-noise hue on white (180, cyan) or a gray bent every oklch gradient and color-mix() through it. HSL's black and
294
+ // white are written S 0 and hue none: S divides by min(L, 1 - L), so next to either end it read noise as 100% and a hue.
295
+ function precise(oklch: Vec3, mode: ColorMode) {
296
+ const chans = MODE_CHANNELS[mode], c = modeCoords(oklch, modeSpaceId(mode), mode);
297
+ const v = chans.map((ch, i) => { const d = digitsFor(ch.step) + 1, x = +clamp(num(c[i]) * ch.scale, ch.min, ch.max).toFixed(d); return ch.k === "H" && x === 360 ? 0 : x + 0; }); // + 0: no -0
298
+ if (mode === "hsl" && (v[2] === 0 || v[2] === 100)) v[1] = 0;
299
+ const gray = mode === "oklch" || mode === "lch" || mode === "hsl" ? v[1] === 0 : mode === "hwb" && v[1] + v[2] >= 100;
300
+ return joinChannels(mode, (i) => (gray && chans[i].k === "H" ? "none" : String(v[i])));
301
+ }
302
+ /** The emitted CSS value in `mode`'s own syntax, a digit finer than the readout, alpha appended. */
303
+ export function serialize(oklch: Vec3, mode: ColorMode, alpha: number) {
304
+ const a = num(alpha);
305
+ if (mode === "hex") return oklchToHex(oklch[0], oklch[1], oklch[2]) + (a < 0.999 ? hexByte(a) : "");
306
+ const t = precise(oklch, mode);
307
+ if (a >= 0.999) return wrapCss(t, mode);
308
+ const av = +a.toFixed(3);
309
+ return mode === "css" ? `rgba(${t}, ${av})` : wrapCss(`${t} / ${av}`, mode); // comma alpha for legacy rgba, slash otherwise
310
+ }
@@ -1 +0,0 @@
1
- import{a as f,e as J,j as Q}from"./chunk-4ATI34PB.js";import{$ as q,g as A,u as M,v as N,w as I,y as K,z as U}from"./chunk-7OSCMZ2J.js";function ee(v,$){let R=[.25,.1,.25,1],b=-.25,w=1.25,H=w-b,o=8,Y=e=>e.map((n,i)=>A(n,i%2?b:0,i%2?w:1)),t=Array.isArray(v.value)&&v.value.length===4?v.value.map(Number):R.slice();t.some(e=>!Number.isFinite(e))&&(t=R.slice()),t=Y(t);let Z=t.slice(),E=M("div","tw-bezier");v.label&&E.append(I("div","tw-bezier-label",v.label));let d=M("div","tw-bezier-graph"),k=f("svg","tw-bezier-svg");k.setAttribute("preserveAspectRatio","none");let G=f("line","tw-bezier-guide"),P=f("line","tw-bezier-guide"),X=f("line","tw-bezier-diag"),j=f("line","tw-bezier-ctl"),O=f("line","tw-bezier-ctl"),S=f("path","tw-bezier-curve");k.append(G,P,X,j,O,S);let g=N("tw-bezier-handle");g.setAttribute("aria-label","Control point 1");let x=N("tw-bezier-handle");x.setAttribute("aria-label","Control point 2"),d.append(k,g,x);let W=M("div","tw-fields tw-bezier-fields");E.append(d,W);let h=0,C=0,F=e=>o+e*(h-2*o),D=e=>C-o-(e-b)/H*(C-2*o),z=(e,n,i,m,a)=>{e.setAttribute("x1",n),e.setAttribute("y1",i),e.setAttribute("x2",m),e.setAttribute("y2",a)},y=()=>{if(g.setAttribute("aria-label",`Control point 1, x ${t[0]}, y ${t[1]}`),x.setAttribute("aria-label",`Control point 2, x ${t[2]}, y ${t[3]}`),h=d.offsetWidth,C=d.offsetHeight,h<2)return;k.setAttribute("viewBox",`0 0 ${h} ${C}`);let[e,n,i,m]=t,a=F(0),c=D(0),r=F(1),l=D(1),u=F(e),p=D(n),s=F(i),B=D(m);z(G,o,c,h-o,c),z(P,o,l,h-o,l),z(X,a,c,r,l),z(j,a,c,u,p),z(O,r,l,s,B),S.setAttribute("d",`M${a},${c} C${u},${p} ${s},${B} ${r},${l}`),g.style.left=u+"px",g.style.top=p+"px",x.style.left=s+"px",x.style.top=B+"px"},T=[{label:"X1",i:0,lo:0,hi:1},{label:"Y1",i:1,lo:b,hi:w},{label:"X2",i:2,lo:0,hi:1},{label:"Y2",i:3,lo:b,hi:w}],_=T.map(e=>{let n=Q({label:e.label,value:t[e.i],step:.01,min:e.lo,max:e.hi},i=>{t[e.i]=i,y(),$(t.slice())});return W.append(n.el),n}),L=()=>_.forEach((e,n)=>e.set(t[T[n].i])),V=(e,n)=>{let i=null,m=0,a=0,c=1;J(e,{onDown:r=>{r.preventDefault(),i=d.getBoundingClientRect(),m=d.offsetWidth||i.width,a=d.offsetHeight||i.height,c=i.width/m,e.classList.add("is-dragging"),e.focus({focusVisible:!1})},onMove:r=>{let l=(r.clientX-i.left)/c,u=(r.clientY-i.top)/c,p=A((l-o)/(m-2*o),0,1),s=A(b+(a-o-u)/(a-2*o)*H,b,w);t[n*2]=+p.toFixed(2),t[n*2+1]=+s.toFixed(2),y(),L(),$(t.slice())},onEnd:()=>{i=null,e.classList.remove("is-dragging")}}),e.addEventListener("keydown",r=>{if(r.key==="Escape")return e.blur();if(r.key==="Home"){r.preventDefault(),t=Z.slice(),y(),L(),$(t.slice());return}let l=r.key==="ArrowRight"?1:r.key==="ArrowLeft"?-1:0,u=r.key==="ArrowUp"?1:r.key==="ArrowDown"?-1:0;if(!l&&!u)return;r.preventDefault();let p=r.shiftKey?.1:.01,s=n*2;l&&(t[s]=+A(t[s]+l*p,0,1).toFixed(2)),u&&(t[s+1]=+A(t[s+1]+u*p,b,w).toFixed(2)),y(),L(),$(t.slice())})};return V(g,0),V(x,1),K(y),U(E,[[window,"resize"],[window,"tw-reflow"]],y),{el:E,set:e=>{if(Array.isArray(e)&&e.length===4){let n=e.map(Number);if(n.some(i=>!Number.isFinite(i)))return;t=Y(n),y(),L()}},get:()=>t.slice()}}q("cubicbezier",ee);
@@ -1 +0,0 @@
1
- import{$ as P,C as T,D as S,I as $,Z as I,g as E,j as L,k as N,l as F,u as g,v as C,w as M}from"./chunk-7OSCMZ2J.js";var D="http://www.w3.org/2000/svg",k=(t,n)=>{let e=document.createElementNS(D,t);return n&&e.setAttribute("class",n),e},V=(t,n)=>getComputedStyle(t).getPropertyValue(n).trim(),B=t=>{let n=getComputedStyle(t),e=s=>n.getPropertyValue(s).trim();return e("--tw-accent")||e("--tw-text-primary")||"#fff"},O=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 H(t,{onDown:n,onMove:e,onEnd:s}={}){let r=null,o=i=>{r===null||i.pointerId!==r||(r=null,s&&s(i))};t.addEventListener("pointerdown",i=>{if(!(i.button!==0||r!==null)){r=i.pointerId;try{t.setPointerCapture(i.pointerId)}catch{}n&&n(i)}}),t.addEventListener("pointermove",i=>{if(i.pointerId===r){if(i.buttons===0)return o(i);e&&e(i)}}),t.addEventListener("pointerup",o),t.addEventListener("pointercancel",o),t.addEventListener("lostpointercapture",o)}var j=(t,n)=>H(t,{onDown:e=>{t.classList.add("is-grabbing"),n(e)},onMove:n,onEnd:()=>t.classList.remove("is-grabbing")}),z=(t,n)=>{let e=n.getBoundingClientRect();return[E((t.clientX-e.left)/e.width,0,1),E((t.clientY-e.top)/e.height,0,1)]},U=(t,n,e=1/0)=>{let s=t.getBoundingClientRect(),r=Math.min(window.devicePixelRatio||1,e);return t.width=s.width*r,t.height=s.height*r,n.setTransform(r,0,0,r,0,0),[s.width,s.height]},Y=(t,n)=>{let e=g("div",t),s=C("tw-trigger");s.setAttribute("aria-expanded","false");let r=g("span","tw-trigger-right");return s.append(M("span","tw-trigger-label",n),r),e.append(s),{root:e,trigger:s,right:r}},G=I('<path d="M6 4v8M10 4v8"/>',"",2,16);function X(){let t=null,n=0,e=0,s=0;return{show(r,o,i,m){t=g("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=o,e=r,s=i??r,t.children[1].style.cssText=`left:${r}px;top:${n}px`,$(t,m),document.body.appendChild(t)},move(r,o){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:${s}px;top:${n-16}px`,t.children[3].textContent=o)},hide(){t&&(t.remove(),t=null)}}}function R(t,n,e,s,r,o){let i=0,m=0,p=1,d=X();H(t,{onDown:u=>{u.preventDefault(),i=u.clientX,m=s(),p=1,t.classList.add("is-dragging");let a=n.getBoundingClientRect();d.show(u.clientX,a.top+a.height/2,a.left+a.width/2,n),d.move(u.clientX,o())},onMove:u=>{let a=u.shiftKey?10:u.altKey?.1:1;a!==p&&(p=a,i=u.clientX,m=s()),r(m+(u.clientX-i)*e*a),d.move(u.clientX,o())},onEnd:()=>{t.classList.remove("is-dragging"),d.hide()}})}function q(t,n){let e=Number.isFinite(+t.step)&&+t.step>0?+t.step:1,s=l=>l==null?NaN:+l,r=s(t.min),o=s(t.max);if(Number.isFinite(r)&&Number.isFinite(o)&&o<r){let l=r;r=o,o=l}let i=Number.isFinite(r)?r:0,m=L(e),[p,d]=F(Number.isFinite(r)?r:-1/0,Number.isFinite(o)?o:1/0,e,i),u=l=>{let h=N(l,i,e);return t.soft?h:E(h,p,d)},a=u(Number.isFinite(+t.value)?+t.value:0),f=g("div",t.row?"tw-row":"tw-field"),b=g("div","tw-num-wrap"),v=g("span","tw-num-grab",G);v.setAttribute("aria-hidden","true"),v.title="Drag to adjust";let c=g("input","tw-num");c.type="text",c.inputMode="decimal",c.setAttribute("aria-label",t.unit?`${t.label} (${t.unit})`:t.label),c.value=a.toFixed(m),T(c),b.append(v,c),t.unit&&b.append(M("span","tw-num-unit",t.unit)),f.append(M("span",t.row?"tw-row-label":"tw-field-label",t.label),b);let w=(l,h=!0)=>{l=+l,Number.isFinite(l)&&(a=u(l),c.value=a.toFixed(m),h&&n&&n(a))},x=()=>Number(c.value.replace(t.unit||"","").trim()||NaN);return c.addEventListener("change",()=>{let l=x();Number.isFinite(l)&&u(l)!==a?w(l):c.value=a.toFixed(m)}),S(c,()=>a.toFixed(m)),c.addEventListener("keydown",l=>{if(l.key==="Enter")return c.blur();let h=l.key==="ArrowUp"?1:l.key==="ArrowDown"?-1:0;if(!h)return;l.preventDefault();let y=x();w((Number.isFinite(y)?y:a)+h*e*(l.shiftKey?10:1))}),R(v,b,e,()=>a,w,()=>c.value),{el:f,set:l=>w(l,!1),get:()=>a}}P("number",(t,n)=>q({...t,row:!0},n));var A=(t,n,e)=>{let s=Math.sqrt(t/e),r=n/(2*Math.sqrt(t*e));return Math.min(2.2,9/Math.max(r*s,.5))};function _(t,n,e,s=64,r=A(t,n,e)){let o=Math.sqrt(t/e),i=n/(2*Math.sqrt(t*e)),m=[];for(let p=0;p<s;p++){let d=p/(s-1)*r,u;if(i<1-1e-4){let a=o*Math.sqrt(1-i*i);u=1-Math.exp(-i*o*d)*(Math.cos(a*d)+i*o/a*Math.sin(a*d))}else if(i<=1+1e-4)u=1-Math.exp(-o*d)*(1+o*d);else{let a=Math.sqrt(i*i-1),f=o*(i+a),b=o*(i-a);u=1-(f*Math.exp(-b*d)-b*Math.exp(-f*d))/(f-b)}m.push(u)}return m}export{k as a,V as b,B as c,O as d,H as e,j as f,z as g,U as h,Y as i,q as j,A as k,_ as l};
@@ -1 +0,0 @@
1
- var G=Object.assign(Object.create(null),{ease:[.25,.1,.25,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]}),k=e=>Math.min(1,Math.max(0,e)),P=15;function U(e){if(typeof e!="string")return null;let n=e.trim().toLowerCase();if(G[n])return G[n];let t=/^cubic-bezier\(([^()]*)\)$/.exec(n);if(!t)return null;let r=t[1].split(",").map(o=>o.trim()?Number(o):NaN);return r.length!==4||!r.every(Number.isFinite)?null:[k(r[0]),r[1],k(r[2]),r[3]]}var Oe=e=>U(e)?e.trim().toLowerCase():"linear";function q(e){let n=[];for(let t=0;t<=P;t++){let r=t/P,o=1-r,i=3*o*o*r,a=3*o*r*r,s=r*r*r;n.push([i*e[0]+a*e[2]+s,k(i*e[1]+a*e[3]+s)])}return n}function Ne(e,n){if(n=k(n),!e)return n;let t=q(e);for(let r=1;r<t.length;r++)if(n<=t[r][0]){let[o,i]=t[r-1],[a,s]=t[r];return a>o?i+(s-i)*(n-o)/(a-o):s}return 1}var F=e=>+(e*100).toFixed(2);function X(e){let n=[...e.stops].sort((s,c)=>s.pos-c.pos),t=s=>`${s.color} ${F(s.pos)}%`,r=U(e.easing);if(!r||n.length<2)return n.map(t).join(", ");let o=q(r),i=e.interpolation||"oklch",a=[t(n[0])];for(let s=1;s<n.length;s++){let c=n[s-1],w=n[s],u=w.pos-c.pos;if(u>1e-6)for(let f=1;f<P;f++){let[m,p]=o[f];a.push(`color-mix(in ${i}, ${c.color}, ${w.color} ${F(p)}%) ${F(c.pos+u*m)}%`)}a.push(t(w))}return a.join(", ")}function ae(e,n="to right"){return`linear-gradient(in ${e.interpolation||"oklch"} ${typeof n=="number"?`${n}deg`:n}, ${X(e)})`}var le=e=>e.replace(/([a-z])(?=[A-Z])|([A-Z\d])(?=[A-Z][a-z])/g,"$1$2 ").replace(/^./,n=>n.toUpperCase()).trim(),B=(e,n,t)=>Math.min(t,Math.max(n,e)),$e=e=>!!e&&typeof e=="object",Ve=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())),Y=20,ce=e=>{let n=String(e),t=/e-(\d+)$/i.exec(n);if(t)return Math.min(Y,Number(t[1])+(n.split("e")[0].split(".")[1]||"").length);let r=n.indexOf(".");return r===-1?0:Math.min(Y,n.length-r-1)},ue=(e,n,t)=>{if(!(t>0))return e;let r=ce(t),o=Number((+n).toFixed(r)),i=Math.round((e-o)/t);return Number.isFinite(i)?Number((o+i*t).toFixed(r)):e},je=(e,n,t,r=e)=>{let o=s=>ue(s,r,t),i=Number.isFinite(e)?o(e):-1/0,a=Number.isFinite(n)?o(n):1/0;return i<e&&(i=o(i+t)),a>n&&(a=o(a-t)),i>a?[e,e]:[i,a]},de=(e,n)=>{let t=n-e;return t<=1?.01:t<=10?.1:t<=100?1:10},Ie=(e,n,t,r=0,o=null)=>{let i=+e,a=+n,s=+t;if(Number.isFinite(i)||(i=r),Number.isFinite(a)||(a=o??i+100),a<i){let c=i;i=a,a=c}return(!(s>0)||s>a-i)&&(s=de(i,a)),{min:i,max:a,step:s}},ze=(e,n,t,r,o,i=null)=>{let a=e.shiftKey?10:1;switch(e.key){case"ArrowRight":case"ArrowUp":return n+t*a;case"ArrowLeft":case"ArrowDown":return n-t*a;case"PageUp":return i!=null?n+i:null;case"PageDown":return i!=null?n-i:null;case"Home":return r;case"End":return o}return null},De=(e,n,t,r,o=0)=>{let i=e.offsetLeft,a=i+e.offsetWidth,s=n.offsetLeft,c=s+n.offsetWidth;return t<a&&t+r>i||t<c+o&&t+r>s-o},Ke=e=>e>=0?[0,e<=1?1:e*3||100]:[e>=-1?-1:e*3,0],fe=e=>e==null?void 0:typeof e=="object"?e.value:e,me=e=>{try{return JSON.stringify(e)}catch{return String(e)}},we=e=>e==null?"":typeof e=="string"?le(e):typeof e=="object"?e.label??(e.value!==void 0?String(e.value):me(e)):String(e),A=(e,n,t)=>{let r=document.createElement(e);return n&&(r.className=n),t!=null&&(r.innerHTML=t),(e=="input"||e=="textarea")&&(r.setAttribute("autocomplete","off"),r.setAttribute("data-1p-ignore",""),r.setAttribute("data-lpignore","true")),r},We=(e,n)=>{let t=A("button",e,n);return t.type="button",t},ge=(e,n,t)=>{let r=A(e,n);return r.textContent=t,e==="button"&&(r.type="button"),r},be=e=>["pointerdown","pointermove","pointerup","click"].forEach(n=>e.addEventListener(n,t=>t.stopPropagation())),he=e=>{requestAnimationFrame(e),document.fonts&&document.fonts.ready&&document.fonts.ready.then(e)},pe=(e,n,t)=>{let r=e.isConnected;r||requestAnimationFrame(()=>{e.isConnected&&(r=!0)});let o=a=>{if(!e.isConnected){(r||e.closest("[data-tw-destroyed]"))&&i();return}r=!0,t(a)},i=()=>n.forEach(([a,s])=>a.removeEventListener(s,o));return n.forEach(([a,s])=>a.addEventListener(s,o)),i},Ge=()=>requestAnimationFrame(()=>window.dispatchEvent(new Event("tw-reflow"))),Ue=(e,n)=>{e.addEventListener("pointerenter",()=>{e.classList.add("is-hover"),n&&n()}),e.addEventListener("pointerleave",()=>e.classList.remove("is-hover"))},C=!1;typeof document<"u"&&(document.addEventListener("pointerdown",()=>{C=!0},!0),document.addEventListener("keydown",()=>{C=!1},!0));var qe=e=>{e.addEventListener("focus",()=>e.classList.toggle("tw-focus-quiet",C)),e.addEventListener("blur",()=>e.classList.remove("tw-focus-quiet"))},Xe=(e,n)=>e.addEventListener("keydown",t=>{t.key!=="Escape"||e.value===n()||(t.preventDefault(),t.stopPropagation(),e.value=n())}),ve=(e,n,{width:t,fallbackH:r=300,gap:o=6,align:i="start",prefer:a="below"}={})=>{let s=e.getBoundingClientRect();t==="match"&&(n.style.width=s.width+"px");let c=n.offsetWidth||(t==="match"?s.width:t||0),u=i==="end"||t==="match"&&c>s.width+.5?s.right-c:i==="center"?s.left+s.width/2-c/2:s.left;n.style.left=Math.max(8,Math.min(u,window.innerWidth-c-8))+"px";let f=n.offsetHeight||r,m=window.innerHeight-s.bottom,p=s.top,g=f+12,v=m>=g,E=p>=g,y=a==="above"?E||!v&&p>=m:!v&&(E||p>m),M=y?s.top-f-o:s.bottom+o;n.style.top=B(M,o,window.innerHeight-f-o)+"px",n.dataset.side=y?"above":"below",n.style.setProperty("--tw-pop-h",String(f))},Ee=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",width:"--tw-width"}),ye=new Set(["radius","density","width"]),S=e=>(e/=255,e<=.03928?e/12.92:((e+.055)/1.055)**2.4),Le=e=>{e=String(e).trim();let n=/^#([0-9a-f]{3})$/i.exec(e);if(n)return n[1].split("").map(t=>parseInt(t+t,16));if(n=/^#([0-9a-f]{6})$/i.exec(e),n)return[0,2,4].map(t=>parseInt(n[1].slice(t,t+2),16));if(n=/^rgba?\(([^)]+)\)/i.exec(e),n){let t=n[1].split(/[\s,/]+/).filter(Boolean).map(parseFloat);return[t[0],t[1],t[2]]}return null},Me=e=>{let n=Le(e);if(!n||n.some(r=>!Number.isFinite(r)))return"#ffffff";let t=.2126*S(n[0])+.7152*S(n[1])+.0722*S(n[2]);return 1.05/(t+.05)>=(t+.05)/.0571?"#ffffff":"#161616"},Ye=e=>{if(!e||typeof e!="object")return null;let n={};for(let[t,r]of Object.entries(e)){if(t.startsWith("--")){n[t]=String(r);continue}let o=Ee[t];o&&(n[o]=ye.has(t)&&typeof r=="number"?`${r}px`:String(r))}return n["--tw-accent"]&&!n["--tw-on-accent"]&&(n["--tw-on-accent"]=Me(n["--tw-accent"])),Object.keys(n).length?n:null},Te=(e,n)=>{if(e){if(e._twAppliedVars)for(let t of e._twAppliedVars)e.style.removeProperty(t);if(e._twAppliedVars=n?Object.keys(n):null,n)for(let t in n)e.style.setProperty(t,n[t])}},xe=(e,n)=>{let t=n?.closest('[data-tw-scheme="light"]')?"light":n?.closest('[data-tw-scheme="dark"]')?"dark":null;t?e.setAttribute("data-tw-scheme",t):e.removeAttribute("data-tw-scheme")},Z=(e,n)=>{Te(e,n?.closest(".tw-panel")?._twTheme),xe(e,n)},L=null,O=null,Ce=e=>{L&&(!e||e.contains(O))&&L()};function Ze(e,n,t,r={}){let o=!1,i=null,a,s=!1,c=null,w=()=>n.focus({focusVisible:!s});t.classList.add("tw-portal"),t.inert=!0,t.addEventListener("pointerdown",l=>n.closest(".tw-panel")?._twEditPointer?.(l),!0),be(t);let u=0,f=0,m=!1,p=()=>{t.style.left=B(parseFloat(t.style.left),8,window.innerWidth-t.offsetWidth-8)+"px",t.style.top=B(parseFloat(t.style.top),8,window.innerHeight-t.offsetHeight-8)+"px"},g=()=>{m?p():ve(n,t,{width:r.width??"match",fallbackH:r.fallbackH,gap:r.gap,align:r.align});let l=n.getBoundingClientRect();u=parseFloat(t.style.left)-l.left,f=parseFloat(t.style.top)-l.top};t.addEventListener("pointerdown",l=>{if(l.target!==t||l.button!==0||!o||r.movable===!1)return;l.preventDefault();let d=l.pointerId,V=l.clientX,j=l.clientY,I=parseFloat(t.style.left),z=parseFloat(t.style.top),se=m,R=!1;try{t.setPointerCapture(d)}catch{}let D=h=>{if(h.pointerId===d){if(!R){if(Math.hypot(h.clientX-V,h.clientY-j)<4)return;R=m=!0,t.classList.add("is-moving")}t.style.left=I+h.clientX-V+"px",t.style.top=z+h.clientY-j+"px",g()}},x=h=>{h.pointerId===d&&W()},K=h=>{if(!(h.key!=="Escape"||!R)){h.preventDefault(),h.stopPropagation(),t.style.left=I+"px",t.style.top=z+"px",m=se,g(),W();try{t.releasePointerCapture(d)}catch{}}},W=()=>{t.removeEventListener("pointermove",D),t.removeEventListener("pointerup",x),t.removeEventListener("pointercancel",x),t.removeEventListener("lostpointercapture",x),document.removeEventListener("keydown",K,!0),t.classList.remove("is-moving")};t.addEventListener("pointermove",D),t.addEventListener("pointerup",x),t.addEventListener("pointercancel",x),t.addEventListener("lostpointercapture",x),document.addEventListener("keydown",K,!0)});let v=()=>{if(o){if(!e.isConnected)return b();g(),r.onReflow&&r.onReflow()}},E=()=>{if(!o)return;if(!e.isConnected)return b();let l=n.getBoundingClientRect(),d=n.closest(".tw-panel")?.getBoundingClientRect();if(!(l.width||l.height)||l.bottom<0||l.top>window.innerHeight||l.right<0||l.left>window.innerWidth||d?.height&&(l.bottom<d.top||l.top>d.bottom))return b();t.style.left=l.left+u+"px",t.style.top=l.top+f+"px"},y=l=>{!e.contains(l.target)&&!t.contains(l.target)&&b()},M=l=>{l.key==="Escape"&&o&&!l.defaultPrevented&&(l.preventDefault(),l.stopPropagation(),b(),w())},_=l=>{if(!o)return;let d=l.relatedTarget;!d&&!document.hasFocus()||(d?e.contains(d)||t.contains(d):C)||(b(),d&&!n.closest(".tw-panel")?.contains(d)&&setTimeout(()=>{!o&&document.activeElement===d&&n.focus()},0))};e.addEventListener("focusout",_),t.addEventListener("focusout",_);let oe=()=>t.querySelector('button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [href], [tabindex]:not([tabindex="-1"])'),H=()=>Z(t,e),ie=l=>{l.every(d=>d.target===t)||H()},$=()=>{L&&L!==b&&L(),L=b,O=n,o=!0,e.classList.add("is-open"),n.setAttribute("aria-expanded","true"),clearTimeout(a);let l=t.parentNode===document.body;m=!1,s=C,t.inert=!1,l||document.body.appendChild(t),Z(t,e),window.addEventListener("tw-retheme",H),typeof MutationObserver=="function"&&(i=new MutationObserver(ie),i.observe(document.documentElement,{subtree:!0,attributes:!0,attributeFilter:["data-tw-scheme"]})),l?g():(t.style.transition="none",g(),t.offsetWidth,t.style.transition=""),typeof ResizeObserver=="function"&&(c=new ResizeObserver(()=>{o&&g()}),c.observe(t)),requestAnimationFrame(()=>{if(o&&(t.classList.add("is-open"),r.onOpen&&r.onOpen(),g(),!t.contains(document.activeElement))){let d=r.initialFocus&&r.initialFocus()||oe();d&&d.focus({focusVisible:!C})}}),requestAnimationFrame(function d(){if(o){if(!e.isConnected)return b();requestAnimationFrame(d)}}),setTimeout(()=>{o&&document.addEventListener("pointerdown",y,!0)},0),document.addEventListener("keydown",M),window.addEventListener("scroll",E,!0),window.addEventListener("resize",v)},b=()=>{L===b&&(L=null,O=null),t.contains(document.activeElement)&&w(),o=!1,e.classList.remove("is-open"),t.classList.remove("is-open"),t.inert=!0,n.setAttribute("aria-expanded","false"),document.removeEventListener("pointerdown",y,!0),document.removeEventListener("keydown",M),window.removeEventListener("scroll",E,!0),window.removeEventListener("resize",v),window.removeEventListener("tw-retheme",H),i&&(i.disconnect(),i=null),c?.disconnect(),c=null,a=setTimeout(()=>{o||t.remove()},200)};return n.addEventListener("click",()=>{n.disabled||(o?b():$())}),{open:$,close:b,isOpen:()=>o,reflow:v}}var Je=(e,n)=>{if(e=e.toLowerCase(),e.includes(n))return!0;if(n.length<3)return!1;let t=n.length,r=e.length,o=new Array(r+1).fill(0);for(let i=1;i<=t;i++){let a=[i];for(let s=1;s<=r;s++)a[s]=Math.min(o[s]+1,a[s-1]+1,o[s-1]+(n[i-1]===e[s-1]?0:1));o=a}return Math.min(...o)<=(n.length<6?1:2)},ee=typeof matchMedia=="function"?matchMedia("(prefers-reduced-motion: reduce)"):{matches:!1},N="cubic-bezier(0.22, 1, 0.36, 1)",Qe="cubic-bezier(0.34, 1.2, 0.64, 1)",Ae=(e,n)=>{ee.matches||typeof e.animate!="function"||(e.style.transformOrigin=n>0?"left center":"right center",e.animate([{transform:"scaleX(1)"},{transform:"scaleX(1.18)"},{transform:"scaleX(1)"}],{duration:300,easing:N}))},ke=(e,n,t)=>{let r=e.querySelector('[data-active="true"]');if(!r)return;let o=r.offsetLeft,i=r.offsetWidth,a=parseFloat(n.style.left);n.style.left=o+"px",n.style.width=i+"px",t&&Number.isFinite(a)&&a!==o&&Ae(n,o>a?1:-1)},He=32,Re=200,Fe=8,et=(e,n,t)=>{let r=t<n.left?t-n.left:t>n.right?t-n.right:0,o=Math.sign(r)*Fe*Math.sqrt(Math.min(Math.max(0,Math.abs(r)-He)/Re,1));e.style.width=o?`calc(100% + ${Math.abs(o)}px)`:"",e.style.transform=o<0?`translateX(${o}px)`:""},tt=e=>{e.style.transition=`width 0.35s ${N}, transform 0.35s ${N}`,e.style.width="",e.style.transform="",setTimeout(()=>{e.style.transition=""},360)},nt=(e,n)=>{e.classList.toggle("is-disabled",n);for(let t of e.children)t.classList.contains("tw-portal")||(t.inert=n);n&&Ce(e)},J=(e,n,t,r)=>{e.classList.toggle("is-collapsed",r),n.setAttribute("aria-expanded",String(!r)),t.inert=r},rt=(e,n,t,r,o)=>{if(ee.matches||typeof t.animate!="function"){J(e,n,t,r),o&&setTimeout(o,370);return}let i=t.getBoundingClientRect(),a=i.height,s=e.closest(".tw-panel"),c=s&&getComputedStyle(s),w=c?parseFloat(c.maxHeight):NaN,u=c&&s.dataset.mode==="floating"&&w>=0?s.getBoundingClientRect().top+w-parseFloat(c.paddingBottom)-parseFloat(c.borderBottomWidth):1/0,f=Math.max(0,Math.min(window.innerHeight,u)-i.top),m=getComputedStyle(t).getPropertyValue("--tw-ease-fold").trim();t._twFold?.cancel(),t._twFold=null,t.style.transition="none",t.style.gridTemplateRows="",J(e,n,t,r);let p=0;if(!r){for(let M of t.firstElementChild?.getAnimations?.()??[])M.transitionProperty!=="opacity"&&M.finish();p=t.getBoundingClientRect().height}let g=Math.min(a,f),v=Math.min(p,f),E=()=>{t.style.gridTemplateRows="",t.offsetHeight,t._twFold?.cancel(),t._twFold=null,t.style.transition="",o?.()};if(Math.abs(g-v)<1)return E();t.style.gridTemplateRows="1fr";let y=t._twFold=t.animate([{height:g+"px"},{height:v+"px"}],{duration:350,easing:m,fill:"forwards"});y.onfinish=()=>{t._twFold===y&&E()}},te=(e,n)=>{let t=e.findIndex(r=>r.dataset.value===String(n));return t<0&&e.length?0:t},Pe=(e,n)=>{let t=te(e,n);e.forEach((r,o)=>{let i=r.dataset.value===String(n);r.dataset.active=String(i),r.setAttribute("aria-checked",String(i)),r.tabIndex=o===t?0:-1})},Se=(e,n,t)=>{let r=ge("button",e,we(n));return r.setAttribute("role","radio"),r._twVal=fe(n),r.dataset.value=r._twVal,r.addEventListener("click",()=>t(r._twVal)),r},Be=(e,n,t,r=0)=>{switch(e){case"ArrowRight":return(n+1)%t;case"ArrowLeft":return(n-1+t)%t;case"ArrowDown":return r<0?-1:r?n+r<t?n+r:n:(n+1)%t;case"ArrowUp":return r<0?-1:r?n-r>=0?n-r:n:(n-1+t)%t;case"Home":return 0;case"End":return t-1}return-1};function ot(e,n,t,r){let o=A("div","tw-seg");o.setAttribute("role","radiogroup"),r&&o.setAttribute("aria-label",r);let i=A("div","tw-seg-pill");o.append(i);let a=e.map(u=>{let f=Se("tw-seg-btn",u,m=>w(m));return o.append(f),f}),s=u=>ke(o,i,u),c=()=>{Pe(a,n),s(!0)},w=(u,f=!0)=>{u!=null&&!a.some(m=>m._twVal===u)||(n=u,c(),f&&t(u))};return o.addEventListener("keydown",u=>{let f=te(a,n);if(f<0)return;let m=Be(u.key,f,a.length);m<0||(u.preventDefault(),w(a[m]._twVal),a[m].focus())}),c(),he(()=>{s(),o.classList.add("is-ready")}),pe(o,[[window,"tw-reflow"]],()=>s()),{el:o,set:u=>w(u,!1),get:()=>n}}var it=(e,n="",t=2,r=24)=>`<svg${n?` class="${n}"`:""} viewBox="0 0 ${r} ${r}" fill="none" stroke="currentColor" stroke-width="${t}" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">${e}</svg>`,st=(e,n)=>({el:e,set:()=>{},get:()=>{},destroy:n}),ne={},at=(e,n)=>{ne[e]=n},lt=e=>ne[e],re=null,ct=e=>{re=e},ut=()=>re,T=null,Q=0,dt=e=>{T||(T=A("div","tw-sr"),T.setAttribute("role","status")),T.isConnected||document.body.appendChild(T),T.textContent="",clearTimeout(Q),Q=setTimeout(()=>{T.textContent=e},100)};export{U as a,Oe as b,Ne as c,X as d,ae as e,le as f,B as g,$e as h,Ve as i,ce as j,ue as k,je as l,de as m,Ie as n,ze as o,De as p,Ke as q,fe as r,me as s,we as t,A as u,We as v,ge as w,be as x,he as y,pe as z,Ge as A,Ue as B,qe as C,Xe as D,ve as E,Ye as F,Te as G,xe as H,Z as I,Ce as J,Ze as K,Je as L,ee as M,N,Qe as O,ke as P,et as Q,tt as R,nt as S,rt as T,te as U,Pe as V,Se as W,Be as X,ot as Y,it as Z,st as _,at as $,lt as aa,ct as ba,ut as ca,dt as da};
@@ -1 +0,0 @@
1
- import{d as pt,f as re,g as oe,i as bt,j as mt}from"./chunk-4ATI34PB.js";import{$ as Le,C as lt,D as it,K as ut,da as ht,g as d,o as Te,u as C,w as ct}from"./chunk-7OSCMZ2J.js";var un=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]],hn=(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},x=e=>Number.isFinite(e)?e:0,pn=(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)},le=1.09929682680944,yt=.018053968510807,bn=e=>{let t=Math.abs(e);return t<yt*4.5?e/4.5:Math.sign(e)*((t+le-1)/le)**(1/.45)},$t=e=>{let t=Math.abs(e);return t<yt?e*4.5:Math.sign(e)*(le*t**.45-(le-1))},Et=1/512,mn=e=>{let t=Math.abs(e);return t<=Et*16?e/16:Math.sign(e)*t**1.8},dn=e=>{let t=Math.abs(e);return t>=Et?Math.sign(e)*t**(1/1.8):16*e},Ve=[[.41239079926595934,.357584339383878,.1804807884018343],[.21263900587151027,.715168678767756,.07219231536073371],[.01933081871559182,.11919477979462598,.9505321522496607]],se=[[3.2409699419045226,-1.537383177570094,-.4986107602930034],[-.9692436362808796,1.8759675015077202,.04155505740717559],[.05563007969699366,-.20397695888897652,1.0569715142428786]],fn=[[.4865709486482162,.26566769316909306,.19821728523436247],[.2289745640697488,.6917385218365064,.079286914093745],[0,.04511338185890264,1.043944368900976]],_t=[[2.493496911941425,-.9313836179191239,-.40271078445071684],[-.8294889695615747,1.7626640603183463,.023624685841943577],[.03584583024378447,-.07617238926804182,.9568845240076872]],gn=[[.6369580483012914,.14461690358620832,.16888097516417205],[.2627002120112671,.6779980715188708,.05930171646986196],[0,.028072693049087428,1.060985057710791]],St=[[1.7166511879712674,-.35567078377639233,-.25336628137365974],[-.6666843518324892,1.6164812366349395,.01576854581391113],[.017639857445310783,-.042770613257808524,.9421031212354738]],xn=[[.7977604896723027,.13518583717574031,.0313493495815248],[.2880711282292934,.7118432178101014,8565396060525902e-20],[0,0,.8251046025104601]],Mn=[[1.3457989731028281,-.25558010007997534,-.05110628506753401],[-.5446224939028347,1.5082327413132781,.02053603239147973],[0,0,1.2119675456389454]],At=[[1.0479298208405488,.022946793341019088,-.05019222954313557],[.029627815688159344,.990434484573249,-.01707382502938514],[-.009243058152591178,.015055144896577895,.7518742899580008]],Tt=[[.9554734527042182,-.023098536874261423,.0632593086610217],[-.028369706963208136,1.0099954580058226,.021041398966943008],[.012314001688319899,-.020507696433477912,1.3303659366080753]],kn=[[.819022437996703,.3619062600528904,-.1288737815209879],[.0329836539323885,.9292868615863434,.0361446663506424],[.0481771893596242,.2642395317527308,.6335478284694309]],Lt=[[1.2268798758459243,-.5578149944602171,.2813910456659647],[-.0405757452148008,1.112286803280317,-.0717110580655164],[-.0763729366746601,-.4214933324022432,1.5869240198367816]],wn=[[.210454268309314,.7936177747023054,-.0040720430116193],[1.9779985324311684,-2.42859224204858,.450593709617411],[.0259040424655478,.7827717124575296,-.8086757549230774]],Vt=[[1,.3963377773761749,.2158037573099136],[1,-.1055613458156586,-.0638541728258133],[1,-.0894841775298119,-1.2914855480194092]],ce=216/24389,q=24389/27,Z=[.3457/.3585,1,(1-.3457-.3585)/.3585],W=(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])]},dt=e=>{let t=L(Vt,e);return L(Lt,[t[0]**3,t[1]**3,t[2]**3])},ft=e=>{let t=L(kn,e);return L(wn,[Math.cbrt(t[0]),Math.cbrt(t[1]),Math.cbrt(t[2])])};function gt(e){let[t,n,o]=e,r=(t+16)/116,a=n/500+r,s=r-o/200,l=a**3>ce?a**3:(116*a-16)/q,h=t>q*ce?r**3:t/q,p=s**3>ce?s**3:(116*s-16)/q;return L(Tt,[l*Z[0],h*Z[1],p*Z[2]])}function xt(e){let t=L(At,e),n=s=>s>ce?Math.cbrt(s):(q*s+16)/116,o=n(t[0]/Z[0]),r=n(t[1]/Z[1]),a=n(t[2]/Z[2]);return[116*r-16,500*(o-r),200*(r-a)]}var ie=e=>{let t=Math.hypot(e[1],e[2]),n=Math.atan2(e[2],e[1])*un;return n<0&&(n+=360),[e[0],t,n]},ue=e=>[e[0],e[1]*Math.cos(e[2]*Re),e[1]*Math.sin(e[2]*Re)];function Ot(e){let t=((Number.isNaN(e[0])?0:e[0])%360+360)%360,n=e[1]/100,o=e[2]/100,r=a=>{let s=(a+t/30)%12,l=n*Math.min(o,1-o);return o-l*Math.max(-1,Math.min(s-3,9-s,1))};return[r(0),r(8),r(4)]}function Rt(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 Cn(e){let t=Math.max(...e),n=Math.min(...e),o=(n+t)/2,r=Rt(e),a=t===n||o===0||o===1?0:(t-o)/Math.min(o,1-o);return a<0&&(r+=180,a=-a),r>=360&&(r-=360),[r,a*100,o*100]}function vn(e){let t=e[1]/100,n=e[2]/100;if(t+n>=1){let a=t/(t+n);return[a,a,a]}let o=Ot([e[0],100,50]),r=1-t-n;return[o[0]*r+t,o[1]*r+t,o[2]*r+t]}var yn=e=>[Rt(e),Math.min(...e)*100,(1-Math.max(...e))*100];function $n(e,t){switch(t){case"srgb":return W(e,ae,Ve);case"p3":return W(e,ae,fn);case"rec2020":return W(e,bn,gn);case"prophoto-rgb":return L(Tt,W(e,mn,xn));case"oklab":return dt(e);case"oklch":return dt(ue(e));case"lab":return gt(e);case"lch":return gt(ue(e));case"hsl":return W(Ot(e),ae,Ve);case"hwb":return W(vn(e),ae,Ve)}}function En(e,t){switch(t){case"srgb":return Y(e,U,se);case"p3":return Y(e,U,_t);case"rec2020":return Y(e,$t,St);case"prophoto-rgb":return Y(L(At,e),dn,Mn);case"oklab":return ft(e);case"oklch":return ie(ft(e));case"lab":return xt(e);case"lch":return ie(xt(e));case"hsl":return Cn(Y(e,U,se));case"hwb":return yn(Y(e,U,se))}}function k(e,t,n){return t===n?[e[0],e[1],e[2]]:t==="oklch"&&n==="oklab"?ue(e):t==="oklab"&&n==="oklch"?ie(e):t==="lch"&&n==="lab"?ue(e):t==="lab"&&n==="lch"?ie(e):En($n(e,t),n)}var he=75e-6,Nt=e=>e.every(t=>t>=-he&&t<=1+he),Ne=(e,t)=>Nt(k(e,"oklch",t)),Oe=e=>e.map(t=>Math.min(1,Math.max(0,t))),Mt=(e,t)=>Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2]);function pe(e,t){if(Ne(e,t))return k(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 Oe(k([n,0,x(e[2])],"oklch",t));let o=.02,r=1e-4,a=[e[0],e[1],e[2]],s=0,l=e[1],h=!0,p=Oe(k(a,"oklch",t));if(Mt(k(p,t,"oklab"),k(e,"oklch","oklab"))<o)return p;for(;l-s>r;){let u=(s+l)/2;a[1]=u;let b=k(a,"oklch",t);if(h&&Nt(b)){s=u;continue}p=Oe(b);let f=Mt(k(p,t,"oklab"),k(a,"oklch","oklab"));if(f<o){if(o-f<r)return p;h=!1,s=u}else l=u}return p}var Ht=(e,t)=>{let n=e*Re,o=Math.cos(n),r=Math.sin(n),a=Vt.map(l=>o*l[1]+r*l[2]),s=hn(t==="p3"?_t:t==="rec2020"?St:se,Lt);return{d:a,F:s,gam:t==="rec2020"?$t:U}};function be(e,t){let{d:[n,o,r],F:a,gam:s}=Ht(e,t),l=-he,h=1+he;return(p,u)=>{let b=p+u*n,f=p+u*o,_=p+u*r,g=b**3,w=f**3,v=_**3,M=s(a[0][0]*g+a[0][1]*w+a[0][2]*v);if(M<l||M>h)return!1;let A=s(a[1][0]*g+a[1][1]*w+a[1][2]*v);if(A<l||A>h)return!1;let B=s(a[2][0]*g+a[2][1]*w+a[2][2]*v);return B>=l&&B<=h}}function Ft(e,t){let{d:[n,o,r],F:a,gam:s}=Ht(e,t);return(l,h,p)=>{let u=l+h*n,b=l+h*o,f=l+h*r,_=u**3,g=b**3,w=f**3;p[0]=s(a[0][0]*_+a[0][1]*g+a[0][2]*w),p[1]=s(a[1][0]*_+a[1][1]*g+a[1][2]*w),p[2]=s(a[2][0]*_+a[2][1]*g+a[2][2]*w)}}function me(e,t,n=.5){if(!e(t,0))return 0;let o=0;for(let r=0;r<16;r++){let a=(o+n)/2;e(t,a)?o=a:n=a}return o}var G=e=>Math.round(Math.min(1,Math.max(0,e))*255).toString(16).padStart(2,"0"),_n=e=>`#${G(e[0])}${G(e[1])}${G(e[2])}`,de=(e,t,n)=>_n(pe([e,t,n],"srgb"));function It(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 k(n,"srgb","oklch").map(x)}var fe=["hex","srgb","css","hsl","hwb","oklch","oklab","lch","lab","p3","rec2020"],Dt={hex:"HEX",srgb:"RGB",css:"CSS",hsl:"HSL",hwb:"HWB",oklch:"OKLCH",oklab:"OKLab",lch:"LCH",lab:"Lab",p3:"P3",rec2020:"Rec2020"},Gt=["srgb","css","hsl","hwb","hex"],He=e=>!Gt.includes(e),Pt=e=>e==="hex"||e==="css"?"srgb":e,Sn=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"}),Xn=e=>Sn[e]||"oklch",An=Object.assign(Object.create(null),{srgb:"srgb",hsl:"hsl",hwb:"hwb",oklch:"oklch",oklab:"oklab",lch:"lch",lab:"lab","display-p3":"p3",rec2020:"rec2020"}),jn=e=>An[e]||"oklch",ge=.5,Bt=(e,t,n)=>Object.freeze(["R","G","B"].map(o=>Object.freeze({k:o,min:0,max:e,step:t,scale:n}))),kt=Bt(255,1,255),wt=Bt(1,.01,1),J={oklch:[{k:"L",min:0,max:100,step:1,scale:100},{k:"C",min:0,max:ge,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:kt,css:kt,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:wt,rec2020:wt},Ct=e=>e>=1?0:e>=.1?1:e>=.01?2:3,Xt=(e,t,n)=>t==="oklch"?[e[0],e[1],e[2]]:Gt.includes(n)?t==="srgb"?pe(e,"srgb"):k(pe(e,"srgb"),"srgb",t):k(e,"oklch",t);function xe(e,t){let n=Xt(e,Pt(t),t);return J[t].map((o,r)=>{let a=x(n[r])*o.scale;return pn(Math.abs(a)<.5*o.step?0:a,o.min,o.max)})}function jt(e,t,n,o){let r=Pt(t),a=Xt(e,r,t).map(x);a[n]=o/J[t][n].scale;let s=k(a,r,"oklch");return[x(s[0]),x(s[1]),x(s[2])]}function Kt(e,t){if(!He(t))return"sRGB";let n=pe(e,"srgb");return Math.max(...n)<.03||Math.min(...n)>.97||Ne(e,"srgb")?"sRGB":Ne(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=a=>{let s=o[a].toFixed(Ct(n[a].step));return n[a].k==="H"&&+s==360?0 .toFixed(Ct(n[a].step)):s};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 vt=(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 Wt(e,t,n){let o=x(n);if(t==="hex")return de(e[0],e[1],e[2])+(o<.999?G(o):"");let r=Fe(e,t);if(o>=.999)return vt(r,t);let a=+o.toFixed(3);return t==="css"?`rgba(${r}, ${a})`:vt(`${r} / ${a}`,t)}var Yt=(()=>{try{return document.createElement("canvas").getContext("2d",{colorSpace:"display-p3"})?.getContextAttributes?.().colorSpace==="display-p3"}catch{return!1}})(),Ie=Yt?{colorSpace:"display-p3"}:{},Tn=Yt?"p3":"srgb",Me=(e,t)=>{let n=e.length-1,o=Math.max(0,Math.min(n,t*n)),r=Math.floor(o),a=o-r;return e[r]*(1-a)+e[Math.min(r+1,n)]*a},Ln=(e,t)=>{let n=be(e,t),o=new Float64Array(128);for(let r=0;r<128;r++)o[r]=me(n,r/127);return o},Vn="var(--tw-checker)",On=Object.assign(Object.create(null),{srgb:"srgb","display-p3":"p3",rec2020:"rec2020","prophoto-rgb":"prophoto-rgb"}),Xe=/^(rgba?|hsla?|hwb)\([ \t\n\r\f]*([^)]*?)[ \t\n\r\f]*\)$/i,je=/^(oklch|oklab|lch|lab|color)\([ \t\n\r\f]*([^)]*?)[ \t\n\r\f]*\)$/i,Rn=/^(srgb|srgb-linear|display-p3|a98-rgb|prophoto-rgb|rec2020|xyz|xyz-d50|xyz-d65)$/i,we=/^#?([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i,De,Zt=()=>De===void 0?De=document.createElement("canvas").getContext("2d"):De,Nn=/^(#[0-9a-f]{3,8}|[a-z][a-z-]*(?:\([\w\s.,%+\-\/]*\))?)$/i;function zn(e){if(e=String(e??"").trim(),!Nn.test(e))return!1;if(we.test(e))return!0;if(je.test(e))return In(e);if(Xe.test(e))return Ut(e)!==null;let t=Zt();return t?["#000","#fff"].some(n=>{t.fillStyle=n;let o=t.fillStyle;return t.fillStyle=e,t.fillStyle!==o}):!0}var Ke="[+-]?(?:\\d+(?:\\.\\d+)?|\\.\\d+)(?:e[+-]?\\d+)?",Hn=new RegExp("^"+Ke+"$","i"),Fn=new RegExp("^"+Ke+"%$","i"),zt=new RegExp("^("+Ke+")(deg|grad|rad|turn)$","i"),We=/[ \t\n\r\f]+/,Ye=/^none$/i,Ge=e=>e.replace(/^[ \t\n\r\f]+|[ \t\n\r\f]+$/g,""),Pe=e=>!!e&&!We.test(e),P=e=>Ye.test(e)?"none":Hn.test(e)?"num":Fn.test(e)?"pct":zt.test(e)?"angle":null,Be=e=>{let t=zt.exec(e);if(!t)return x(parseFloat(e));let n=parseFloat(t[1]),o=t[2].toLowerCase();return x(o==="turn"?n*360:o==="grad"?n*.9:o==="rad"?n*180/Math.PI:n)};function Ut(e){let t=Xe.exec(e);if(!t)return null;let n=t[1].toLowerCase().replace(/a$/,""),o=t[2],r,a,s;if(o.includes(",")){if(n==="hwb")return null;let u=o.split(",").map(Ge);if(u.length<3||u.length>4||!u.every(Pe)||(r=u.slice(0,3),a=u[3],s=r.map(P),n==="rgb"?!(s.every(b=>b==="num")||s.every(b=>b==="pct")):!((s[0]==="num"||s[0]==="angle")&&s[1]==="pct"&&s[2]==="pct"))||a!==void 0&&P(a)!=="num"&&P(a)!=="pct")return null}else{let u=o.split("/");if(u.length>2||(r=u[0].split(We).filter(Boolean),r.length!==3))return null;if(u.length===2){a=Ge(u[1]);let b=Pe(a)?P(a):null;if(!b||b==="angle")return null}if(s=r.map(P),n==="rgb"?!s.every(b=>b&&b!=="angle"):!(s[0]&&s[0]!=="pct"&&s[1]&&s[1]!=="angle"&&s[2]&&s[2]!=="angle"))return null}let l=(u,b)=>Ye.test(u)?0:/%$/.test(u)?parseFloat(u)/100*b:parseFloat(u),h=a===void 0?1:d(l(a,1),0,1);return[n==="rgb"?k([d(l(r[0],255)/255,0,1),d(l(r[1],255)/255,0,1),d(l(r[2],255)/255,0,1)],"srgb","oklch"):k([s[0]==="none"?0:Be(r[0]),d(l(r[1],100),0,100),d(l(r[2],100),0,100)],n,"oklch"),h]}var In=e=>{let t=je.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(We).filter(Boolean);if(n==="color"&&!Rn.test(r.shift()||"")||r.length!==3)return!1;let a=n==="lch"||n==="oklch";if(!r.every((s,l)=>{let h=P(s);return h&&(a&&l===2?h!=="pct":h!=="angle")}))return!1;if(o.length===2){let s=Ge(o[1]),l=Pe(s)?P(s):null;if(!l||l==="angle")return!1}return!0};function ke(e){if(e=String(e??"").trim(),we.test(e)){let l=e.replace("#",""),h=1;l.length===4?(h=parseInt(l[3]+l[3],16)/255,l=l.slice(0,3)):l.length===8&&(h=parseInt(l.slice(6,8),16)/255,l=l.slice(0,6));let[p,u,b]=It("#"+l);return[p,u,b,h]}let t=je.exec(e);if(t){let l=t[1].toLowerCase(),[h,p]=t[2].split("/").map(v=>v.trim()),u=h.split(/\s+/).filter(Boolean),b=l;if(l==="color"&&(b=On[(u[0]||"").toLowerCase()],u=u.slice(1),!b))return[.7,.1,280,1];let f=(v,M=1)=>!v||Ye.test(v)?0:x(parseFloat(v))*(/%$/.test(v)?M:1),_=p?d(f(p,.01),0,1):1,g=l==="lab"?[d(f(u[0]),0,100),f(u[1],1.25),f(u[2],1.25)]:l==="lch"?[d(f(u[0]),0,100),Math.max(0,f(u[1],1.5)),Be(u[2]||"0")]:l==="color"?[f(u[0],.01),f(u[1],.01),f(u[2],.01)]:l==="oklab"?[d(f(u[0],.01),0,1),f(u[1],.004),f(u[2],.004)]:[d(f(u[0],.01),0,1),Math.max(0,f(u[1],.004)),Be(u[2]||"0")],w=b==="oklch"?g:k(g,b,"oklch");return[x(w[0]),d(x(w[1]),0,ge),(x(w[2])%360+360)%360,_]}if(Xe.test(e)){let l=Ut(e);if(!l)return[0,0,0,1];let[h,p]=l;return[x(h[0]),d(x(h[1]),0,ge),(x(h[2])%360+360)%360,p]}let n=Zt();if(!n)return[0,0,0,1];n.fillStyle="#000",n.fillStyle=e;let o=n.fillStyle;if(we.test(o))return ke(o);let r=o.match(/^rgba?\(([^)]*)\)/i),a=((r?r[1]:"").match(/-?[\d.]+(?:e[+-]?\d+)?/gi)||[0,0,0]).map(Number),s=k([a[0]/255,a[1]/255,a[2]/255],"srgb","oklch");return[x(s[0]),x(s[1]),x(s[2]),a[3]!=null?d(x(a[3]),0,1):1]}function qt(e,t){let[n,o,r,a]=ke(e.value||"#7c5cff"),s=fe.includes(e.mode)?e.mode:"oklch",l=NaN,h=null,p=[],u=NaN,b="",f=()=>Wt([n,o,r],s,a),_=C("div","tw-color-body"),g=C("div","tw-wg-area"),w=document.createElement("canvas");w.className="tw-wg-canvas";let v=C("div","tw-wg-thumb");g.append(w,v);let M=C("div","tw-wg-hue"),A=document.createElement("canvas");A.className="tw-wg-hue-canvas";let B=C("div","tw-wg-hue-thumb");M.append(A,B);let S=C("div","tw-wg-alpha"),Ze=C("div","tw-wg-alpha-grad"),Ce=C("div","tw-wg-hue-thumb");S.append(Ze,Ce),w.setAttribute("aria-hidden","true"),A.setAttribute("aria-hidden","true"),g.tabIndex=0,g.setAttribute("role","group"),g.setAttribute("aria-label","Colour plane: chroma across, lightness up"),M.tabIndex=0,M.setAttribute("role","slider"),M.setAttribute("aria-label","Hue"),M.setAttribute("aria-valuemin","0"),M.setAttribute("aria-valuemax","360"),S.tabIndex=0,S.setAttribute("role","slider"),S.setAttribute("aria-label","Alpha"),S.setAttribute("aria-valuemin","0"),S.setAttribute("aria-valuemax","1");let ze=C("div","tw-color-mode-row"),R=C("select","tw-color-mode");R.setAttribute("aria-label","Color mode"),fe.forEach(c=>{let i=document.createElement("option");i.value=c,i.textContent=Dt[c],R.append(i)}),R.value=s;let Ue=C("span","tw-color-gamut");ze.append(R,Ue);let N=C("div","tw-color-channels");_.append(g,M,S,ze,N);let y=w.getContext("2d",Ie),qe=A.getContext("2d"),X=document.createElement("canvas"),Jt=X.getContext("2d",Ie),ve=null,ye=()=>{let c=g.clientWidth,i=g.clientHeight;if(c<2)return;let m=window.devicePixelRatio||1,$=He(s)?"p3":"srgb",E=Ln(r,$);h=E;let V=Math.round(c*m),H=Math.round(i*m),F=Math.max(1,Math.round(V/4)),j=Math.max(1,Math.round(H/4));(X.width!==F||X.height!==j)&&(X.width=F,X.height=j,ve=new ImageData(F,j,Ie));let ee=ve.data,an=j>1?1/(j-1):0,sn=F>1?1/(F-1):0,cn=Ft(r,Tn),te=[0,0,0];for(let I=0;I<j;I++){let ne=1-I*an,_e=Me(E,ne);for(let D=0;D<F;D++){cn(ne,D*sn*_e,te);let K=(I*F+D)*4;ee[K]=Math.round(d(te[0],0,1)*255),ee[K+1]=Math.round(d(te[1],0,1)*255),ee[K+2]=Math.round(d(te[2],0,1)*255),ee[K+3]=255}}if(Jt.putImageData(ve,0,0),w.width=V,w.height=H,y.imageSmoothingEnabled=!0,y.drawImage(X,0,0,V,H),$!=="srgb"){let I=(ne,_e,D,K)=>{let ln=be(r,ne),Se=[];for(let T=0;T<=100;T++){let z=T/100,Ae=Me(E,z);if(Ae<=0)continue;let st=me(ln,z,Ae);st<=0||Se.push([Math.min(st/Ae*V,V-D*m/2),(1-z)*H])}Se.length<2||(y.save(),y.strokeStyle=_e,y.lineWidth=D*m,y.lineJoin=y.lineCap="round",y.setLineDash(K.map(T=>T*m)),y.beginPath(),Se.forEach((T,z)=>z?y.lineTo(T[0],T[1]):y.moveTo(T[0],T[1])),y.stroke(),y.restore())};I("srgb","rgba(255,255,255,0.7)",1.5,[]),I("p3","rgba(255,255,255,0.4)",1,[3,3])}l=r},Je=.7,Qe=c=>{let i=k([Je,me(be(c,"srgb"),Je),c],"oklch","srgb");return`rgb(${d(i[0]*255,0,255)|0},${d(i[1]*255,0,255)|0},${d(i[2]*255,0,255)|0})`},et=0,Qt=()=>{let c=Math.max(1,M.clientWidth),i=Math.max(1,M.clientHeight);if(!(c<2)&&!(c===et&&A.width===c)){et=c,A.width=c,A.height=i;for(let m=0;m<c;m++)qe.fillStyle=Qe(m/(c-1)*360),qe.fillRect(m,0,1,i)}},$e=()=>{let c=h?Me(h,n):.4,i=E=>`${d(E,0,1)*100}%`,m=(E,V)=>{let H=d(E,0,1);return`calc(${H*100}% + ${(.5-H)*V}px)`};v.style.left=i(c>0?o/c:0),v.style.top=i(1-n),B.style.left=m(r/360,16),Ce.style.left=m(a,16),S.setAttribute("aria-valuenow",String(+a.toFixed(2)));let $=Math.round(r);M.setAttribute("aria-valuenow",String($)),M.setAttribute("aria-valuetext",`${$}\xB0`),g.setAttribute("aria-description",`lightness ${Math.round(n*100)}%, chroma ${+o.toFixed(3)}`),Ze.style.background=`linear-gradient(to right, oklch(${n} ${o} ${r} / 0), oklch(${n} ${o} ${r}))`,v.style.background=`oklch(${n} ${o} ${r})`,Ce.style.background=`linear-gradient(oklch(${n} ${o} ${r} / ${a}), oklch(${n} ${o} ${r} / ${a})), var(--tw-dropdown-bg)`,r!==u&&(b=Qe(r),u=r),B.style.background=b},tt=()=>de(n,o,r)+(a<.999?G(a):""),Q=()=>{if(Ue.textContent=Kt([n,o,r],s),s==="hex"){let c=N.querySelector(".tw-color-chan-input");c&&document.activeElement!==c&&(c.value=tt())}else{let c=xe([n,o,r],s);p.forEach((i,m)=>{i.el.contains(document.activeElement)||i.set(c[m])})}},en=()=>{Qt(),ye(),$e()},tn=()=>t(f()),nt=c=>{c&&r!==l&&ye(),$e(),Q()},O=c=>{nt(c),tn()},rt=()=>{if(N.replaceChildren(),p=[],s==="hex"){N.classList.add("tw-color-channels--hex");let c=C("div","tw-color-chan"),i=C("input","tw-color-chan-input");i.type="text",i.spellcheck=!1,i.setAttribute("aria-label","Hex color"),lt(i),pt(i),i.addEventListener("change",()=>{let m=i.value.trim();we.test(m)&&([n,o,r,a]=ke(m),O(!0))}),i.addEventListener("blur",Q),i.addEventListener("keydown",m=>{m.key==="Enter"&&i.blur()}),it(i,tt),c.append(ct("span","tw-color-chan-label","HEX"),i),N.append(c)}else{N.classList.remove("tw-color-channels--hex");let c=xe([n,o,r],s);J[s].forEach((i,m)=>{let $=mt({label:i.k,value:c[m],min:i.min,max:i.max,step:i.step},E=>{[n,o,r]=jt([n,o,r],s,m,d(E,i.min,i.max)),O(!0)});$.el.addEventListener("focusout",Q),p.push($),N.append($.el)})}Q()},Ee=c=>h?Me(h,c):.4,nn=c=>oe(c,g);re(g,c=>{let[i,m]=nn(c);n=1-m,o=i*Ee(n),O(!1)});let ot=0;g.addEventListener("keydown",c=>{if(c.key==="Home"||c.key==="End"){c.preventDefault();return}let i=c.shiftKey?10:1,m=c.key==="ArrowRight"?i:c.key==="ArrowLeft"?-i:0,$=c.key==="ArrowUp"?i:c.key==="ArrowDown"?-i:c.key==="PageUp"?10:c.key==="PageDown"?-10:0;if(!m&&!$)return;c.preventDefault();let E=Ee(n),V=d((E>0?o/E:0)+m*.01,0,1);n=d(n+$*.01,0,1),o=V*Ee(n),O(!1),clearTimeout(ot),ot=setTimeout(()=>{g.isConnected&&ht(g.getAttribute("aria-description")||"")},250)});let rn=c=>oe(c,M)[0]*360;re(M,c=>{r=rn(c),O(!0)}),M.addEventListener("keydown",c=>{let i=Te(c,r,1,0,360);i!=null&&(c.preventDefault(),r=d(i,0,360),O(!0))});let on=c=>oe(c,S)[0];re(S,c=>{a=on(c),O(!1)}),S.addEventListener("keydown",c=>{let i=Te(c,a,.01,0,1);i!=null&&(c.preventDefault(),a=d(i,0,1),O(!1))});let at=c=>{s=c,R.value=c,rt(),ye(),$e()};return R.addEventListener("change",()=>{at(R.value),e.onMode&&e.onMode()}),rt(),{el:_,set:c=>{let i=document.activeElement;i&&_.contains(i)&&i.matches("input")&&i.blur(),[n,o,r,a]=ke(c),nt(!0)},get:()=>f(),mode:()=>s,setMode:c=>{c!==s&&fe.includes(c)&&at(c)},reflow:en,swatchCss:()=>`linear-gradient(oklch(${n} ${o} ${r} / ${a}), oklch(${n} ${o} ${r} / ${a})), ${Vn}`,valueText:()=>Fe([n,o,r],s)+(a<.999?s==="hex"?G(a):` / ${+a.toFixed(2)}`:"")}}function Dn(e,t){let{root:n,trigger:o,right:r}=bt("tw-color",e.label??"Colour"),a=C("span","tw-trigger-chip tw-color-swatch"),s=C("span","tw-trigger-value");r.append(a,s);let l=C("div","tw-color-pop"),h=()=>{a.style.background=p.swatchCss(),s.textContent=p.valueText()},p=qt({value:e.value,onMode:()=>h()},u=>{h(),t(u)});return l.append(p.el),n.append(l),ut(n,o,l,{fallbackH:340,onOpen:p.reflow,onReflow:p.reflow}),h(),{el:n,set:u=>{u!=null&&(p.set(u),h())},get:()=>p.get()}}var Un=(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",Dn);Le("colorpicker",qt);export{Xn as a,jn as b,Vn as c,zn as d,ke as e,qt as f,Un as g};
@@ -1 +0,0 @@
1
- import{h as i,i as y,r as c}from"./chunk-7OSCMZ2J.js";var g=new Set(["__proto__","constructor","prototype"]),h=(e,n)=>n.reduce((r,t)=>i(r)&&Object.prototype.hasOwnProperty.call(r,t)?r[t]:void 0,e),S=e=>{let n={};for(let r of Object.keys(e)){let t=r.split(".");if(t.some(s=>g.has(s)))continue;let o=n;for(let s of t.slice(0,-1))o=i(o[s])?o[s]:o[s]={};o[t[t.length-1]]=e[r]}return n},d=e=>y(e)&&(typeof CSS>"u"||!CSS.supports||CSS.supports("color",e)),f=(e,n,r)=>Array.isArray(e)?Array.isArray(n)&&(e.every(t=>!i(t))?n.length===e.length&&n.every((t,o)=>f(e[o],t,r)):n.length>=2&&n.length<=64&&n.every(t=>f(e[0],t,r))):i(e)?i(n)&&!Array.isArray(n)&&Object.keys(e).every(t=>f(e[t],n[t],r)):typeof n==typeof e&&(typeof n!="number"||Number.isFinite(n))&&(!r||!y(e)||d(n)),m=(e,n)=>n!=null&&!e.el?.closest(".is-disabled")&&f(e.get(),n,e.m.type==="color"||e.m.type==="gradient")&&(!e.m.options||e.m.options.some(r=>JSON.stringify(c(r))===JSON.stringify(n))),k=(e,n,r=[])=>e.map(t=>[t,h(n,t.path.slice(r.length))]).filter(([t,o])=>m(t,o)),w=(e,n)=>{let r={};for(let[t,o]of n){let s=r;for(let a of t.path.slice(0,-1))s=s[a]||(s[a]={});s[t.path[t.path.length-1]]=o}e.fromJSON({values:r})};function A(e,n,r){let t=JSON.parse(r),o;if(n.kind==="row"){let s=n.entry,a=i(t)&&!Array.isArray(t)&&Object.keys(t).length===1&&Object.prototype.hasOwnProperty.call(t,s.key)?t[s.key]:t;o=m(s,a)?[[s,a]]:[]}else{if(!i(t)||Array.isArray(t))return!1;let s=e.entries.filter(a=>a.path.length>n.path.length&&n.path.every((p,l)=>a.path[l]===p));o=[];for(let a of[t,S(t)])for(let p of[h(a,n.path),a]){let l=i(p)?k(s,p,n.path):[];l.length>o.length&&(o=l)}}return o.length?(w(e,o),o.length):!1}var u=new WeakMap;function O(e,n,r,t){if(!r.alive())return;let o=!1;if(e!==null)try{o=n(e)}catch{}if(r.announce(o?`${o} value${o===1?"":"s"} pasted`:e===null?"Couldn't read the clipboard":"Nothing to paste"),t){let s=o?"is-pasted":"is-refused";t.classList.remove("is-pasted","is-refused"),t.classList.add(s),clearTimeout(u.get(t)),u.set(t,setTimeout(()=>t.classList.remove(s),450))}return!!o}export{O as pasteInto,A as pasteScope,k as pick};
@@ -1 +0,0 @@
1
- import{c as a,d as b,e as c,f as d,g as e}from"./chunk-W3JNIJ2F.js";import"./chunk-4ATI34PB.js";import"./chunk-7OSCMZ2J.js";export{a as CHECKER,d as createPickerBody,b as isColor,e as oklchStr,c as parseColor};
@@ -1 +0,0 @@
1
- import{a as W,b as F,c as Z,d as tt,e as I,f as et,g as ot}from"./chunk-W3JNIJ2F.js";import{e as J,i as Q}from"./chunk-4ATI34PB.js";import{$ as V,K as z,Z as U,a as X,b as $,c as q,e as Y,g as h,u as y,v as j}from"./chunk-7OSCMZ2J.js";var mt=U('<path d="M12 5v14m7-7H5"/>',"",2.5),lt=(o,S)=>o&&!Array.isArray(o)&&typeof o[S]=="string"?o[S]:null,nt=o=>lt(o,"interpolation"),rt=o=>lt(o,"easing"),st=[["linear","Linear"],["ease","Ease"],["ease-in","Ease in"],["ease-out","Ease out"],["ease-in-out","Ease in-out"]];function at(o){let S=[{color:"oklch(0.72 0.19 25)",pos:0},{color:"oklch(0.72 0.16 280)",pos:1}],l=Array.isArray(o)?o:o&&Array.isArray(o.stops)?o.stops:null,a=(p,O)=>tt(p)?{color:String(p).trim(),pos:h(+O||0,0,1)}:null,d=(l||[]).map(p=>Array.isArray(p)?a(p[0],p[1]):p&&typeof p=="object"?a(p.color,p.pos):null).filter(Boolean);return d.length>=2?d:S}function ht(o,S){o.value??(o.value=o.stops);let l=at(o.value),a=l[0],d=$(rt(o.value)),{root:p,trigger:O,right:it}=Q("tw-gradient",o.label??"Gradient"),k=y("span","tw-trigger-chip tw-gradient-preview");k.setAttribute("role","img"),it.append(k);let v=y("div","tw-color-pop tw-gradient-pop"),N=y("div","tw-gradient-bar-row"),B=y("div","tw-gradient-bar"),T=y("div","tw-gradient-grad"),b=y("div","tw-gradient-rail");B.append(T,b);let A=j("tw-gradient-add",mt);A.title="Add a stop after the selected one",A.setAttribute("aria-label","Add a colour stop after the selected one"),N.append(B,A);let C=()=>[...l].sort((t,e)=>t.pos-e.pos),pt=()=>W(g.mode()),D=()=>({stops:C().map(t=>({color:t.color,pos:+t.pos.toFixed(4)})),interpolation:pt(),easing:d}),f=()=>{let t=Y(D());T.style.background=t,k.style.background=`${t}, ${Z}`},G=()=>{k.setAttribute("aria-label",`${l.length} stop${l.length===1?"":"s"}`)},w=()=>S(D()),H=t=>[...b.children].find(e=>e._stop===t),g=et({value:a.color,mode:F(nt(o.value)||"oklch"),onMode:()=>{f(),w()}},t=>{a.color=t,H(a)?.style.setProperty("--stop",t),f(),w()}),u=y("select","tw-color-mode tw-gradient-ease");u.setAttribute("aria-label","Easing between stops"),u.title="How the ramp blends between stops";for(let[t,e]of st){let s=document.createElement("option");s.value=t,s.textContent=e,u.append(s)}let P=()=>{let t=u.querySelector("option[data-custom]");st.some(([e])=>e===d)?t?.remove():(t||(t=document.createElement("option"),t.dataset.custom="",t.textContent="Custom",u.append(t)),t.value=d),u.value=d};u.addEventListener("change",()=>{d=u.value,P(),f(),w()}),g.el.querySelector(".tw-color-mode").after(u),P(),v.append(N,g.el),p.append(v);let M=t=>t.setAttribute("aria-label",`Colour stop at ${Math.round(t._stop.pos*100)}%${t._stop===a?", selected":""}`),ct=()=>{for(let t of b.children)t.dataset.sel=String(t._stop===a),M(t)},R=()=>{b.replaceChildren();for(let t of l){let e=j("tw-gradient-stop");e._stop=t,e.style.left=t.pos*100+"%",e.style.setProperty("--stop",t.color),e.dataset.sel=String(t===a),M(e),e.addEventListener("focus",()=>L(t,!1));let s=!1;J(e,{onDown:n=>{n.preventDefault(),n.stopPropagation(),e.focus({focusVisible:!1}),L(t,!1),s=!1},onMove:n=>{let r=b.getBoundingClientRect();t.pos=h((n.clientX-r.left)/(r.width||1),0,1),e.style.left=t.pos*100+"%",M(e),f(),w(),s=l.length>2&&(n.clientY<r.top-24||n.clientY>r.bottom+24),e.dataset.removing=String(s)},onEnd:()=>{s?_(t):e.dataset.removing="false"}}),e.addEventListener("dblclick",n=>{n.preventDefault(),_(t)}),e.addEventListener("keydown",n=>{let r=n.key==="ArrowLeft"?-1:n.key==="ArrowRight"?1:0;r&&(n.preventDefault(),t.pos=h(t.pos+r*(n.shiftKey?.1:.01),0,1),e.style.left=t.pos*100+"%",M(e),f(),w())}),b.append(e)}},L=(t,e)=>{t!==a&&(g.set(t.color),a=t),e?R():ct()},dt=t=>{let e=b.getBoundingClientRect();return h((t-e.left)/(e.width||1),0,1)},ft=t=>{let e=C(),s=e[0],n=e[e.length-1];for(let m=0;m<e.length-1;m++)if(t>=e[m].pos&&t<=e[m+1].pos){s=e[m],n=e[m+1];break}let r=q(X(d),n.pos>s.pos?h((t-s.pos)/(n.pos-s.pos),0,1):0),i=I(s.color),c=I(n.color),x=m=>m[1]<1e-4,E=c[2]-i[2];E>180?E-=360:E<-180&&(E+=360),(x(i)||x(c))&&(E=0);let gt=(((x(i)&&!x(c)?c[2]:i[2])+E*r)%360+360)%360;return ot(i[0]+(c[0]-i[0])*r,i[1]+(c[1]-i[1])*r,gt,i[3]+(c[3]-i[3])*r)},_=t=>{if(l.length<=2)return;let e=l.indexOf(t);if(e<0)return;l.splice(e,1);let s=a===t?l[Math.max(0,e-1)]:a;f(),L(s,!0),G(),w(),H(a)?.focus()},K=t=>{let e={color:ft(t),pos:h(t,0,1)};return l.push(e),f(),L(e,!0),G(),w(),e},ut=()=>{let t=C(),e=t.indexOf(a);e<0&&(e=0);let s=e<t.length-1?(t[e].pos+t[e+1].pos)/2:e>0?(t[e-1].pos+t[e].pos)/2:h(t[e].pos+.1,0,1);K(s)};return A.addEventListener("click",t=>{t.stopPropagation(),ut()}),B.addEventListener("dblclick",t=>{t.target.closest(".tw-gradient-stop")||(t.preventDefault(),K(dt(t.clientX)))}),v.tabIndex=-1,v.addEventListener("keydown",t=>{(t.key==="Delete"||t.key==="Backspace")&&!t.altKey&&!/^(input|textarea|select)$/i.test(t.target.tagName)&&l.length>2&&(t.preventDefault(),_(a))}),z(p,O,v,{fallbackH:392,onOpen:g.reflow,onReflow:g.reflow,initialFocus:()=>H(a)}),R(),f(),G(),{el:p,set:t=>{let e=nt(t);e&&g.setMode(F(e));let s=rt(t);s!==null&&(d=$(s),P());let n=at(t).sort((r,i)=>r.pos-i.pos);if(n.length===l.length)C().forEach((r,i)=>{r.color=n[i].color,r.pos=n[i].pos;let c=H(r);c&&(c.style.left=r.pos*100+"%",c.style.setProperty("--stop",r.color))});else{let r=a.pos;l=n,a=l.reduce((i,c)=>Math.abs(c.pos-r)<Math.abs(i.pos-r)?c:i,l[0]),R()}f(),G(),g.set(a.color)},get:()=>D()}}V("gradient",ht);
@@ -1 +0,0 @@
1
- import{a,b,c,d,e,f,g,h,i,j,k,l}from"./chunk-4ATI34PB.js";import"./chunk-7OSCMZ2J.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,l as springCurve,k as springSpan,a as svgEl,i as triggerRow};
@@ -1 +0,0 @@
1
- import{i as F}from"./chunk-4ATI34PB.js";import{$ as nt,K as X,W as Y,X as tt,Z as et,r as J,u as c,v as H,w as q}from"./chunk-7OSCMZ2J.js";var ct=t=>String(t).replace(/[\\"]/g,"\\$&").replace(/[\x00-\x1f\x7f]/g,s=>"\\"+s.charCodeAt(0).toString(16)+" "),z=t=>`url("${ct(t)}")`,N=1<<20,at=t=>t>=N?`${Math.round(t/N*10)/10} MB`:t>=1024?`${Math.round(t/1024)} KB`:`${t} B`,rt=t=>{if(/^data:/i.test(t))return"";let s=t.split(/[?#]/)[0].split("/").pop().replace(/\.\w+$/,"");try{return decodeURIComponent(s)}catch{return s}},gt=/^image\/(gif|svg\+xml)$/i,it=1.5*N,ut=(t,s,n)=>{let o=t.getImageData(0,0,s,n).data;for(let r=3;r<o.length;r+=4)if(o[r]<255)return!0;return!1},ot=(t,s,n)=>new Promise(o=>t.toBlob(r=>o(r&&r.type===s?r:null),s,n)),dt=t=>new Promise((s,n)=>{let o=new FileReader;o.onload=()=>s(String(o.result)),o.onerror=n,o.readAsDataURL(t)}),pt=async(t,s,n)=>{if(!s||gt.test(t.type)||typeof Image>"u"||typeof URL.createObjectURL!="function")return"";let o="";try{o=URL.createObjectURL(t);let r=new Image;r.src=o,await r.decode();let E=r.naturalWidth,y=r.naturalHeight,k=Math.min(1,s/Math.max(E,y));if(!(E>0&&y>0)||k===1&&t.size<=it)return"";let v=document.createElement("canvas"),U=v.width=Math.max(1,Math.round(E*k)),p=v.height=Math.max(1,Math.round(y*k)),h=v.getContext("2d");if(!h)return"";h.imageSmoothingQuality="high",h.drawImage(r,0,0,U,p);let x=/^image\/jpe?g$/i.test(t.type),m=x?null:await ot(v,"image/png");if(!m||m.size>it){let R=await ot(v,!x&&ut(h,U,p)?"image/webp":"image/jpeg",n);R&&(!m||R.size<m.size)&&(m=R)}return m&&m.size<t.size?await dt(m):""}catch{return""}finally{o&&URL.revokeObjectURL(o)}},mt=et('<path d="M12 15V4m-4.5 4.5L12 4l4.5 4.5M4 15v3a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2v-3"/>');function ft(t,s){let n=typeof t.value=="string"?t.value:"",o=new Set,r=(Array.isArray(t.options)?t.options:[]).map(e=>({value:J(e),label:e&&typeof e=="object"&&e.label!=null?String(e.label):""})).filter(e=>typeof e.value=="string"&&!!e.value&&!o.has(e.value)&&!!o.add(e.value)),E=t.upload!==!1||!r.length,y=t.clear!==!1,k=+t.maxSize>0?+t.maxSize:10*N,v=t.fit===!1||t.fit===0?0:typeof t.fit=="number"&&t.fit>=1?Math.round(t.fit):2560,U=typeof t.quality=="number"&&t.quality>0&&t.quality<=1?t.quality:.85,p=c("input","tw-image-input");p.type="file",p.accept="image/*";let h=c("span","tw-image-note"),x=c("span","tw-image-live");x.setAttribute("role","status");let m=[h,x],R,$=e=>{for(let i of m)i.textContent=e;clearTimeout(R),R=setTimeout(()=>{for(let i of m)i.textContent=""},2600)},K=e=>(/^blob:/i.test(e)?"":rt(e))||(/^(data|blob):/i.test(e)?"Uploaded image":"Custom image"),B,D=0,M=(e,i=!0)=>{D++,n=e,B(),i&&s(n)},G=e=>{if(!e)return;if(!e.type.startsWith("image/"))return $("Not an image");if(e.size>k)return $(`${at(e.size)}, max ${at(k)}`);let i=++D;pt(e,v,U).then(f=>{if(D!==i)return;if(f)return M(f);let g=new FileReader;g.onload=()=>{D===i&&M(String(g.result))},g.onerror=()=>$("Couldn't read the file"),g.readAsDataURL(e)})},O=(e,i)=>{let f=()=>!!w.closest(".is-disabled");e.addEventListener("dragover",g=>{f()||(g.preventDefault(),i.dataset.over="true")}),e.addEventListener("dragleave",()=>{i.dataset.over="false"}),e.addEventListener("drop",g=>{i.dataset.over="false",!f()&&(g.preventDefault(),G(g.dataTransfer?.files[0]))})};p.addEventListener("change",()=>{G(p.files?.[0]),p.value=""});let w;if(r.length){let e=F("tw-image",t.label);w=e.root;let i=c("span","tw-trigger-value"),f=c("span","tw-image-note"),g=c("span","tw-trigger-chip tw-image-thumb");e.right.append(g,f,i),m.push(f);let I=c("div","tw-color-pop tw-image-pop tw-image-gallery"),C=E?H("tw-button tw-image-upload",mt):null,j=q("button","tw-image-clear","Clear");j.type="button",j.setAttribute("aria-label",`${t.label}: clear the image`);let S=c("div","tw-image-foot"),P=c("div","tw-image-foot-row"),T=c("div","tw-image-clear-slot");S.append(P),T.append(j);let L=c("div","tw-image-grid");L.setAttribute("role","radiogroup"),L.setAttribute("aria-label",t.label);let V=r.length,W=Math.min(6,Math.max(1,t.cols|0||(V<=3?Math.max(2,V):V===4?2:3)));L.style.setProperty("--tw-img-cols",String(W));let st=(a,u)=>{let d=Y("tw-image-tile",a,l=>M(l));return d.textContent="",d.setAttribute("aria-label",u),d.style.backgroundImage=z(a),d},Q=r.map((a,u)=>a.label||rt(a.value)||`Image ${u+1}`),A=r.map((a,u)=>{let d=st(a.value,Q[u]);return L.append(d),d}),b=H("tw-image-tile tw-image-custom");b.setAttribute("role","radio");let _=()=>b.parentNode?[...A,b]:A;B=()=>{let a=A.findIndex(l=>l._twVal===n);n&&a<0?(b._twVal=n,b.style.backgroundImage=z(n),b.setAttribute("aria-label",K(n)),b.parentNode||L.append(b)):(b.matches(":focus")&&A[Math.max(0,a)].focus(),b.remove());let u=_(),d=Math.max(0,u.findIndex(l=>l._twVal===n));u.forEach((l,lt)=>{let Z=!!n&&l._twVal===n;l.dataset.active=String(Z),l.setAttribute("aria-checked",String(Z)),l.tabIndex=lt===d?0:-1}),T.dataset.open=String(!!n),T.inert=!n,S.dataset.open=String(!!C||y&&!!n),S.inert=S.dataset.open==="false",g.dataset.set=n?"true":"false",g.style.backgroundImage=n?z(n):"",i.textContent=n?a>=0?Q[a]:K(n):"None"},L.addEventListener("keydown",a=>{let u=_(),d=u.indexOf(a.target);if(d<0)return;if(y&&(a.key==="Delete"||a.key==="Backspace")&&!a.altKey&&!a.metaKey&&!a.ctrlKey){a.preventDefault(),A[0].focus(),M("");return}let l=tt(a.key,d,u.length,W);l<0||(a.preventDefault(),l!==d&&(u[l].focus(),M(u[l]._twVal)))}),j.addEventListener("click",()=>{(C||A[0]).focus(),M("")}),I.append(L,S),w.append(I,x),C&&(C.setAttribute("aria-label",`${t.label}: upload an image`),C.append(h,q("span","tw-image-text","Upload image")),C.addEventListener("click",()=>p.click()),P.append(C),w.append(p),O(e.trigger,e.trigger),O(I,I)),y&&P.append(T),X(w,e.trigger,I,{fallbackH:220,initialFocus:()=>_().find(a=>a.tabIndex===0)})}else{let e=F("tw-image",t.label);w=e.root,e.trigger.removeAttribute("aria-expanded"),e.trigger.setAttribute("aria-label",`${t.label}: choose an image`);let i=c("span","tw-image-text"),f=c("span","tw-trigger-chip tw-image-thumb");e.right.append(f,h,i),w.append(p,x),B=()=>{f.dataset.set=n?"true":"false",f.style.backgroundImage=n?z(n):"",i.textContent=n?"Replace":"Drop or choose"},e.trigger.addEventListener("click",()=>p.click()),O(e.trigger,e.trigger)}return B(),{el:w,set:e=>{e!=null&&typeof e!="string"||M(e||"",!1)},get:()=>n,note:$}}nt("image",ft);
@@ -1 +0,0 @@
1
- import{e as tt}from"./chunk-4ATI34PB.js";import{$ as _,B as U,Q as Y,R as Z,g as c,j as K,k as T,l as q,n as G,o as A,p as P,q as C,u as f,w as V,y as J,z as Q}from"./chunk-7OSCMZ2J.js";function st(r,et){let E=r.label,w=+(r.value&&r.value[0]),x=+(r.value&&r.value[1]),N=Number.isFinite(w)?w:0,k=Number.isFinite(x)?x:1,[R,S]=[C(N),C(k)],W=t=>t!=null&&t!==""&&Number.isFinite(+t),{min:n,max:l,step:h}=G(W(r.min)?r.min:Math.min(R[0],S[0]),W(r.max)?r.max:Math.max(R[1],S[1]),r.step,N,k);[n,l]=q(n,l,h);let $=K(h),v=t=>T(t,n,h),i=c(v(Number.isFinite(w)?w:n),n,l),s=c(v(Number.isFinite(x)?x:l),n,l);if(i>s){let t=i;i=s,s=t}let p=f("div","tw-slider-wrap"),a=f("div","tw-slider tw-interval"),F=f("div","tw-slider-fill"),d=f("div","tw-slider-handle"),u=f("div","tw-slider-handle"),L=V("span","tw-slider-label",E),y=f("span","tw-slider-value");a.append(F,d,u,L,y),p.append(a),[["minimum",d],["maximum",u]].forEach(([t,e])=>{e.tabIndex=0,e.setAttribute("role","slider"),e.setAttribute("aria-label",`${E} ${t}`),e.setAttribute("aria-valuemin",String(n)),e.setAttribute("aria-valuemax",String(l))});let M=t=>(t-n)/(l-n||1)*100,D=t=>`clamp(5px, calc(${t}% - 1.5px), calc(100% - 9px))`,m=()=>{let t=M(i),e=M(s);F.style.left=t+"%",F.style.width=Math.max(0,e-t)+"%",d.style.left=D(t),u.style.left=D(e),y.textContent=`${i.toFixed($)} \u2013 ${s.toFixed($)}`,d.setAttribute("aria-valuenow",String(i)),u.setAttribute("aria-valuenow",String(s));let o=p.offsetWidth;if(o){L.style.maxWidth=Math.max(0,o-y.offsetWidth-12-8-10)+"px";let I=it=>P(L,y,it/100*o-1.5,3);d.classList.toggle("is-dodge",I(M(i))),u.classList.toggle("is-dodge",I(M(s)))}};m();let O=()=>et([i,s]),X=t=>{i=c(Math.min(v(t),s),n,l),m()},j=t=>{s=c(Math.max(v(t),i),n,l),m()},b=null,H=1,g=null,nt=t=>{let e=p.offsetWidth||b.width,o=c((t-b.left)/H/e,0,1);return c(n+o*(l-n),n,l)},z=t=>{let e=nt(t);g||(g=e<i?"lo":e>s?"hi":Math.abs(e-i)<=Math.abs(e-s)?"lo":"hi"),g==="lo"?X(e):j(e),O()};tt(a,{onDown:t=>{t.preventDefault(),b=p.getBoundingClientRect(),H=b.width/(p.offsetWidth||b.width),a.style.transition="",a.classList.add("is-active","is-dragging"),g=null,z(t.clientX),(g==="lo"?d:u).focus({focusVisible:!1})},onMove:t=>{z(t.clientX),Y(a,b,t.clientX)},onEnd:()=>{Z(a),b=null,g=null,a.classList.remove("is-active","is-dragging")}}),U(a,m),J(m),Q(a,[[window,"resize"],[window,"tw-reflow"]],m);let B=t=>e=>{let o=t==="lo"?A(e,i,h,n,s):A(e,s,h,i,l);o!=null&&(e.preventDefault(),t==="lo"?X(o):j(o),O())};return d.addEventListener("keydown",B("lo")),u.addEventListener("keydown",B("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=c(v(Math.min(e,o)),n,l),s=c(v(Math.max(e,o)),n,l),m()}},get:()=>[i,s]}}_("interval",st);
@@ -1 +0,0 @@
1
- import{T as L,aa as O,ba as T,f as H,u as k,v as C}from"./chunk-7OSCMZ2J.js";var j=[],F=e=>({...Object.fromEntries(j.map(t=>[t,a(e[t])])),mode:e.mode}),A={slider:e=>({value:a(e.value),min:a(e.min),max:a(e.max),step:a(e.step),soft:v(e.soft),unit:e.unit}),checkbox:e=>e.options?{type:"radiogrid",options:d(e.options),value:e.value,cols:a(e.cols)}:{value:e.checked==="true"},radiogrid:e=>({options:d(e.options),value:e.value,cols:a(e.cols)}),list:e=>({options:d(e.options),value:e.value}),image:e=>({value:e.value,options:e.options?d(e.options):void 0,cols:a(e.cols),maxSize:a(e.maxSize),fit:e.fit==="false"?!1:a(e.fit),quality:a(e.quality),upload:e.upload==="false"?!1:void 0,clear:e.clear==="false"?!1:void 0}),buttongroup:e=>({buttons:d(e.buttons).map(t=>({label:t}))}),separator:()=>({}),number:e=>({value:a(e.value),min:a(e.min),max:a(e.max),step:a(e.step),unit:e.unit}),text:e=>({value:e.value??"",placeholder:e.placeholder,rows:a(e.rows)}),fpsgraph:e=>({label:e.label??"FPS"}),interval:e=>({value:e.value?e.value.split(",").map(Number):void 0,min:a(e.min),max:a(e.max),step:a(e.step)}),sides:e=>({value:e.value??e,corners:v(e.corners),unit:e.unit,step:a(e.step),min:a(e.min),max:a(e.max)}),shadow:e=>({value:e.value??{...e,inset:v(e.inset)}}),spring:F,motion:e=>({...F(e),curve:e.curve&&e.curve.includes(",")?e.curve.split(",").map(Number):e.curve,duration:a(e.duration)}),cubicbezier:e=>({value:e.value?e.value.split(",").map(Number):void 0}),point:e=>{let t=(e.value||"").split(",").map(o=>parseFloat(o));return{components:d(e.components||"X,Y").map((o,i)=>({key:o.toLowerCase(),label:o,value:isNaN(t[i])?0:t[i],step:a(e.step),min:a(e.min),max:a(e.max)})),pad:v(e.pad),invertY:e.invertY==="true"}},plot:e=>({expr:e.expr,xMin:a(e.xmin),xMax:a(e.xmax),yMin:a(e.ymin),yMax:a(e.ymax),samples:a(e.samples),editable:e.editable!=="false"})},a=e=>{if(e==null||e==="")return;let t=+e;return Number.isFinite(t)?t:void 0},v=e=>e==="true"||e==="",d=e=>(e||"").split(",").map(t=>t.trim()).filter(Boolean),Y=(e,t)=>{let o=t.dataset,i=o.tw,y=o.label??H(o.key||i),b=e.hasOwn(A,i)?A[i](o,t,y):e.LAZY_IMPORT[i]||O(i)?{...o}:null;return b?e.metaFor("v",{type:i,label:y,...b}):null},q=(e,t)=>{e.dataset.value=t==null?"":Array.isArray(t)?t.join(","):typeof t=="object"?Object.values(t).join(","):String(t)},I=(e,t,o)=>{q(e,o),e.dispatchEvent(new CustomEvent("tw:change",{bubbles:!0,detail:{key:t,value:o}}))},x=(e,t)=>[...typeof e.matches=="function"&&e.matches(t)?[e]:[],...e.querySelectorAll(t)];async function K(e,t){let{createFolder:o,createControl:i,makeCopyBtn:y,makeResetBtn:b,addHintMarker:R,restoreDefault:B,hasOwn:_,valueChanged:D,ensureForMetas:N}=t;j=t.SPRING_KEYS,x(e,'.tw-panel[data-mode="inline"]:not([data-tw-panel-bound])').forEach(n=>{let r=n.querySelector(":scope > .tw-header"),c=n.querySelector(":scope > .tw-controls");if(!r||!c)return;n.setAttribute("data-tw-panel-bound","");let p=k("div","tw-body");n.insertBefore(p,c),p.append(c);let s=r.querySelector(".tw-header-toggle"),l=r.querySelector(".tw-title");if(!s&&l&&(s=C("tw-header-toggle"),l.replaceWith(s),s.append(l)),!!s&&(s.setAttribute("aria-expanded","true"),s.addEventListener("click",()=>L(n,s,p,!n.classList.contains("is-collapsed"))),!r.querySelector(".tw-toolbar"))){let f=()=>[...n.querySelectorAll("[data-tw]")].map(u=>u._tw).filter(u=>u&&u.ctrl.get()!==void 0),g=()=>{let u=Object.create(null);for(let h of f()){let M=h.key,P=2;for(;_(u,M);)M=`${h.key}-${P++}`;u[M]=h.ctrl.get()}return JSON.stringify(u,null,2)},m=()=>{for(let u of f())u.reset()},S=k("div","tw-toolbar");S.append(y(()=>[g(),-1]),b(m)),r.append(S)}}),x(e,'[data-tw="folder"]:not([data-tw-bound])').forEach(n=>{n.setAttribute("data-tw-bound","");let r=o({label:n.dataset.label||"Folder"});[...n.children].forEach(c=>r.body.append(c)),n.append(r.el)});let w=x(e,"[data-tw]:not([data-tw-bound])").map(n=>({host:n,meta:Y(t,n)})).filter(n=>n.meta);w.forEach(({host:n})=>n.setAttribute("data-tw-bound",""));let E=N(w.map(n=>n.meta));E&&await E.catch(()=>{});for(let{host:n,meta:r}of w){let c=n.dataset.key||r.label,p,s=m=>{D(p,m)&&(p=m,I(n,c,m))},l=i(r,s);if(!l)continue;n.closest(".tw-panel, .tw-portal")||n.classList.add("tw-portal"),n.append(l.el),n.dataset.hint&&R(l.el,n.dataset.hint);let f=l.get();p=f;let g={...l,set:m=>{l.set(m),s(l.get())}};n._tw={ctrl:g,raw:r.value,def:f,key:c,host:n,reset:()=>{B(l,r.value,f),s(l.get())}}}}T(K);export{A as DATA_VALUE};
@@ -1,2 +0,0 @@
1
- import{c as T,h as D}from"./chunk-4ATI34PB.js";import{$ as j,_ as y,g as q,s as L,u as R,w as S}from"./chunk-7OSCMZ2J.js";var G=(n,o,u,m,p,k,N)=>{let r=p.length;n.clearRect(0,0,u,m),n.strokeStyle=T(o),n.lineWidth=1.5,n.lineJoin="round",n.beginPath();let s=!1;for(let l=0;l<r;l++){let a=p[(k+l)%r];if(Number.isNaN(a))continue;let w=l/(r-1)*u,b=m-q(N(a),0,1)*m;s?n.lineTo(w,b):(n.moveTo(w,b),s=!0)}n.stroke()},H=n=>{for(let o of["resize","tw-reflow"])window.addEventListener(o,n);return()=>{for(let o of["resize","tw-reflow"])window.removeEventListener(o,n)}};function J(n,o=!1){let u=typeof n.get=="function"?n.get:()=>n.value,m=Math.max(30,Number.isFinite(+n.interval)?+n.interval:200),p;try{p=u()}catch{}let k=typeof p=="number",N=n.view==="graph"||k&&n.graph!==!1&&n.view!=="text"&&n.rows==null,r=R("div","tw-fps tw-monitor"),s=S("span","tw-fps-val","\u2014");r.append(S("span","tw-fps-label",n.label??"Monitor"),s);let l=0,a=0,w=()=>{},b=!1,W=Number.isFinite(+n.decimals)?Math.min(20,Math.max(0,Math.floor(+n.decimals))):2,d=e=>e==null?"\u2014":typeof e=="number"?Number.isInteger(e)||!Number.isFinite(e)?String(e):e.toFixed(W):typeof e=="object"?L(e):String(e),h=()=>{l&&clearInterval(l),l=0,a&&cancelAnimationFrame(a),a=0,w()},v=e=>{let i=f=>{if(o&&(a=requestAnimationFrame(i)),!r.isConnected){b&&h();return}b=!0;let t;try{t=u(f)}catch{return}e(t)};o?a=requestAnimationFrame(i):l=setInterval(i,m)};if(!N&&n.rows){s.remove();let e=Math.max(1,Math.floor(+n.rows)||1),i=R("pre","tw-monitor-buffer");i.style.setProperty("--tw-monitor-rows",e),r.append(i);let f=[];return v(t=>{for(f.push(d(t));f.length>e;)f.shift();i.textContent=f.join(`
2
- `)}),y(r,h)}if(!N)return v(e=>{s.textContent=d(e)}),y(r,h);let C=document.createElement("canvas");C.className="tw-fps-canvas",r.append(C);let F=C.getContext("2d");if(!F)return v(e=>{s.textContent=d(e)}),y(r,h);let A=80,I=new Array(A).fill(NaN),x=0,M=0,E=0,z=()=>{[M,E]=D(C,F,2)};w=H(z);let B=()=>{if(M||z(),!M)return;let e=n.min,i=n.max;if(e==null||i==null){let t=1/0,c=-1/0;for(let g of I)Number.isFinite(g)&&(g<t&&(t=g),g>c&&(c=g));t===1/0?(t=0,c=1):t===c&&(t-=.5,c+=.5);let P=(c-t)*.1;e==null&&(e=t-P),i==null&&(i=c+P)}let f=i-e||1;G(F,r,M,E,I,x,t=>(t-e)/f)};return v(e=>{if(typeof e!="number"||!Number.isFinite(e)){s.textContent=d(e);return}I[x]=e,x=(x+1)%A,s.textContent=d(e),B()}),y(r,h)}var K=()=>{let n=0;return o=>{if(!(o>0))return;let u=n?1e3/(o-n):void 0;return n=o,u}},O=n=>J({...n,label:n.label??"FPS",get:K(),view:"graph",min:0,max:120,decimals:0},!0);j("fpsgraph",O);j("monitor",n=>J(n));
@@ -1 +0,0 @@
1
- import{a as U,i as re,j as ae,l as X}from"./chunk-4ATI34PB.js";import{$ as oe,K as ne,M as ie,Y as se,aa as L,g as b,h as _,u as a,w as te}from"./chunk-7OSCMZ2J.js";var q={ease:[.25,.1,.25,1],linear:[0,0,1,1],"ease-in":[.42,0,1,1],"ease-out":[0,0,.58,1],"ease-in-out":[.42,0,.58,1]},ye=300,F=1e4,he=16,ue=.9,r=e=>typeof e=="number"?Number.isFinite(e):typeof e=="string"&&e.trim()!==""&&Number.isFinite(+e),B=e=>{if(typeof e=="string")return Object.prototype.hasOwnProperty.call(q,e)?q[e].slice():null;if(Array.isArray(e)&&e.length===4){let o=e.map(Number);return o.every(Number.isFinite)?o:null}return null},ce=e=>r(e.stiffness)||r(e.damping)||r(e.mass)||r(e.visualDuration)||r(e.bounce),pe=e=>{let o={mode:"time"};if(r(e.stiffness)){let M=+e.stiffness,w=r(e.mass)?+e.mass:1,g=Math.sqrt(M/w);o.visualDuration=2*Math.PI/g,r(e.damping)&&(o.bounce=b(1-+e.damping/(2*Math.sqrt(M*w)),0,ue))}return r(e.visualDuration)&&(o.visualDuration=+e.visualDuration),r(e.bounce)&&(o.bounce=b(+e.bounce,0,ue)),o},le=(e,o)=>e.mode==="spring"||e.mode==="easing"?e.mode:ce(e)?"spring":B(e.curve)?"easing":o;function ve(e,o){let M=L("cubicbezier"),w=L("spring");if(!M||!w)throw new Error("[tweaks] motion: the bezier and spring controls are not loaded");let g=_(e.value)?e.value:{},i=le(g,"easing"),l=B(g.curve)??q.ease.slice(),y=r(g.duration)?b(+g.duration,0,F):ye,{root:I,trigger:me,right:de}=re("tw-motion",e.label??"Motion"),H=a("span","tw-trigger-chip tw-motion-chip"),E=U("svg");E.setAttribute("viewBox","0 0 100 100"),E.setAttribute("preserveAspectRatio","none");let V=U("path");E.append(V),H.append(E);let W=a("span","tw-trigger-value");de.append(H,W);let R=a("div","tw-color-pop tw-motion-pop"),G=a("div","tw-motion-body");R.append(G);let C=M({...e,type:"cubicbezier",label:"",value:l.slice()},t=>{l=t,v(),S()});l=C.get();let p=w({...e,type:"spring",label:"",value:pe(g)},()=>{v(),S()}),D=ae({label:"Duration",value:y,step:10,min:0,max:F,unit:"ms"},t=>{y=b(t,0,F),v(),S()});y=D.get();let $=a("div","tw-motion-pane"),j=a("div","tw-motion-pane"),K=a("div","tw-fields");K.append(D.el),$.append(C.el,K),j.append(p.el);let c=a("div","tw-motion-stage"),h=a("div","tw-motion-box");c.append(h);let O=se([{value:"easing",label:"Easing"},{value:"spring",label:"Spring"}],i,t=>{(t==="easing"||t==="spring")&&t!==i&&(i=t,z(),v(),S())},"Motion type"),J=a("div","tw-row");J.append(te("span","tw-row-label","Type"),O.el),G.append(J,$,j,c),I.append(R);let P=()=>{if(i==="easing")return{mode:i,curve:l.slice(),duration:y,easing:`cubic-bezier(${l.join(", ")})`};let t=p.get(),n=7/Math.max(t.damping/(2*t.mass),.5),u=b(Math.round(n*40),48,240);return{mode:i,...t,duration:Math.round(n*1e3),easing:`linear(${X(t.stiffness,t.damping,t.mass,u,n).map(s=>+s.toFixed(3)).join(", ")})`}},S=()=>o(P()),x=!1,A=null,k=t=>{if(t)x=!x;else if(A&&A.playState==="running")return;let n=P(),u=Math.max(0,c.clientWidth-h.offsetWidth-2*he),s=`translateX(${x?0:u}px)`,m=`translateX(${x?u:0}px)`;if(ie.matches||typeof h.animate!="function"){h.style.transform=m;return}A?.cancel();let d=[{transform:s},{transform:m}];try{A=h.animate(d,{duration:n.duration,easing:n.easing,fill:"forwards"})}catch{A=h.animate(d,{duration:n.duration,fill:"forwards"})}};c.addEventListener("click",()=>k(!0)),c.tabIndex=0,c.setAttribute("role","button"),c.setAttribute("aria-label","Replay the motion"),c.addEventListener("keydown",t=>{(t.key==="Enter"||t.key===" ")&&(t.preventDefault(),k(!0))});let ge=()=>{let t;if(i==="easing"){let[s,m,d,be]=l;t=[];for(let N=0;N<=24;N++){let f=N/24,T=1-f,Y=3*T*T*f,Z=3*T*f*f,ee=f*f*f;t.push([Y*s+Z*d+ee,Y*m+Z*be+ee])}}else{let s=p.get();t=X(s.stiffness,s.damping,s.mass,32).map((m,d)=>[d/31,m])}let n=Math.max(1,...t.map(s=>s[1])),u=Math.min(0,...t.map(s=>s[1]));return t.map(([s,m],d)=>`${d?"L":"M"}${(10+s*80).toFixed(1)},${(90-(m-u)/(n-u)*80).toFixed(1)}`).join(" ")},Q=()=>{i==="easing"?C.set(l.slice()):p.set(p.get())},z=()=>{$.style.display=i==="easing"?"":"none",j.style.display=i==="spring"?"":"none",Q()},fe=()=>i==="easing"?`Easing \xB7 ${y} ms`:`Spring \xB7 ${Math.round((p.get().visualDuration??0)*1e3)} ms`,v=()=>{V.setAttribute("d",ge()),W.textContent=fe(),k(!1)};return ne(I,me,R,{fallbackH:380,onOpen:()=>{O.set(i),Q(),k(!0)},initialFocus:()=>O.el.querySelector('[tabindex="0"]')}),z(),v(),{el:I,set:t=>{let n=typeof t=="string"?{curve:t}:Array.isArray(t)&&t.length===4?{curve:t}:_(t)?t:null;if(!n)return;i=le(n,i);let u=B(n.curve);u&&(C.set(u.slice()),l=C.get()),i==="easing"&&r(n.duration)&&(D.set(b(+n.duration,0,F)),y=D.get()),ce(n)&&p.set(pe(n)),O.set(i),z(),v()},get:P,destroy:()=>p.destroy&&p.destroy()}}oe("motion",ve);
@@ -1,2 +0,0 @@
1
- import{a as k}from"./chunk-4ATI34PB.js";import{$ as G,C as D,g as $,u as N,w as S,y as Y,z as Z}from"./chunk-7OSCMZ2J.js";var W=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:(r,f)=>r%f,clamp:(r,f,o)=>Math.min(Math.max(r,f),o)}),U=Object.assign(Object.create(null),{pi:Math.PI,e:Math.E,tau:Math.PI*2,phi:(1+Math.sqrt(5))/2});function q(r){if(typeof r!="string"||!r.trim()||r.length>512)return null;let f=r,o=[],p=/\d*\.?\d+(?:[eE][+-]?\d+)?/y,d=/[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"){p.lastIndex=a;let n=p.exec(f);if(!n||n.index!==a)return null;o.push({t:"num",v:parseFloat(n[0])}),a=p.lastIndex;continue}if(t>="A"&&t<="Z"||t>="a"&&t<="z"||t==="_"){d.lastIndex=a;let n=d.exec(f);o.push({t:"id",v:n[0]}),a=d.lastIndex;continue}if(t==="*"&&f[a+1]==="*"){o.push({t:"op",v:"^"}),a+=2;continue}if("+-*/%^".includes(t)){o.push({t:"op",v:t}),a++;continue}if(t==="("){o.push({t:"lp"}),a++;continue}if(t===")"){o.push({t:"rp"}),a++;continue}if(t===","){o.push({t:"comma"}),a++;continue}return null}if(!o.length)return null;let m=0,l=()=>o[m],s=t=>{let n=o[m];return!n||t&&n.t!==t?null:(m++,n)},x=()=>{let t=b();if(!t)return null;for(;l()&&l().t==="op"&&(l().v==="+"||l().v==="-");){let n=s("op").v,i=b();if(!i)return null;let c=t;t=n==="+"?e=>c(e)+i(e):e=>c(e)-i(e)}return t},b=()=>{let t=M();if(!t)return null;for(;l()&&l().t==="op"&&(l().v==="*"||l().v==="/"||l().v==="%");){let n=s("op").v,i=M();if(!i)return null;let c=t;t=n==="*"?e=>c(e)*i(e):n==="/"?e=>c(e)/i(e):e=>c(e)%i(e)}return t},M=()=>{if(l()&&l().t==="op"&&(l().v==="-"||l().v==="+")){let t=s("op").v,n=M();return n?t==="-"?i=>-n(i):n:null}return g()},g=()=>{let t=F();if(!t)return null;if(l()&&l().t==="op"&&l().v==="^"){s("op");let n=M();return n?i=>Math.pow(t(i),n(i)):null}return t},F=()=>{let t=l();if(!t)return null;if(t.t==="num")return s("num"),()=>t.v;if(t.t==="lp"){s("lp");let n=x();return!n||!s("rp")?null:n}if(t.t==="id"){s("id");let n=t.v.toLowerCase();if(l()&&l().t==="lp"){let i=W[n];if(!i)return null;s("lp");let c=[];if(l()&&l().t!=="rp")do{let e=x();if(!e)return null;c.push(e)}while(s("comma"));return s("rp")?e=>i(...c.map(L=>L(e))):null}if(n==="x")return i=>i;if(n in U){let i=U[n];return()=>i}return null}return null},w=x();return w&&m===o.length?w:null}function X(r,f){let o=Number(r.xMin??r.min),p=Number(r.xMax??r.max);if(Number.isFinite(o)||(o=-10),Number.isFinite(p)||(p=10),p<o){let e=o;o=p,p=e}p===o&&(o-=1,p+=1);let d=Math.max(2,Math.min(4096,r.samples|0||256)),a=Number.isFinite(r.yMin)&&Number.isFinite(r.yMax)&&+r.yMax>+r.yMin,m=typeof r.fn=="function"?r.fn:null,l=r.editable!==!1&&!m,s=r.expr!=null?String(r.expr):m?"":"sin(x)",x=m||q(s),b=N("div","tw-plot");r.label&&b.append(S("div","tw-plot-label",r.label));let M=N("div","tw-plot-graph"),g=k("svg","tw-plot-svg");g.setAttribute("preserveAspectRatio","none");let F=k("line","tw-plot-axis"),w=k("line","tw-plot-axis"),t=k("path","tw-plot-curve");g.append(F,w,t),M.append(g),b.append(M);let n=null;if(l){let e=N("div","tw-plot-field");n=N("input","tw-plot-input"),n.type="text",n.value=s,n.spellcheck=!1,n.autocapitalize="off",D(n),n.setAttribute("aria-label",`${r.label||"Plot"} \u2014 expression in x`),n.setAttribute("aria-invalid","false"),e.append(S("span","tw-plot-fx","y ="),n),b.append(e)}let i=6,c=()=>{let e=typeof x=="function";b.classList.toggle("is-invalid",l&&!e),n&&n.setAttribute("aria-invalid",l&&!e?"true":"false");let L=M.getBoundingClientRect(),C=L.width,I=L.height;if(C<2)return;g.setAttribute("viewBox",`0 0 ${C} ${I}`);let z=[],v=1/0,E=-1/0;if(e)for(let u=0;u<d;u++){let y=o+(p-o)*(u/(d-1)),h;try{h=x(y)}catch{h=NaN}z.push(h),Number.isFinite(h)&&(h<v&&(v=h),h>E&&(E=h))}let A=r.yMin,O=r.yMax;if(!a)if(!Number.isFinite(v)||v===E){let u=Number.isFinite(v)?v:0;A=u-1,O=u+1}else{let u=(E-v)*.12;A=v-u,O=E+u}let P=u=>i+(u-o)/(p-o)*(C-2*i),j=u=>I-i-(u-A)/(O-A)*(I-2*i),B=(u,y,h,T,V,H)=>{u.style.display=H?"":"none",H&&(u.setAttribute("x1",y),u.setAttribute("y1",h),u.setAttribute("x2",T),u.setAttribute("y2",V))};B(F,i,j(0),C-i,j(0),A<=0&&O>=0),B(w,P(0),i,P(0),I-i,o<=0&&p>=0);let _="",R=!1;if(e)for(let u=0;u<d;u++){let y=z[u];if(!Number.isFinite(y)){R=!1;continue}let h=P(o+(p-o)*(u/(d-1))),T=$(j(y),-1e4,1e4);_+=(R?"L":"M")+h.toFixed(1)+","+T.toFixed(1)+" ",R=!0}t.setAttribute("d",_)};return l&&n.addEventListener("input",()=>{s=n.value,x=q(s),c(),f(s)}),Y(c),Z(b,[[window,"resize"],[window,"tw-reflow"]],c),{el:b,get:()=>s,set:e=>{e!=null&&(s=String(e),n&&(n.value=s),m||(x=q(s)),c())}}}G("plot",X);export{q as compileExpr};
@@ -1 +0,0 @@
1
- import{a as L,f as K,g as U,i as q,j as z}from"./chunk-4ATI34PB.js";import{$ as G,K as X,da as I,g as $,j as N,q as V,u as a}from"./chunk-7OSCMZ2J.js";function et(l,J){let o=l.components,{root:D,trigger:Q,right:W}=q("tw-point",l.label??"Point"),Y=a("span","tw-trigger-value"),j=a("div","tw-trigger-chip tw-point-preview"),y=a("div","tw-point-preview-dot");j.append(y),W.append(j,Y);let T=a("div","tw-color-pop tw-point-pop"),M=a("div","tw-point-body");T.append(M);let H=l.pad!==!1&&o.length>=2,Z=t=>{let e=V(Math.abs(Number.isFinite(+t.value)?+t.value:0))[1],r=t.min??-e,v=t.max??e,f=10**Math.floor(Math.log10((v-r)/200));return{lo:r,hi:v,step:t.step??(f>0&&Number.isFinite(f)?f:1)}},w=o.map(Z),x=w[0],h=w[1],b=x?.lo??-1,k=x?.hi??1,g=h?.lo??-1,A=h?.hi??1,E=(t,e,r)=>r>e?$((t-e)/(r-e),0,1):.5,s=null,C=null,m=null;if(H){s=a("div","tw-pad"),C=a("div","tw-pad-thumb");let t=L("svg","tw-pad-line");t.setAttribute("viewBox","0 0 100 100"),t.setAttribute("preserveAspectRatio","none"),m=L("line"),t.append(m);let e=E(0,g,A);m.setAttribute("x1",E(0,b,k)*100),m.setAttribute("y1",(l.invertY?e:1-e)*100),s.append(a("div","tw-pad-axis tw-pad-axis-x"),a("div","tw-pad-axis tw-pad-axis-y"),t,C),M.append(s)}let R=a("div","tw-fields");M.append(R);let c=()=>{B(),_()},F=()=>J(S()),i=o.map((t,e)=>{let r=z({label:t.label,value:t.value??0,step:w[e].step,min:t.min,max:t.max},()=>{c(),F()});return R.append(r.el),r}),S=()=>Object.fromEntries(o.map((t,e)=>[t.key,i[e].get()])),O=(t,e)=>(+t).toFixed(N(e)),_=()=>{Y.textContent=i.map((t,e)=>O(t.get(),w[e].step)).join(", ")},B=()=>{y.style.left="50%",y.style.top="50%"};if(H){let e=n=>`calc(${(n*100).toFixed(2)}% + ${((.5-n)*5).toFixed(2)}px)`;B=()=>{let n=E(i[0].get(),b,k),d=E(i[1].get(),g,A),p=l.invertY?d:1-d,u=n*100,P=p*100;C.style.left=u+"%",C.style.top=P+"%",y.style.left=e(n),y.style.top=e(p),m.setAttribute("x2",u),m.setAttribute("y2",P),s.setAttribute("aria-description",`${o[0].label??o[0].key} ${O(i[0].get(),x.step)}, ${o[1].label??o[1].key} ${O(i[1].get(),h.step)}`)},K(s,n=>{let[d,p]=U(n,s),u=l.invertY?p:1-p;i[0].set(b+d*(k-b)),i[1].set(g+u*(A-g)),c(),F()}),s.tabIndex=0,s.setAttribute("role","group"),s.setAttribute("aria-label",`${l.label??"Point"} pad: ${o[0].label??o[0].key} and ${o[1].label??o[1].key}`);let v=0,f=()=>{clearTimeout(v),v=setTimeout(()=>{s.isConnected&&I(s.getAttribute("aria-description")||"")},250)};s.addEventListener("keydown",n=>{if(n.key==="Home"){n.preventDefault(),o.forEach((P,tt)=>i[tt].set(P.value??0)),c(),F(),f();return}let d=n.key==="ArrowRight"?1:n.key==="ArrowLeft"?-1:0,p=n.key==="ArrowUp"?1:n.key==="ArrowDown"?-1:0;if(!d&&!p)return;n.preventDefault();let u=n.shiftKey?10:1;d&&i[0].set($(i[0].get()+d*x.step*u,b,k)),p&&i[1].set($(i[1].get()+(l.invertY?-p:p)*h.step*u,g,A)),c(),F(),f()})}return D.append(T),X(D,Q,T,{fallbackH:240,onOpen:c}),c(),{el:D,set:t=>{t&&o.forEach((e,r)=>{t[e.key]!=null&&i[r].set(t[e.key])}),c()},get:S}}G("point",et);
@@ -1 +0,0 @@
1
- import{d as m,f as Q}from"./chunk-W3JNIJ2F.js";import{i as J,j as K}from"./chunk-4ATI34PB.js";import{$ as G,K as Y,Y as q,Z as z,h as D,u as l,v as X,w as M}from"./chunk-7OSCMZ2J.js";var b={x:0,y:8,blur:24,spread:0,color:"rgb(0 0 0 / 0.18)"},w=(n,c)=>n!=null&&n!==""&&Number.isFinite(+n)?+n:c,i=n=>String(+n.toFixed(1)),oe=/#[0-9a-f]{3,8}\b|(?:oklch|oklab|rgba?|hsla?|hwb|lab|lch|color)\([^()]*\)/i,re=/^(-?\d*\.?\d+)(px)?$/,se=n=>{let c=oe.exec(n);if(!c||!m(c[0]))return null;let h=(n.slice(0,c.index)+" "+n.slice(c.index+c[0].length)).trim().split(/\s+/).filter(Boolean),p=h.includes("inset"),r=h.filter(o=>o!=="inset");if(r.length<2||r.length>4||!r.every(o=>re.test(o)))return null;let s=r.map(o=>+o.replace(/px$/,""));return{inset:p,x:s[0],y:s[1],blur:s[2]??0,spread:s[3]??0,color:c[0]}},le=z('<path d="M18 9s-4.4 6-6 6-6-6-6-6"/>',"tw-shadow-chevron",2.5);function ie(n,c){let h=e=>typeof e=="string"?se(e):D(e)?e:null,p=h(n.value??n)||{},r=!!p.inset,s=w(p.x,b.x),o=w(p.y,b.y),u=Math.max(0,w(p.blur,b.blur)),d=w(p.spread,b.spread),{root:y,trigger:U,right:W}=J("tw-shadow",n.label??"Shadow"),F=l("span","tw-trigger-chip tw-shadow-chip"),j=l("span","tw-shadow-chip-tile");F.append(j);let N=l("span","tw-trigger-value");W.append(F,N);let S=l("div","tw-color-pop tw-shadow-pop"),A=l("div","tw-shadow-stage"),I=l("div","tw-shadow-card");A.append(I);let L=q([{value:"outer",label:"Outer"},{value:"inner",label:"Inner"}],r?"inner":"outer",e=>{e==="inner"!==r&&(r=e==="inner",g(),E())},"Shadow position"),T=l("div","tw-row");T.append(M("span","tw-row-label","Position"),L.el);let B=l("div","tw-fields tw-shadow-fields"),x=(e,t,ee,te)=>{let P=K({label:e,value:t(),step:1,min:te,unit:"px"},ne=>{ee(ne),g(),E()});return B.append(P.el),P},v=x("X",()=>s,e=>{s=e}),$=x("Y",()=>o,e=>{o=e}),C=x("Blur",()=>u,e=>{u=Math.max(0,e)},0),R=x("Spread",()=>d,e=>{d=e});s=v.get(),o=$.get(),u=C.get(),d=R.get();let f=X("tw-trigger tw-shadow-color");f.setAttribute("aria-expanded","false");let H=l("span","tw-trigger-chip tw-color-swatch"),V=l("span","tw-trigger-value"),O=l("span","tw-trigger-right");O.append(H,V),O.insertAdjacentHTML("beforeend",le),f.append(M("span","tw-trigger-label","Colour"),O);let a=Q({value:typeof p.color=="string"&&m(p.color)?p.color:b.color,onMode:()=>g()},()=>{g(),E()});a.el.hidden=!0,f.addEventListener("click",()=>{let e=a.el.hidden;a.el.hidden=!e,f.setAttribute("aria-expanded",String(e)),Z.reflow()}),S.append(A,T,B,f,a.el),y.append(S);let k=e=>`${r?"inset ":""}${i(s*e)}px ${i(o*e)}px ${i(u*e)}px ${i(d*e)}px ${a.get()}`,_=()=>({inset:r,x:+i(s),y:+i(o),blur:+i(u),spread:+i(d),color:a.get(),css:k(1)}),E=()=>c(_()),g=()=>{I.style.boxShadow=k(1),j.style.boxShadow=k(.3),N.textContent=`${r?"in ":""}${i(s)} ${i(o)} ${i(u)}${d?" "+i(d):""}`,H.style.background=a.swatchCss(),V.textContent=a.valueText()},Z=Y(y,U,S,{fallbackH:300,onOpen:a.reflow,onReflow:a.reflow});return g(),{el:y,set:e=>{let t=h(e);t&&(t.inset!=null&&(r=!!t.inset,L.set(r?"inner":"outer")),t.x!=null&&(v.set(w(t.x,s)),s=v.get()),t.y!=null&&($.set(w(t.y,o)),o=$.get()),t.blur!=null&&(C.set(w(t.blur,u)),u=C.get()),t.spread!=null&&(R.set(w(t.spread,d)),d=R.get()),typeof t.color=="string"&&m(t.color)&&a.set(t.color),g())},get:_}}G("shadow",ie);