@wow-two-beta/ui 0.0.3 → 0.0.5

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 (83) hide show
  1. package/dist/actions/index.d.ts +240 -2
  2. package/dist/actions/index.js +5 -2
  3. package/dist/chunk-33IOXQYO.js +47 -0
  4. package/dist/chunk-33IOXQYO.js.map +1 -0
  5. package/dist/chunk-4CIRBYYP.js +120 -0
  6. package/dist/chunk-4CIRBYYP.js.map +1 -0
  7. package/dist/chunk-6NYTRHP7.js +168 -0
  8. package/dist/chunk-6NYTRHP7.js.map +1 -0
  9. package/dist/chunk-77WSI427.js +39 -0
  10. package/dist/chunk-77WSI427.js.map +1 -0
  11. package/dist/chunk-BMBIZLO4.js +34 -0
  12. package/dist/chunk-BMBIZLO4.js.map +1 -0
  13. package/dist/chunk-D67WGR7Y.js +212 -0
  14. package/dist/chunk-D67WGR7Y.js.map +1 -0
  15. package/dist/chunk-DN7WBRIV.js +17 -0
  16. package/dist/chunk-DN7WBRIV.js.map +1 -0
  17. package/dist/chunk-JCMV6IT4.js +268 -0
  18. package/dist/chunk-JCMV6IT4.js.map +1 -0
  19. package/dist/chunk-JTJEI6MF.js +11 -0
  20. package/dist/chunk-JTJEI6MF.js.map +1 -0
  21. package/dist/chunk-KSJE3JAI.js +604 -0
  22. package/dist/chunk-KSJE3JAI.js.map +1 -0
  23. package/dist/chunk-KZ4VFY2T.js +11 -0
  24. package/dist/chunk-KZ4VFY2T.js.map +1 -0
  25. package/dist/chunk-MP4OTUFA.js +318 -0
  26. package/dist/chunk-MP4OTUFA.js.map +1 -0
  27. package/dist/chunk-Q27NAHVB.js +34 -0
  28. package/dist/chunk-Q27NAHVB.js.map +1 -0
  29. package/dist/chunk-SYG6ZE42.js +218 -0
  30. package/dist/chunk-SYG6ZE42.js.map +1 -0
  31. package/dist/chunk-TDX22OWF.js +33 -0
  32. package/dist/chunk-TDX22OWF.js.map +1 -0
  33. package/dist/chunk-YLN7VMYU.js +275 -0
  34. package/dist/chunk-YLN7VMYU.js.map +1 -0
  35. package/dist/display/index.d.ts +805 -1
  36. package/dist/display/index.js +6 -1
  37. package/dist/feedback/index.d.ts +506 -1
  38. package/dist/feedback/index.js +5 -1
  39. package/dist/forms/index.d.ts +217 -1
  40. package/dist/forms/index.js +8 -1
  41. package/dist/hooks/index.d.ts +2 -5
  42. package/dist/hooks/index.js +4 -1
  43. package/dist/icons/index.d.ts +2 -5
  44. package/dist/icons/index.js +3 -1
  45. package/dist/index-Bk6CuDNT.d.ts +247 -0
  46. package/dist/index-C0IDphm_.d.ts +61 -0
  47. package/dist/index-CEAM9LLM.d.ts +37 -0
  48. package/dist/index-PAuwodyY.d.ts +103 -0
  49. package/dist/index-goThcZ1E.d.ts +416 -0
  50. package/dist/index.d.ts +13 -5
  51. package/dist/index.js +16 -9
  52. package/dist/layout/index.d.ts +605 -1
  53. package/dist/layout/index.js +5 -1
  54. package/dist/primitives/index.d.ts +5 -0
  55. package/dist/primitives/index.js +10 -0
  56. package/dist/primitives/index.js.map +1 -0
  57. package/dist/tailwind/index.js +8 -2
  58. package/dist/tailwind/index.js.map +1 -1
  59. package/dist/tokens/index.d.ts +1 -1
  60. package/dist/tokens/index.js +1 -1
  61. package/dist/utils/index.d.ts +3 -1
  62. package/dist/utils/index.js +3 -1
  63. package/package.json +8 -1
  64. package/dist/chunk-6YKPUEHU.js +0 -47
  65. package/dist/chunk-6YKPUEHU.js.map +0 -1
  66. package/dist/chunk-7CP7KR5F.js +0 -41
  67. package/dist/chunk-7CP7KR5F.js.map +0 -1
  68. package/dist/chunk-A2OBJDIK.js +0 -3
  69. package/dist/chunk-A2OBJDIK.js.map +0 -1
  70. package/dist/chunk-CTVGU35H.js +0 -6
  71. package/dist/chunk-CTVGU35H.js.map +0 -1
  72. package/dist/chunk-ECZ4YFAI.js +0 -16
  73. package/dist/chunk-ECZ4YFAI.js.map +0 -1
  74. package/dist/chunk-PSDQXPUE.js +0 -3
  75. package/dist/chunk-PSDQXPUE.js.map +0 -1
  76. package/dist/chunk-U4JXXIE2.js +0 -6
  77. package/dist/chunk-U4JXXIE2.js.map +0 -1
  78. package/dist/chunk-YP4MAZRQ.js +0 -3
  79. package/dist/chunk-YP4MAZRQ.js.map +0 -1
  80. package/dist/chunk-ZDU7SROW.js +0 -3
  81. package/dist/chunk-ZDU7SROW.js.map +0 -1
  82. package/dist/index-CdSRWb8y.d.ts +0 -78
  83. package/dist/index-D-adCzNR.d.ts +0 -14
@@ -0,0 +1,39 @@
1
+ import { useEffect } from 'react';
2
+
3
+ // src/hooks/useScrollLock.ts
4
+ var lockCount = 0;
5
+ var originalOverflow = null;
6
+ var originalPaddingRight = null;
7
+ function getScrollbarWidth() {
8
+ return window.innerWidth - document.documentElement.clientWidth;
9
+ }
10
+ function useScrollLock(enabled = true) {
11
+ useEffect(() => {
12
+ if (!enabled) return;
13
+ if (lockCount === 0) {
14
+ const body = document.body;
15
+ const scrollbarWidth = getScrollbarWidth();
16
+ originalOverflow = body.style.overflow;
17
+ originalPaddingRight = body.style.paddingRight;
18
+ body.style.overflow = "hidden";
19
+ if (scrollbarWidth > 0) {
20
+ body.style.paddingRight = `${scrollbarWidth}px`;
21
+ }
22
+ }
23
+ lockCount += 1;
24
+ return () => {
25
+ lockCount -= 1;
26
+ if (lockCount === 0) {
27
+ const body = document.body;
28
+ body.style.overflow = originalOverflow ?? "";
29
+ body.style.paddingRight = originalPaddingRight ?? "";
30
+ originalOverflow = null;
31
+ originalPaddingRight = null;
32
+ }
33
+ };
34
+ }, [enabled]);
35
+ }
36
+
37
+ export { useScrollLock };
38
+ //# sourceMappingURL=chunk-77WSI427.js.map
39
+ //# sourceMappingURL=chunk-77WSI427.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/useScrollLock.ts"],"names":[],"mappings":";;;AAEA,IAAI,SAAA,GAAY,CAAA;AAChB,IAAI,gBAAA,GAAkC,IAAA;AACtC,IAAI,oBAAA,GAAsC,IAAA;AAE1C,SAAS,iBAAA,GAA4B;AACnC,EAAA,OAAO,MAAA,CAAO,UAAA,GAAa,QAAA,CAAS,eAAA,CAAgB,WAAA;AACtD;AAOO,SAAS,aAAA,CAAc,UAAU,IAAA,EAAY;AAClD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,cAAc,CAAA,EAAG;AACnB,MAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,MAAA,MAAM,iBAAiB,iBAAA,EAAkB;AACzC,MAAA,gBAAA,GAAmB,KAAK,KAAA,CAAM,QAAA;AAC9B,MAAA,oBAAA,GAAuB,KAAK,KAAA,CAAM,YAAA;AAClC,MAAA,IAAA,CAAK,MAAM,QAAA,GAAW,QAAA;AACtB,MAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,QAAA,IAAA,CAAK,KAAA,CAAM,YAAA,GAAe,CAAA,EAAG,cAAc,CAAA,EAAA,CAAA;AAAA,MAC7C;AAAA,IACF;AACA,IAAA,SAAA,IAAa,CAAA;AAEb,IAAA,OAAO,MAAM;AACX,MAAA,SAAA,IAAa,CAAA;AACb,MAAA,IAAI,cAAc,CAAA,EAAG;AACnB,QAAA,MAAM,OAAO,QAAA,CAAS,IAAA;AACtB,QAAA,IAAA,CAAK,KAAA,CAAM,WAAW,gBAAA,IAAoB,EAAA;AAC1C,QAAA,IAAA,CAAK,KAAA,CAAM,eAAe,oBAAA,IAAwB,EAAA;AAClD,QAAA,gBAAA,GAAmB,IAAA;AACnB,QAAA,oBAAA,GAAuB,IAAA;AAAA,MACzB;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AACd","file":"chunk-77WSI427.js","sourcesContent":["import { useEffect } from 'react';\n\nlet lockCount = 0;\nlet originalOverflow: string | null = null;\nlet originalPaddingRight: string | null = null;\n\nfunction getScrollbarWidth(): number {\n return window.innerWidth - document.documentElement.clientWidth;\n}\n\n/**\n * Prevent body scroll while at least one consumer has the lock active.\n * Internally counted — multiple overlays may lock; only the last unlock restores.\n * Compensates for scrollbar width to avoid layout shift.\n */\nexport function useScrollLock(enabled = true): void {\n useEffect(() => {\n if (!enabled) return;\n if (lockCount === 0) {\n const body = document.body;\n const scrollbarWidth = getScrollbarWidth();\n originalOverflow = body.style.overflow;\n originalPaddingRight = body.style.paddingRight;\n body.style.overflow = 'hidden';\n if (scrollbarWidth > 0) {\n body.style.paddingRight = `${scrollbarWidth}px`;\n }\n }\n lockCount += 1;\n\n return () => {\n lockCount -= 1;\n if (lockCount === 0) {\n const body = document.body;\n body.style.overflow = originalOverflow ?? '';\n body.style.paddingRight = originalPaddingRight ?? '';\n originalOverflow = null;\n originalPaddingRight = null;\n }\n };\n }, [enabled]);\n}\n"]}
@@ -0,0 +1,34 @@
1
+ import { composeRefs } from './chunk-DN7WBRIV.js';
2
+ import { cn } from './chunk-KZ4VFY2T.js';
3
+ import { __export } from './chunk-PZ5AY32C.js';
4
+ import { tv } from 'tailwind-variants';
5
+ export { tv } from 'tailwind-variants';
6
+
7
+ // src/utils/index.ts
8
+ var utils_exports = {};
9
+ __export(utils_exports, {
10
+ cn: () => cn,
11
+ composeEventHandlers: () => composeEventHandlers,
12
+ composeRefs: () => composeRefs,
13
+ dataAttr: () => dataAttr,
14
+ tv: () => tv
15
+ });
16
+
17
+ // src/utils/composeEventHandlers.ts
18
+ function composeEventHandlers(theirHandler, ourHandler, { checkForDefaultPrevented = true } = {}) {
19
+ return (event) => {
20
+ theirHandler?.(event);
21
+ if (!checkForDefaultPrevented || !event.defaultPrevented) {
22
+ ourHandler(event);
23
+ }
24
+ };
25
+ }
26
+
27
+ // src/utils/dataAttr.ts
28
+ function dataAttr(condition) {
29
+ return condition ? "" : void 0;
30
+ }
31
+
32
+ export { composeEventHandlers, dataAttr, utils_exports };
33
+ //# sourceMappingURL=chunk-BMBIZLO4.js.map
34
+ //# sourceMappingURL=chunk-BMBIZLO4.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/index.ts","../src/utils/composeEventHandlers.ts","../src/utils/dataAttr.ts"],"names":[],"mappings":";;;;;;;AAAA,IAAA,aAAA,GAAA;AAAA,QAAA,CAAA,aAAA,EAAA;AAAA,EAAA,EAAA,EAAA,MAAA,EAAA;AAAA,EAAA,oBAAA,EAAA,MAAA,oBAAA;AAAA,EAAA,WAAA,EAAA,MAAA,WAAA;AAAA,EAAA,QAAA,EAAA,MAAA,QAAA;AAAA,EAAA,EAAA,EAAA,MAAA;AAAA,CAAA,CAAA;;;ACQO,SAAS,oBAAA,CACd,cACA,UAAA,EACA,EAAE,2BAA2B,IAAA,EAAK,GAA4C,EAAC,EAC3D;AACpB,EAAA,OAAO,CAAC,KAAA,KAAU;AAChB,IAAA,YAAA,GAAe,KAAK,CAAA;AACpB,IAAA,IAAI,CAAC,wBAAA,IAA4B,CAAC,KAAA,CAAM,gBAAA,EAAkB;AACxD,MAAA,UAAA,CAAW,KAAK,CAAA;AAAA,IAClB;AAAA,EACF,CAAA;AACF;;;ACdO,SAAS,SAAS,SAAA,EAAgD;AACvE,EAAA,OAAO,YAAY,EAAA,GAAK,MAAA;AAC1B","file":"chunk-BMBIZLO4.js","sourcesContent":["export { cn } from './cn';\nexport { composeRefs } from './composeRefs';\nexport { composeEventHandlers } from './composeEventHandlers';\nexport { dataAttr } from './dataAttr';\nexport { tv, type VariantProps } from './tv';\nexport type {\n PolymorphicProps,\n PolymorphicPropsWithoutRef,\n PolymorphicRef,\n} from './polymorphic';\n","import type { SyntheticEvent } from 'react';\n\n/**\n * Chain two event handlers. The first handler runs, then the second — unless\n * the first called `event.preventDefault()`, in which case the second is skipped.\n * Use when overriding a default handler from a parent while still allowing\n * the consumer to provide their own.\n */\nexport function composeEventHandlers<E extends SyntheticEvent>(\n theirHandler: ((event: E) => void) | undefined,\n ourHandler: (event: E) => void,\n { checkForDefaultPrevented = true }: { checkForDefaultPrevented?: boolean } = {},\n): (event: E) => void {\n return (event) => {\n theirHandler?.(event);\n if (!checkForDefaultPrevented || !event.defaultPrevented) {\n ourHandler(event);\n }\n };\n}\n","/**\n * Returns `\"\"` when the condition is true, `undefined` otherwise.\n * Use for boolean `data-*` attributes — React strips the attr when value is undefined,\n * so the DOM cleanly toggles `data-state` rather than `data-state=\"false\"`.\n */\nexport function dataAttr(condition: boolean | undefined): '' | undefined {\n return condition ? '' : undefined;\n}\n"]}
@@ -0,0 +1,212 @@
1
+ import { __export } from './chunk-PZ5AY32C.js';
2
+
3
+ // src/tokens/index.ts
4
+ var tokens_exports = {};
5
+ __export(tokens_exports, {
6
+ breakpoints: () => breakpoints,
7
+ colors: () => colors,
8
+ fontFamily: () => fontFamily,
9
+ fontSize: () => fontSize,
10
+ fontWeight: () => fontWeight,
11
+ motion: () => motion,
12
+ opacity: () => opacity,
13
+ radius: () => radius,
14
+ shadow: () => shadow,
15
+ spacing: () => spacing,
16
+ tokens: () => tokens,
17
+ zIndex: () => zIndex
18
+ });
19
+ var colors = {
20
+ brand: {
21
+ 50: "#eff6ff",
22
+ 100: "#dbeafe",
23
+ 200: "#bfdbfe",
24
+ 300: "#93c5fd",
25
+ 400: "#60a5fa",
26
+ 500: "#3b82f6",
27
+ 600: "#2563eb",
28
+ 700: "#1d4ed8",
29
+ 800: "#1e40af",
30
+ 900: "#1e3a8a",
31
+ 950: "#172554"
32
+ },
33
+ neutral: {
34
+ 50: "#fafafa",
35
+ 100: "#f4f4f5",
36
+ 200: "#e4e4e7",
37
+ 300: "#d4d4d8",
38
+ 400: "#a1a1aa",
39
+ 500: "#71717a",
40
+ 600: "#52525b",
41
+ 700: "#3f3f46",
42
+ 800: "#27272a",
43
+ 900: "#18181b",
44
+ 950: "#09090b"
45
+ },
46
+ success: {
47
+ 50: "#f0fdf4",
48
+ 100: "#dcfce7",
49
+ 500: "#22c55e",
50
+ 600: "#16a34a",
51
+ 700: "#15803d",
52
+ 900: "#14532d"
53
+ },
54
+ warning: {
55
+ 50: "#fffbeb",
56
+ 100: "#fef3c7",
57
+ 500: "#f59e0b",
58
+ 600: "#d97706",
59
+ 700: "#b45309",
60
+ 900: "#78350f"
61
+ },
62
+ danger: {
63
+ 50: "#fef2f2",
64
+ 100: "#fee2e2",
65
+ 500: "#ef4444",
66
+ 600: "#dc2626",
67
+ 700: "#b91c1c",
68
+ 900: "#7f1d1d"
69
+ },
70
+ info: {
71
+ 50: "#ecfeff",
72
+ 100: "#cffafe",
73
+ 500: "#06b6d4",
74
+ 600: "#0891b2",
75
+ 700: "#0e7490",
76
+ 900: "#164e63"
77
+ }
78
+ };
79
+ var spacing = {
80
+ px: "1px",
81
+ "0": "0",
82
+ "0.5": "0.125rem",
83
+ "1": "0.25rem",
84
+ "1.5": "0.375rem",
85
+ "2": "0.5rem",
86
+ "2.5": "0.625rem",
87
+ "3": "0.75rem",
88
+ "4": "1rem",
89
+ "5": "1.25rem",
90
+ "6": "1.5rem",
91
+ "8": "2rem",
92
+ "10": "2.5rem",
93
+ "12": "3rem",
94
+ "16": "4rem",
95
+ "20": "5rem",
96
+ "24": "6rem",
97
+ xs: "0.25rem",
98
+ sm: "0.5rem",
99
+ md: "1rem",
100
+ lg: "1.5rem",
101
+ xl: "2rem",
102
+ "2xl": "3rem"
103
+ };
104
+ var radius = {
105
+ none: "0",
106
+ xs: "0.125rem",
107
+ sm: "0.25rem",
108
+ md: "0.5rem",
109
+ lg: "0.75rem",
110
+ xl: "1rem",
111
+ "2xl": "1.5rem",
112
+ full: "9999px"
113
+ };
114
+ var fontFamily = {
115
+ sans: ["ui-sans-serif", "system-ui", "-apple-system", "Segoe UI", "Roboto", "sans-serif"],
116
+ mono: ["ui-monospace", "SFMono-Regular", "Menlo", "Monaco", "monospace"],
117
+ serif: ["ui-serif", "Georgia", "serif"]
118
+ };
119
+ var fontSize = {
120
+ xs: ["0.75rem", { lineHeight: "1rem" }],
121
+ sm: ["0.875rem", { lineHeight: "1.25rem" }],
122
+ base: ["1rem", { lineHeight: "1.5rem" }],
123
+ lg: ["1.125rem", { lineHeight: "1.75rem" }],
124
+ xl: ["1.25rem", { lineHeight: "1.75rem" }],
125
+ "2xl": ["1.5rem", { lineHeight: "2rem" }],
126
+ "3xl": ["1.875rem", { lineHeight: "2.25rem" }],
127
+ "4xl": ["2.25rem", { lineHeight: "2.5rem" }],
128
+ "5xl": ["3rem", { lineHeight: "1" }],
129
+ "6xl": ["3.75rem", { lineHeight: "1" }]
130
+ };
131
+ var fontWeight = {
132
+ normal: "400",
133
+ medium: "500",
134
+ semibold: "600",
135
+ bold: "700"
136
+ };
137
+ var shadow = {
138
+ none: "none",
139
+ xs: "0 1px 2px 0 rgb(0 0 0 / 0.05)",
140
+ sm: "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)",
141
+ md: "0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)",
142
+ lg: "0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)",
143
+ xl: "0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)",
144
+ "2xl": "0 25px 50px -12px rgb(0 0 0 / 0.25)",
145
+ inner: "inset 0 2px 4px 0 rgb(0 0 0 / 0.05)"
146
+ };
147
+ var zIndex = {
148
+ hide: -1,
149
+ base: 0,
150
+ raised: 10,
151
+ dropdown: 1e3,
152
+ sticky: 1100,
153
+ banner: 1200,
154
+ overlay: 1300,
155
+ modal: 1400,
156
+ popover: 1500,
157
+ skipLink: 1600,
158
+ toast: 1700,
159
+ tooltip: 1800
160
+ };
161
+ var motion = {
162
+ duration: {
163
+ instant: "0ms",
164
+ fast: "120ms",
165
+ normal: "180ms",
166
+ slow: "260ms",
167
+ slower: "360ms"
168
+ },
169
+ easing: {
170
+ standard: "cubic-bezier(0.2, 0, 0, 1)",
171
+ enter: "cubic-bezier(0, 0, 0.2, 1)",
172
+ exit: "cubic-bezier(0.4, 0, 1, 1)",
173
+ bounce: "cubic-bezier(0.34, 1.56, 0.64, 1)"
174
+ }
175
+ };
176
+ var breakpoints = {
177
+ sm: "640px",
178
+ md: "768px",
179
+ lg: "1024px",
180
+ xl: "1280px",
181
+ "2xl": "1536px"
182
+ };
183
+ var opacity = {
184
+ "0": "0",
185
+ "5": "0.05",
186
+ "10": "0.1",
187
+ "20": "0.2",
188
+ "40": "0.4",
189
+ "50": "0.5",
190
+ "60": "0.6",
191
+ "70": "0.7",
192
+ "80": "0.8",
193
+ "90": "0.9",
194
+ "100": "1"
195
+ };
196
+ var tokens = {
197
+ colors,
198
+ spacing,
199
+ radius,
200
+ fontFamily,
201
+ fontSize,
202
+ fontWeight,
203
+ shadow,
204
+ zIndex,
205
+ motion,
206
+ breakpoints,
207
+ opacity
208
+ };
209
+
210
+ export { breakpoints, colors, fontFamily, fontSize, fontWeight, motion, opacity, radius, shadow, spacing, tokens, tokens_exports, zIndex };
211
+ //# sourceMappingURL=chunk-D67WGR7Y.js.map
212
+ //# sourceMappingURL=chunk-D67WGR7Y.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/tokens/index.ts"],"names":[],"mappings":"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","file":"chunk-D67WGR7Y.js","sourcesContent":["// Default token set — extend as components require it.\n// Consumed by `src/tailwind/preset.ts` and exposed as raw values to consumers\n// who want them outside Tailwind (CSS-in-JS, inline styles, etc.).\n\nexport const colors = {\n brand: {\n 50: '#eff6ff',\n 100: '#dbeafe',\n 200: '#bfdbfe',\n 300: '#93c5fd',\n 400: '#60a5fa',\n 500: '#3b82f6',\n 600: '#2563eb',\n 700: '#1d4ed8',\n 800: '#1e40af',\n 900: '#1e3a8a',\n 950: '#172554',\n },\n neutral: {\n 50: '#fafafa',\n 100: '#f4f4f5',\n 200: '#e4e4e7',\n 300: '#d4d4d8',\n 400: '#a1a1aa',\n 500: '#71717a',\n 600: '#52525b',\n 700: '#3f3f46',\n 800: '#27272a',\n 900: '#18181b',\n 950: '#09090b',\n },\n success: {\n 50: '#f0fdf4',\n 100: '#dcfce7',\n 500: '#22c55e',\n 600: '#16a34a',\n 700: '#15803d',\n 900: '#14532d',\n },\n warning: {\n 50: '#fffbeb',\n 100: '#fef3c7',\n 500: '#f59e0b',\n 600: '#d97706',\n 700: '#b45309',\n 900: '#78350f',\n },\n danger: {\n 50: '#fef2f2',\n 100: '#fee2e2',\n 500: '#ef4444',\n 600: '#dc2626',\n 700: '#b91c1c',\n 900: '#7f1d1d',\n },\n info: {\n 50: '#ecfeff',\n 100: '#cffafe',\n 500: '#06b6d4',\n 600: '#0891b2',\n 700: '#0e7490',\n 900: '#164e63',\n },\n} as const;\n\nexport const spacing = {\n px: '1px',\n '0': '0',\n '0.5': '0.125rem',\n '1': '0.25rem',\n '1.5': '0.375rem',\n '2': '0.5rem',\n '2.5': '0.625rem',\n '3': '0.75rem',\n '4': '1rem',\n '5': '1.25rem',\n '6': '1.5rem',\n '8': '2rem',\n '10': '2.5rem',\n '12': '3rem',\n '16': '4rem',\n '20': '5rem',\n '24': '6rem',\n xs: '0.25rem',\n sm: '0.5rem',\n md: '1rem',\n lg: '1.5rem',\n xl: '2rem',\n '2xl': '3rem',\n} as const;\n\nexport const radius = {\n none: '0',\n xs: '0.125rem',\n sm: '0.25rem',\n md: '0.5rem',\n lg: '0.75rem',\n xl: '1rem',\n '2xl': '1.5rem',\n full: '9999px',\n} as const;\n\nexport const fontFamily = {\n sans: ['ui-sans-serif', 'system-ui', '-apple-system', 'Segoe UI', 'Roboto', 'sans-serif'],\n mono: ['ui-monospace', 'SFMono-Regular', 'Menlo', 'Monaco', 'monospace'],\n serif: ['ui-serif', 'Georgia', 'serif'],\n} as const;\n\nexport const fontSize = {\n xs: ['0.75rem', { lineHeight: '1rem' }],\n sm: ['0.875rem', { lineHeight: '1.25rem' }],\n base: ['1rem', { lineHeight: '1.5rem' }],\n lg: ['1.125rem', { lineHeight: '1.75rem' }],\n xl: ['1.25rem', { lineHeight: '1.75rem' }],\n '2xl': ['1.5rem', { lineHeight: '2rem' }],\n '3xl': ['1.875rem', { lineHeight: '2.25rem' }],\n '4xl': ['2.25rem', { lineHeight: '2.5rem' }],\n '5xl': ['3rem', { lineHeight: '1' }],\n '6xl': ['3.75rem', { lineHeight: '1' }],\n} as const;\n\nexport const fontWeight = {\n normal: '400',\n medium: '500',\n semibold: '600',\n bold: '700',\n} as const;\n\nexport const shadow = {\n none: 'none',\n xs: '0 1px 2px 0 rgb(0 0 0 / 0.05)',\n sm: '0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)',\n md: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)',\n lg: '0 10px 15px -3px rgb(0 0 0 / 0.1), 0 4px 6px -4px rgb(0 0 0 / 0.1)',\n xl: '0 20px 25px -5px rgb(0 0 0 / 0.1), 0 8px 10px -6px rgb(0 0 0 / 0.1)',\n '2xl': '0 25px 50px -12px rgb(0 0 0 / 0.25)',\n inner: 'inset 0 2px 4px 0 rgb(0 0 0 / 0.05)',\n} as const;\n\nexport const zIndex = {\n hide: -1,\n base: 0,\n raised: 10,\n dropdown: 1000,\n sticky: 1100,\n banner: 1200,\n overlay: 1300,\n modal: 1400,\n popover: 1500,\n skipLink: 1600,\n toast: 1700,\n tooltip: 1800,\n} as const;\n\nexport const motion = {\n duration: {\n instant: '0ms',\n fast: '120ms',\n normal: '180ms',\n slow: '260ms',\n slower: '360ms',\n },\n easing: {\n standard: 'cubic-bezier(0.2, 0, 0, 1)',\n enter: 'cubic-bezier(0, 0, 0.2, 1)',\n exit: 'cubic-bezier(0.4, 0, 1, 1)',\n bounce: 'cubic-bezier(0.34, 1.56, 0.64, 1)',\n },\n} as const;\n\nexport const breakpoints = {\n sm: '640px',\n md: '768px',\n lg: '1024px',\n xl: '1280px',\n '2xl': '1536px',\n} as const;\n\nexport const opacity = {\n '0': '0',\n '5': '0.05',\n '10': '0.1',\n '20': '0.2',\n '40': '0.4',\n '50': '0.5',\n '60': '0.6',\n '70': '0.7',\n '80': '0.8',\n '90': '0.9',\n '100': '1',\n} as const;\n\nexport const tokens = {\n colors,\n spacing,\n radius,\n fontFamily,\n fontSize,\n fontWeight,\n shadow,\n zIndex,\n motion,\n breakpoints,\n opacity,\n} as const;\nexport type Tokens = typeof tokens;\n"]}
@@ -0,0 +1,17 @@
1
+ // src/utils/composeRefs.ts
2
+ function setRef(ref, value) {
3
+ if (typeof ref === "function") {
4
+ ref(value);
5
+ } else if (ref != null) {
6
+ ref.current = value;
7
+ }
8
+ }
9
+ function composeRefs(...refs) {
10
+ return (node) => {
11
+ for (const ref of refs) setRef(ref, node);
12
+ };
13
+ }
14
+
15
+ export { composeRefs };
16
+ //# sourceMappingURL=chunk-DN7WBRIV.js.map
17
+ //# sourceMappingURL=chunk-DN7WBRIV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/composeRefs.ts"],"names":[],"mappings":";AAIA,SAAS,MAAA,CAAU,KAAqB,KAAA,EAAgB;AACtD,EAAA,IAAI,OAAO,QAAQ,UAAA,EAAY;AAC7B,IAAA,GAAA,CAAI,KAAK,CAAA;AAAA,EACX,CAAA,MAAA,IAAW,OAAO,IAAA,EAAM;AACtB,IAAC,IAA8B,OAAA,GAAU,KAAA;AAAA,EAC3C;AACF;AAMO,SAAS,eAAkB,IAAA,EAAkD;AAClF,EAAA,OAAO,CAAC,IAAA,KAAS;AACf,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,EAAM,MAAA,CAAO,GAAA,EAAK,IAAS,CAAA;AAAA,EAC/C,CAAA;AACF","file":"chunk-DN7WBRIV.js","sourcesContent":["import type { Ref } from 'react';\n\ntype PossibleRef<T> = Ref<T> | undefined;\n\nfunction setRef<T>(ref: PossibleRef<T>, value: T): void {\n if (typeof ref === 'function') {\n ref(value);\n } else if (ref != null) {\n (ref as { current: T | null }).current = value;\n }\n}\n\n/**\n * Merge multiple React refs (callback or object) into a single callback ref.\n * Use to forward a ref while also keeping a local ref to the same node.\n */\nexport function composeRefs<T>(...refs: PossibleRef<T>[]): (node: T | null) => void {\n return (node) => {\n for (const ref of refs) setRef(ref, node as T);\n };\n}\n"]}
@@ -0,0 +1,268 @@
1
+ import { useFormControl, FormControlProvider } from './chunk-Q27NAHVB.js';
2
+ import { useScrollLock } from './chunk-77WSI427.js';
3
+ import { Slot } from './chunk-33IOXQYO.js';
4
+ import { composeRefs } from './chunk-DN7WBRIV.js';
5
+ import { cn } from './chunk-KZ4VFY2T.js';
6
+ import { __export } from './chunk-PZ5AY32C.js';
7
+ import { forwardRef, useState, useRef, useEffect, isValidElement, cloneElement, createContext, useContext, useCallback, useMemo, useId } from 'react';
8
+ import { createPortal } from 'react-dom';
9
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
10
+ import { FocusScope as FocusScope$1 } from '@radix-ui/react-focus-scope';
11
+ import { useFloating, autoUpdate, offset, flip, shift } from '@floating-ui/react';
12
+
13
+ // src/primitives/index.ts
14
+ var primitives_exports = {};
15
+ __export(primitives_exports, {
16
+ AccessibleIcon: () => AccessibleIcon,
17
+ AnchoredPositioner: () => AnchoredPositioner,
18
+ DirectionProvider: () => DirectionProvider,
19
+ DismissableLayer: () => DismissableLayer,
20
+ FocusScope: () => FocusScope,
21
+ FormControlProvider: () => FormControlProvider,
22
+ Portal: () => Portal,
23
+ Presence: () => Presence,
24
+ RovingFocusGroup: () => RovingFocusGroup,
25
+ ScrollLockProvider: () => ScrollLockProvider,
26
+ Slot: () => Slot,
27
+ VisuallyHidden: () => VisuallyHidden,
28
+ createCollection: () => createCollection,
29
+ useDirection: () => useDirection,
30
+ useFormControl: () => useFormControl,
31
+ useRovingFocusItem: () => useRovingFocusItem
32
+ });
33
+ function Portal({ children, container, name }) {
34
+ const target = container ?? document.body;
35
+ return createPortal(/* @__PURE__ */ jsx("div", { "data-portal-name": name, children }), target);
36
+ }
37
+ var VisuallyHidden = forwardRef(
38
+ ({ className, ...props }, ref) => /* @__PURE__ */ jsx(
39
+ "span",
40
+ {
41
+ ref,
42
+ className: cn(
43
+ "absolute h-px w-px overflow-hidden whitespace-nowrap border-0 p-0",
44
+ "m-[-1px] [clip:rect(0_0_0_0)] [clip-path:inset(50%)]",
45
+ className
46
+ ),
47
+ ...props
48
+ }
49
+ )
50
+ );
51
+ VisuallyHidden.displayName = "VisuallyHidden";
52
+ function Presence({ present, children }) {
53
+ const [rendered, setRendered] = useState(present);
54
+ const ref = useRef(null);
55
+ useEffect(() => {
56
+ if (present) {
57
+ setRendered(true);
58
+ return;
59
+ }
60
+ const node = ref.current;
61
+ if (!node) {
62
+ setRendered(false);
63
+ return;
64
+ }
65
+ const cs = getComputedStyle(node);
66
+ const hasAnim = cs.animationName !== "none" && cs.animationDuration !== "0s";
67
+ const hasTrans = cs.transitionDuration !== "0s";
68
+ if (!hasAnim && !hasTrans) {
69
+ setRendered(false);
70
+ return;
71
+ }
72
+ const onEnd = () => setRendered(false);
73
+ node.addEventListener("animationend", onEnd);
74
+ node.addEventListener("transitionend", onEnd);
75
+ return () => {
76
+ node.removeEventListener("animationend", onEnd);
77
+ node.removeEventListener("transitionend", onEnd);
78
+ };
79
+ }, [present]);
80
+ if (!rendered || !isValidElement(children)) return null;
81
+ const child = children;
82
+ return cloneElement(child, {
83
+ ref: composeRefs(ref, child.ref),
84
+ "data-state": present ? "open" : "closed"
85
+ });
86
+ }
87
+ var DirectionContext = createContext("ltr");
88
+ function DirectionProvider({ dir, children }) {
89
+ return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });
90
+ }
91
+ function useDirection() {
92
+ return useContext(DirectionContext);
93
+ }
94
+ function AccessibleIcon({ label, children }) {
95
+ const icon = isValidElement(children) ? cloneElement(children, {
96
+ "aria-hidden": "true",
97
+ focusable: "false"
98
+ }) : children;
99
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
100
+ icon,
101
+ /* @__PURE__ */ jsx(VisuallyHidden, { children: label })
102
+ ] });
103
+ }
104
+ var FocusScope = FocusScope$1;
105
+ var layerStack = [];
106
+ var DismissableLayer = forwardRef(
107
+ ({ onEscape, onOutsidePointerDown, disableEscape, disableOutsideClick, ...props }, forwardedRef) => {
108
+ const ref = useRef(null);
109
+ useEffect(() => {
110
+ const node = ref.current;
111
+ if (!node) return;
112
+ const entry = { node, onEscape, onOutsidePointerDown };
113
+ layerStack.push(entry);
114
+ return () => {
115
+ const idx = layerStack.indexOf(entry);
116
+ if (idx >= 0) layerStack.splice(idx, 1);
117
+ };
118
+ }, [onEscape, onOutsidePointerDown]);
119
+ useEffect(() => {
120
+ if (disableEscape) return;
121
+ const onKeyDown = (e) => {
122
+ if (e.key !== "Escape") return;
123
+ const top = layerStack[layerStack.length - 1];
124
+ if (top && top.node === ref.current) top.onEscape?.(e);
125
+ };
126
+ document.addEventListener("keydown", onKeyDown);
127
+ return () => document.removeEventListener("keydown", onKeyDown);
128
+ }, [disableEscape]);
129
+ useEffect(() => {
130
+ if (disableOutsideClick) return;
131
+ const onPointer = (e) => {
132
+ const top = layerStack[layerStack.length - 1];
133
+ if (!top || top.node !== ref.current) return;
134
+ const target = e.target;
135
+ if (!target || ref.current?.contains(target)) return;
136
+ top.onOutsidePointerDown?.(e);
137
+ };
138
+ document.addEventListener("pointerdown", onPointer, true);
139
+ return () => document.removeEventListener("pointerdown", onPointer, true);
140
+ }, [disableOutsideClick]);
141
+ return /* @__PURE__ */ jsx("div", { ref: composeRefs(forwardedRef, ref), ...props });
142
+ }
143
+ );
144
+ DismissableLayer.displayName = "DismissableLayer";
145
+ var AnchoredPositioner = forwardRef(
146
+ ({ anchor, placement = "bottom", offset: offset$1 = 8, open = true, children, style, ...props }, forwardedRef) => {
147
+ const { refs, floatingStyles } = useFloating({
148
+ open,
149
+ placement,
150
+ middleware: [offset(offset$1), flip(), shift({ padding: 8 })],
151
+ whileElementsMounted: autoUpdate,
152
+ elements: { reference: anchor }
153
+ });
154
+ if (!open) return null;
155
+ return /* @__PURE__ */ jsx(
156
+ "div",
157
+ {
158
+ ref: composeRefs(forwardedRef, refs.setFloating),
159
+ style: { ...floatingStyles, ...style },
160
+ ...props,
161
+ children
162
+ }
163
+ );
164
+ }
165
+ );
166
+ AnchoredPositioner.displayName = "AnchoredPositioner";
167
+ var RovingFocusContext = createContext(null);
168
+ function RovingFocusGroup({
169
+ orientation = "horizontal",
170
+ loop = true,
171
+ children,
172
+ ...props
173
+ }) {
174
+ const items = useRef([]);
175
+ const [focusedId, setFocusedId] = useState(null);
176
+ const register = useCallback((id) => {
177
+ if (!items.current.includes(id)) items.current.push(id);
178
+ setFocusedId((current) => current ?? id);
179
+ }, []);
180
+ const unregister = useCallback((id) => {
181
+ items.current = items.current.filter((i) => i !== id);
182
+ }, []);
183
+ const onItemKeyDown = useCallback(
184
+ (event, id) => {
185
+ const list = items.current;
186
+ const idx = list.indexOf(id);
187
+ if (idx === -1) return;
188
+ const isVert = orientation === "vertical" || orientation === "both";
189
+ const isHoriz = orientation === "horizontal" || orientation === "both";
190
+ let next = idx;
191
+ if (event.key === "ArrowRight" && isHoriz || event.key === "ArrowDown" && isVert) {
192
+ next = idx + 1;
193
+ if (next >= list.length) next = loop ? 0 : list.length - 1;
194
+ } else if (event.key === "ArrowLeft" && isHoriz || event.key === "ArrowUp" && isVert) {
195
+ next = idx - 1;
196
+ if (next < 0) next = loop ? list.length - 1 : 0;
197
+ } else if (event.key === "Home") {
198
+ next = 0;
199
+ } else if (event.key === "End") {
200
+ next = list.length - 1;
201
+ } else {
202
+ return;
203
+ }
204
+ event.preventDefault();
205
+ const id2 = list[next];
206
+ if (id2) setFocusedId(id2);
207
+ },
208
+ [orientation, loop]
209
+ );
210
+ const value = useMemo(
211
+ () => ({ register, unregister, focusedId, setFocusedId, onItemKeyDown }),
212
+ [register, unregister, focusedId, onItemKeyDown]
213
+ );
214
+ return /* @__PURE__ */ jsx(RovingFocusContext.Provider, { value, children: /* @__PURE__ */ jsx("div", { role: "group", ...props, children }) });
215
+ }
216
+ function useRovingFocusItem() {
217
+ const context = useContext(RovingFocusContext);
218
+ const id = useId();
219
+ const ref = useRef(null);
220
+ useEffect(() => {
221
+ context?.register(id);
222
+ return () => context?.unregister(id);
223
+ }, [context, id]);
224
+ useEffect(() => {
225
+ if (context?.focusedId === id && ref.current && document.activeElement !== ref.current) {
226
+ ref.current.focus();
227
+ }
228
+ }, [context?.focusedId, id]);
229
+ return {
230
+ ref: (node) => {
231
+ ref.current = node;
232
+ },
233
+ tabIndex: !context || context.focusedId === id ? 0 : -1,
234
+ onKeyDown: (e) => context?.onItemKeyDown(e, id),
235
+ onFocus: () => context?.setFocusedId(id),
236
+ "data-roving-focus-item": true
237
+ };
238
+ }
239
+ function createCollection() {
240
+ const CollectionContext = createContext(null);
241
+ function Provider({ children }) {
242
+ const [items, setItems] = useState([]);
243
+ const register = useCallback((item) => {
244
+ setItems((prev) => prev.includes(item) ? prev : [...prev, item]);
245
+ }, []);
246
+ const unregister = useCallback((item) => {
247
+ setItems((prev) => prev.filter((i) => i !== item));
248
+ }, []);
249
+ const value = useMemo(() => ({ items, register, unregister }), [items, register, unregister]);
250
+ return /* @__PURE__ */ jsx(CollectionContext.Provider, { value, children });
251
+ }
252
+ function useCollection() {
253
+ const ctx = useContext(CollectionContext);
254
+ if (!ctx) {
255
+ throw new Error("useCollection must be used inside its Provider");
256
+ }
257
+ return ctx;
258
+ }
259
+ return { Provider, useCollection, Context: CollectionContext };
260
+ }
261
+ function ScrollLockProvider({ enabled = true, children }) {
262
+ useScrollLock(enabled);
263
+ return /* @__PURE__ */ jsx(Fragment, { children });
264
+ }
265
+
266
+ export { AccessibleIcon, AnchoredPositioner, DirectionProvider, DismissableLayer, FocusScope, Portal, Presence, RovingFocusGroup, ScrollLockProvider, VisuallyHidden, createCollection, primitives_exports, useDirection, useRovingFocusItem };
267
+ //# sourceMappingURL=chunk-JCMV6IT4.js.map
268
+ //# sourceMappingURL=chunk-JCMV6IT4.js.map