@evinvest/uikit 0.19.0 → 0.20.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 (267) hide show
  1. package/README.md +17 -5
  2. package/dist/components/accordion.js +136 -0
  3. package/dist/components/accordion.js.map +1 -0
  4. package/dist/components/alert-dialog.js +175 -0
  5. package/dist/components/alert-dialog.js.map +1 -0
  6. package/dist/components/alert.js +49 -0
  7. package/dist/components/alert.js.map +1 -0
  8. package/dist/components/avatar.js +54 -0
  9. package/dist/components/avatar.js.map +1 -0
  10. package/dist/components/badge.js +25 -0
  11. package/dist/components/badge.js.map +1 -0
  12. package/dist/components/band.js +75 -0
  13. package/dist/components/band.js.map +1 -0
  14. package/dist/components/breadcrumb.js +132 -0
  15. package/dist/components/breadcrumb.js.map +1 -0
  16. package/dist/components/button-group.js +61 -0
  17. package/dist/components/button-group.js.map +1 -0
  18. package/dist/components/button.js +55 -0
  19. package/dist/components/button.js.map +1 -0
  20. package/dist/components/calendar.js +226 -0
  21. package/dist/components/calendar.js.map +1 -0
  22. package/dist/components/card.js +98 -0
  23. package/dist/components/card.js.map +1 -0
  24. package/dist/components/carousel.js +262 -0
  25. package/dist/components/carousel.js.map +1 -0
  26. package/dist/components/chart.js +151 -0
  27. package/dist/components/chart.js.map +1 -0
  28. package/dist/components/checkbox.js +68 -0
  29. package/dist/components/checkbox.js.map +1 -0
  30. package/dist/components/collapsible.js +60 -0
  31. package/dist/components/collapsible.js.map +1 -0
  32. package/dist/components/command.js +274 -0
  33. package/dist/components/command.js.map +1 -0
  34. package/dist/components/container.js +18 -0
  35. package/dist/components/container.js.map +1 -0
  36. package/dist/components/context-menu.js +337 -0
  37. package/dist/components/context-menu.js.map +1 -0
  38. package/dist/components/date-time-picker.js +301 -0
  39. package/dist/components/date-time-picker.js.map +1 -0
  40. package/dist/components/dialog.js +207 -0
  41. package/dist/components/dialog.js.map +1 -0
  42. package/dist/components/drawer.js +351 -0
  43. package/dist/components/drawer.js.map +1 -0
  44. package/dist/components/dropdown-menu.js +356 -0
  45. package/dist/components/dropdown-menu.js.map +1 -0
  46. package/dist/components/empty.js +91 -0
  47. package/dist/components/empty.js.map +1 -0
  48. package/dist/components/field-context.js +30 -0
  49. package/dist/components/field-context.js.map +1 -0
  50. package/dist/components/field.js +216 -0
  51. package/dist/components/field.js.map +1 -0
  52. package/dist/components/footer.js +89 -0
  53. package/dist/components/footer.js.map +1 -0
  54. package/dist/components/form.js +101 -0
  55. package/dist/components/form.js.map +1 -0
  56. package/dist/components/hover-card.js +90 -0
  57. package/dist/components/hover-card.js.map +1 -0
  58. package/dist/components/info-tip.js +161 -0
  59. package/dist/components/info-tip.js.map +1 -0
  60. package/dist/components/input-group.js +124 -0
  61. package/dist/components/input-group.js.map +1 -0
  62. package/dist/components/input-otp.js +120 -0
  63. package/dist/components/input-otp.js.map +1 -0
  64. package/dist/components/input.js +26 -0
  65. package/dist/components/input.js.map +1 -0
  66. package/dist/components/item.js +167 -0
  67. package/dist/components/item.js.map +1 -0
  68. package/dist/components/kbd.js +29 -0
  69. package/dist/components/kbd.js.map +1 -0
  70. package/dist/components/label.js +11 -0
  71. package/dist/components/label.js.map +1 -0
  72. package/dist/components/logo.js +41 -0
  73. package/dist/components/logo.js.map +1 -0
  74. package/dist/components/menubar.js +330 -0
  75. package/dist/components/menubar.js.map +1 -0
  76. package/dist/components/native-select.js +62 -0
  77. package/dist/components/native-select.js.map +1 -0
  78. package/dist/components/navigation-menu.js +204 -0
  79. package/dist/components/navigation-menu.js.map +1 -0
  80. package/dist/components/pagination.js +138 -0
  81. package/dist/components/pagination.js.map +1 -0
  82. package/dist/components/popover.js +104 -0
  83. package/dist/components/popover.js.map +1 -0
  84. package/dist/components/progress.js +30 -0
  85. package/dist/components/progress.js.map +1 -0
  86. package/dist/components/radio-group.js +113 -0
  87. package/dist/components/radio-group.js.map +1 -0
  88. package/dist/components/resizable.js +193 -0
  89. package/dist/components/resizable.js.map +1 -0
  90. package/dist/components/scroll-area.js +40 -0
  91. package/dist/components/scroll-area.js.map +1 -0
  92. package/dist/components/section-descriptor.js +88 -0
  93. package/dist/components/section-descriptor.js.map +1 -0
  94. package/dist/components/select-chevron.js +25 -0
  95. package/dist/components/select-chevron.js.map +1 -0
  96. package/dist/components/select.js +288 -0
  97. package/dist/components/select.js.map +1 -0
  98. package/dist/components/separator.js +31 -0
  99. package/dist/components/separator.js.map +1 -0
  100. package/dist/components/sheet.js +200 -0
  101. package/dist/components/sheet.js.map +1 -0
  102. package/dist/components/sidebar.js +326 -0
  103. package/dist/components/sidebar.js.map +1 -0
  104. package/dist/components/skeleton.js +18 -0
  105. package/dist/components/skeleton.js.map +1 -0
  106. package/dist/components/slider.js +138 -0
  107. package/dist/components/slider.js.map +1 -0
  108. package/dist/components/sonner.js +319 -0
  109. package/dist/components/sonner.js.map +1 -0
  110. package/dist/components/spinner.js +23 -0
  111. package/dist/components/spinner.js.map +1 -0
  112. package/dist/components/status-screen.js +145 -0
  113. package/dist/components/status-screen.js.map +1 -0
  114. package/dist/components/switch.js +54 -0
  115. package/dist/components/switch.js.map +1 -0
  116. package/dist/components/table.js +124 -0
  117. package/dist/components/table.js.map +1 -0
  118. package/dist/components/tabs.js +133 -0
  119. package/dist/components/tabs.js.map +1 -0
  120. package/dist/components/terminal.js +206 -0
  121. package/dist/components/terminal.js.map +1 -0
  122. package/dist/components/textarea.js +22 -0
  123. package/dist/components/textarea.js.map +1 -0
  124. package/dist/components/toggle-group.js +105 -0
  125. package/dist/components/toggle-group.js.map +1 -0
  126. package/dist/components/toggle.js +53 -0
  127. package/dist/components/toggle.js.map +1 -0
  128. package/dist/components/tooltip.js +102 -0
  129. package/dist/components/tooltip.js.map +1 -0
  130. package/dist/generated/accent.js +27 -0
  131. package/dist/generated/accent.js.map +1 -0
  132. package/dist/generated/accordion.js +13 -0
  133. package/dist/generated/accordion.js.map +1 -0
  134. package/dist/generated/alert-dialog.js +15 -0
  135. package/dist/generated/alert-dialog.js.map +1 -0
  136. package/dist/generated/alert.js +16 -0
  137. package/dist/generated/alert.js.map +1 -0
  138. package/dist/generated/avatar.js +9 -0
  139. package/dist/generated/avatar.js.map +1 -0
  140. package/dist/generated/badge.js +13 -0
  141. package/dist/generated/badge.js.map +1 -0
  142. package/dist/generated/band.js +39 -0
  143. package/dist/generated/band.js.map +1 -0
  144. package/dist/generated/breadcrumb.js +15 -0
  145. package/dist/generated/breadcrumb.js.map +1 -0
  146. package/dist/generated/button-group.js +14 -0
  147. package/dist/generated/button-group.js.map +1 -0
  148. package/dist/generated/button.js +30 -0
  149. package/dist/generated/button.js.map +1 -0
  150. package/dist/generated/calendar.js +29 -0
  151. package/dist/generated/calendar.js.map +1 -0
  152. package/dist/generated/card.js +17 -0
  153. package/dist/generated/card.js.map +1 -0
  154. package/dist/generated/carousel.js +31 -0
  155. package/dist/generated/carousel.js.map +1 -0
  156. package/dist/generated/chart.js +9 -0
  157. package/dist/generated/chart.js.map +1 -0
  158. package/dist/generated/checkbox.js +7 -0
  159. package/dist/generated/checkbox.js.map +1 -0
  160. package/dist/generated/command.js +27 -0
  161. package/dist/generated/command.js.map +1 -0
  162. package/dist/generated/container.js +5 -0
  163. package/dist/generated/container.js.map +1 -0
  164. package/dist/generated/context-menu.js +19 -0
  165. package/dist/generated/context-menu.js.map +1 -0
  166. package/dist/generated/date-time-picker.js +15 -0
  167. package/dist/generated/date-time-picker.js.map +1 -0
  168. package/dist/generated/dialog.js +17 -0
  169. package/dist/generated/dialog.js.map +1 -0
  170. package/dist/generated/drawer.js +26 -0
  171. package/dist/generated/drawer.js.map +1 -0
  172. package/dist/generated/dropdown-menu.js +21 -0
  173. package/dist/generated/dropdown-menu.js.map +1 -0
  174. package/dist/generated/empty.js +20 -0
  175. package/dist/generated/empty.js.map +1 -0
  176. package/dist/generated/field.js +33 -0
  177. package/dist/generated/field.js.map +1 -0
  178. package/dist/generated/focus.js +5 -0
  179. package/dist/generated/focus.js.map +1 -0
  180. package/dist/generated/form.js +11 -0
  181. package/dist/generated/form.js.map +1 -0
  182. package/dist/generated/hover-card.js +5 -0
  183. package/dist/generated/hover-card.js.map +1 -0
  184. package/dist/generated/input-group.js +29 -0
  185. package/dist/generated/input-group.js.map +1 -0
  186. package/dist/generated/input-otp.js +15 -0
  187. package/dist/generated/input-otp.js.map +1 -0
  188. package/dist/generated/input.js +11 -0
  189. package/dist/generated/input.js.map +1 -0
  190. package/dist/generated/item.js +40 -0
  191. package/dist/generated/item.js.map +1 -0
  192. package/dist/generated/kbd.js +7 -0
  193. package/dist/generated/kbd.js.map +1 -0
  194. package/dist/generated/label.js +5 -0
  195. package/dist/generated/label.js.map +1 -0
  196. package/dist/generated/menubar.js +27 -0
  197. package/dist/generated/menubar.js.map +1 -0
  198. package/dist/generated/navigation-menu.js +19 -0
  199. package/dist/generated/navigation-menu.js.map +1 -0
  200. package/dist/generated/popover.js +5 -0
  201. package/dist/generated/popover.js.map +1 -0
  202. package/dist/generated/progress.js +7 -0
  203. package/dist/generated/progress.js.map +1 -0
  204. package/dist/generated/radio-group.js +7 -0
  205. package/dist/generated/radio-group.js.map +1 -0
  206. package/dist/generated/resizable.js +11 -0
  207. package/dist/generated/resizable.js.map +1 -0
  208. package/dist/generated/scroll-area.js +14 -0
  209. package/dist/generated/scroll-area.js.map +1 -0
  210. package/dist/generated/select.js +15 -0
  211. package/dist/generated/select.js.map +1 -0
  212. package/dist/generated/separator.js +10 -0
  213. package/dist/generated/separator.js.map +1 -0
  214. package/dist/generated/sheet.js +25 -0
  215. package/dist/generated/sheet.js.map +1 -0
  216. package/dist/generated/sidebar.js +41 -0
  217. package/dist/generated/sidebar.js.map +1 -0
  218. package/dist/generated/skeleton.js +5 -0
  219. package/dist/generated/skeleton.js.map +1 -0
  220. package/dist/generated/slider.js +11 -0
  221. package/dist/generated/slider.js.map +1 -0
  222. package/dist/generated/sonner.js +30 -0
  223. package/dist/generated/sonner.js.map +1 -0
  224. package/dist/generated/switch.js +7 -0
  225. package/dist/generated/switch.js.map +1 -0
  226. package/dist/generated/table.js +21 -0
  227. package/dist/generated/table.js.map +1 -0
  228. package/dist/generated/tabs.js +11 -0
  229. package/dist/generated/tabs.js.map +1 -0
  230. package/dist/generated/terminal.js +70 -0
  231. package/dist/generated/terminal.js.map +1 -0
  232. package/dist/generated/textarea.js +11 -0
  233. package/dist/generated/textarea.js.map +1 -0
  234. package/dist/generated/toggle.js +18 -0
  235. package/dist/generated/toggle.js.map +1 -0
  236. package/dist/generated/tooltip.js +5 -0
  237. package/dist/generated/tooltip.js.map +1 -0
  238. package/dist/index.d.ts +43 -10
  239. package/dist/index.js +73 -8805
  240. package/dist/lib/cn.js +12 -0
  241. package/dist/lib/cn.js.map +1 -0
  242. package/dist/lib/focus.js +5 -0
  243. package/dist/lib/focus.js.map +1 -0
  244. package/dist/primitives/dismissable-layer.js +35 -0
  245. package/dist/primitives/dismissable-layer.js.map +1 -0
  246. package/dist/primitives/focus-scope.js +58 -0
  247. package/dist/primitives/focus-scope.js.map +1 -0
  248. package/dist/primitives/merge-refs.js +13 -0
  249. package/dist/primitives/merge-refs.js.map +1 -0
  250. package/dist/primitives/portal.js +19 -0
  251. package/dist/primitives/portal.js.map +1 -0
  252. package/dist/primitives/presence.js +45 -0
  253. package/dist/primitives/presence.js.map +1 -0
  254. package/dist/primitives/slot.js +39 -0
  255. package/dist/primitives/slot.js.map +1 -0
  256. package/dist/primitives/use-controllable-state.js +24 -0
  257. package/dist/primitives/use-controllable-state.js.map +1 -0
  258. package/dist/primitives/use-floating.js +128 -0
  259. package/dist/primitives/use-floating.js.map +1 -0
  260. package/dist/primitives/use-hover-intent.js +50 -0
  261. package/dist/primitives/use-hover-intent.js.map +1 -0
  262. package/dist/primitives/use-roving-focus.js +40 -0
  263. package/dist/primitives/use-roving-focus.js.map +1 -0
  264. package/dist/primitives/walk-elements.js +13 -0
  265. package/dist/primitives/walk-elements.js.map +1 -0
  266. package/package.json +5 -4
  267. package/dist/index.js.map +0 -1
@@ -0,0 +1,193 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../lib/cn.js";
5
+ import {
6
+ RESIZABLE_GROUP,
7
+ RESIZABLE_HANDLE,
8
+ RESIZABLE_HANDLE_GRIP,
9
+ RESIZABLE_PANEL
10
+ } from "../generated/resizable.js";
11
+ const ResizableContext = React.createContext(null);
12
+ function useResizable() {
13
+ const ctx = React.useContext(ResizableContext);
14
+ if (!ctx)
15
+ throw new Error("Resizable parts must be used within a ResizablePanelGroup");
16
+ return ctx;
17
+ }
18
+ function redistribute(sizes, index, delta) {
19
+ const before = sizes[index];
20
+ const after = sizes[index + 1];
21
+ if (before === void 0 || after === void 0) return sizes;
22
+ const moved = Math.max(-before, Math.min(after, delta));
23
+ const next = sizes.slice();
24
+ next[index] = before + moved;
25
+ next[index + 1] = after - moved;
26
+ return next;
27
+ }
28
+ function ResizablePanelGroup({
29
+ className,
30
+ direction = "horizontal",
31
+ keyboardStep = 10,
32
+ onLayout,
33
+ children,
34
+ ...props
35
+ }) {
36
+ const [sizes, setSizes] = React.useState([]);
37
+ const groupRef = React.useRef(null);
38
+ const register = React.useCallback((index, defaultSize) => {
39
+ setSizes((prev) => {
40
+ if (prev[index] !== void 0) return prev;
41
+ const next = prev.slice();
42
+ while (next.length <= index) next.push(0);
43
+ next[index] = defaultSize;
44
+ return next;
45
+ });
46
+ }, []);
47
+ React.useEffect(() => {
48
+ if (sizes.length) onLayout?.(sizes);
49
+ }, [sizes, onLayout]);
50
+ const value = React.useMemo(
51
+ () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),
52
+ [sizes, register, direction, keyboardStep]
53
+ );
54
+ return /* @__PURE__ */ jsx(ResizableContext.Provider, { value, children: /* @__PURE__ */ jsx(
55
+ "div",
56
+ {
57
+ ref: groupRef,
58
+ "data-slot": "resizable-panel-group",
59
+ "data-panel-group-direction": direction,
60
+ className: cn(RESIZABLE_GROUP, className),
61
+ ...props,
62
+ children
63
+ }
64
+ ) });
65
+ }
66
+ function ResizablePanel({
67
+ className,
68
+ index,
69
+ defaultSize = 50,
70
+ style,
71
+ children,
72
+ ...props
73
+ }) {
74
+ const { sizes, register } = useResizable();
75
+ React.useEffect(() => {
76
+ register(index, defaultSize);
77
+ }, [register, index, defaultSize]);
78
+ const basis = sizes[index] ?? defaultSize;
79
+ return /* @__PURE__ */ jsx(
80
+ "div",
81
+ {
82
+ "data-slot": "resizable-panel",
83
+ className: cn(RESIZABLE_PANEL, className),
84
+ style: { flex: `${basis} 1 0%`, ...style },
85
+ ...props,
86
+ children
87
+ }
88
+ );
89
+ }
90
+ function ResizableHandle({
91
+ className,
92
+ index,
93
+ withHandle,
94
+ children,
95
+ ...props
96
+ }) {
97
+ const { setSizes, direction, keyboardStep, groupRef } = useResizable();
98
+ const draggingRef = React.useRef(false);
99
+ const resize = React.useCallback(
100
+ (delta) => setSizes((prev) => redistribute(prev, index, delta)),
101
+ [setSizes, index]
102
+ );
103
+ const onPointerMove = React.useCallback(
104
+ (event) => {
105
+ if (!draggingRef.current) return;
106
+ const rect = groupRef.current?.getBoundingClientRect();
107
+ if (!rect) return;
108
+ const span = direction === "vertical" ? rect.height : rect.width;
109
+ if (span <= 0) return;
110
+ const px = direction === "vertical" ? event.movementY : event.movementX;
111
+ resize(px / span * 100);
112
+ },
113
+ [direction, resize, groupRef]
114
+ );
115
+ const onPointerUp = React.useCallback(() => {
116
+ draggingRef.current = false;
117
+ window.removeEventListener("pointermove", onPointerMove);
118
+ window.removeEventListener("pointerup", onPointerUp);
119
+ }, [onPointerMove]);
120
+ const onPointerDown = (event) => {
121
+ event.preventDefault();
122
+ draggingRef.current = true;
123
+ window.addEventListener("pointermove", onPointerMove);
124
+ window.addEventListener("pointerup", onPointerUp);
125
+ };
126
+ React.useEffect(() => () => onPointerUp(), [onPointerUp]);
127
+ const onKeyDown = (event) => {
128
+ let delta;
129
+ switch (event.key) {
130
+ case "ArrowLeft":
131
+ case "ArrowUp":
132
+ delta = -keyboardStep;
133
+ break;
134
+ case "ArrowRight":
135
+ case "ArrowDown":
136
+ delta = keyboardStep;
137
+ break;
138
+ default:
139
+ return;
140
+ }
141
+ if (direction === "horizontal" && (event.key === "ArrowUp" || event.key === "ArrowDown") || direction === "vertical" && (event.key === "ArrowLeft" || event.key === "ArrowRight"))
142
+ return;
143
+ event.preventDefault();
144
+ resize(delta);
145
+ };
146
+ return /* @__PURE__ */ jsxs(
147
+ "div",
148
+ {
149
+ "data-slot": "resizable-handle",
150
+ "data-panel-group-direction": direction,
151
+ role: "separator",
152
+ "aria-orientation": direction === "horizontal" ? "vertical" : "horizontal",
153
+ tabIndex: 0,
154
+ className: cn(RESIZABLE_HANDLE, className),
155
+ onPointerDown,
156
+ onKeyDown,
157
+ ...props,
158
+ children: [
159
+ withHandle && /* @__PURE__ */ jsx("div", { className: RESIZABLE_HANDLE_GRIP, children: /* @__PURE__ */ jsxs(
160
+ "svg",
161
+ {
162
+ className: "size-2.5",
163
+ xmlns: "http://www.w3.org/2000/svg",
164
+ width: "15",
165
+ height: "15",
166
+ viewBox: "0 0 24 24",
167
+ fill: "none",
168
+ stroke: "currentColor",
169
+ strokeWidth: "2",
170
+ strokeLinecap: "round",
171
+ strokeLinejoin: "round",
172
+ "aria-hidden": "true",
173
+ children: [
174
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "12", r: "1" }),
175
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "5", r: "1" }),
176
+ /* @__PURE__ */ jsx("circle", { cx: "9", cy: "19", r: "1" }),
177
+ /* @__PURE__ */ jsx("circle", { cx: "15", cy: "12", r: "1" }),
178
+ /* @__PURE__ */ jsx("circle", { cx: "15", cy: "5", r: "1" }),
179
+ /* @__PURE__ */ jsx("circle", { cx: "15", cy: "19", r: "1" })
180
+ ]
181
+ }
182
+ ) }),
183
+ children
184
+ ]
185
+ }
186
+ );
187
+ }
188
+ export {
189
+ ResizableHandle,
190
+ ResizablePanel,
191
+ ResizablePanelGroup
192
+ };
193
+ //# sourceMappingURL=resizable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/resizable.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n RESIZABLE_GROUP,\n RESIZABLE_HANDLE,\n RESIZABLE_HANDLE_GRIP,\n RESIZABLE_PANEL,\n} from \"../generated/resizable\";\n\nexport type ResizableDirection = \"horizontal\" | \"vertical\";\n\ninterface ResizableContextValue {\n sizes: number[];\n setSizes: React.Dispatch<React.SetStateAction<number[]>>;\n register: (index: number, defaultSize: number) => void;\n direction: ResizableDirection;\n keyboardStep: number;\n groupRef: React.RefObject<HTMLDivElement | null>;\n}\n\nconst ResizableContext = React.createContext<ResizableContextValue | null>(null);\n\nfunction useResizable(): ResizableContextValue {\n const ctx = React.useContext(ResizableContext);\n if (!ctx)\n throw new Error(\"Resizable parts must be used within a ResizablePanelGroup\");\n return ctx;\n}\n\n/** Grows the panel before `index` by `delta` %, shrinking the one after it. */\nfunction redistribute(sizes: number[], index: number, delta: number): number[] {\n const before = sizes[index];\n const after = sizes[index + 1];\n if (before === undefined || after === undefined) return sizes;\n const moved = Math.max(-before, Math.min(after, delta));\n const next = sizes.slice();\n next[index] = before + moved;\n next[index + 1] = after - moved;\n return next;\n}\n\nexport interface ResizablePanelGroupProps\n extends React.ComponentProps<\"div\"> {\n direction?: ResizableDirection;\n keyboardStep?: number;\n onLayout?: (sizes: number[]) => void;\n}\n\nexport function ResizablePanelGroup({\n className,\n direction = \"horizontal\",\n keyboardStep = 10,\n onLayout,\n children,\n ...props\n}: ResizablePanelGroupProps) {\n const [sizes, setSizes] = React.useState<number[]>([]);\n const groupRef = React.useRef<HTMLDivElement>(null);\n\n const register = React.useCallback((index: number, defaultSize: number) => {\n setSizes((prev) => {\n if (prev[index] !== undefined) return prev;\n const next = prev.slice();\n while (next.length <= index) next.push(0);\n next[index] = defaultSize;\n return next;\n });\n }, []);\n\n React.useEffect(() => {\n if (sizes.length) onLayout?.(sizes);\n }, [sizes, onLayout]);\n\n const value = React.useMemo<ResizableContextValue>(\n () => ({ sizes, setSizes, register, direction, keyboardStep, groupRef }),\n [sizes, register, direction, keyboardStep],\n );\n\n return (\n <ResizableContext.Provider value={value}>\n <div\n ref={groupRef}\n data-slot=\"resizable-panel-group\"\n data-panel-group-direction={direction}\n className={cn(RESIZABLE_GROUP, className)}\n {...props}\n >\n {children}\n </div>\n </ResizableContext.Provider>\n );\n}\n\nexport interface ResizablePanelProps extends React.ComponentProps<\"div\"> {\n index: number;\n defaultSize?: number;\n}\n\nexport function ResizablePanel({\n className,\n index,\n defaultSize = 50,\n style,\n children,\n ...props\n}: ResizablePanelProps) {\n const { sizes, register } = useResizable();\n React.useEffect(() => {\n register(index, defaultSize);\n }, [register, index, defaultSize]);\n const basis = sizes[index] ?? defaultSize;\n return (\n <div\n data-slot=\"resizable-panel\"\n className={cn(RESIZABLE_PANEL, className)}\n style={{ flex: `${basis} 1 0%`, ...style }}\n {...props}\n >\n {children}\n </div>\n );\n}\n\nexport interface ResizableHandleProps extends React.ComponentProps<\"div\"> {\n index: number;\n withHandle?: boolean;\n}\n\nexport function ResizableHandle({\n className,\n index,\n withHandle,\n children,\n ...props\n}: ResizableHandleProps) {\n const { setSizes, direction, keyboardStep, groupRef } = useResizable();\n const draggingRef = React.useRef(false);\n\n const resize = React.useCallback(\n (delta: number) => setSizes((prev) => redistribute(prev, index, delta)),\n [setSizes, index],\n );\n\n const onPointerMove = React.useCallback(\n (event: PointerEvent) => {\n if (!draggingRef.current) return;\n const rect = groupRef.current?.getBoundingClientRect();\n if (!rect) return;\n const span = direction === \"vertical\" ? rect.height : rect.width;\n if (span <= 0) return;\n const px = direction === \"vertical\" ? event.movementY : event.movementX;\n resize((px / span) * 100);\n },\n [direction, resize, groupRef],\n );\n\n const onPointerUp = React.useCallback(() => {\n draggingRef.current = false;\n window.removeEventListener(\"pointermove\", onPointerMove);\n window.removeEventListener(\"pointerup\", onPointerUp);\n }, [onPointerMove]);\n\n const onPointerDown = (event: React.PointerEvent) => {\n event.preventDefault();\n draggingRef.current = true;\n window.addEventListener(\"pointermove\", onPointerMove);\n window.addEventListener(\"pointerup\", onPointerUp);\n };\n\n React.useEffect(() => () => onPointerUp(), [onPointerUp]);\n\n const onKeyDown = (event: React.KeyboardEvent) => {\n let delta: number;\n switch (event.key) {\n case \"ArrowLeft\":\n case \"ArrowUp\":\n delta = -keyboardStep;\n break;\n case \"ArrowRight\":\n case \"ArrowDown\":\n delta = keyboardStep;\n break;\n default:\n return;\n }\n if (\n (direction === \"horizontal\" &&\n (event.key === \"ArrowUp\" || event.key === \"ArrowDown\")) ||\n (direction === \"vertical\" &&\n (event.key === \"ArrowLeft\" || event.key === \"ArrowRight\"))\n )\n return;\n event.preventDefault();\n resize(delta);\n };\n\n return (\n <div\n data-slot=\"resizable-handle\"\n data-panel-group-direction={direction}\n role=\"separator\"\n aria-orientation={direction === \"horizontal\" ? \"vertical\" : \"horizontal\"}\n tabIndex={0}\n className={cn(RESIZABLE_HANDLE, className)}\n onPointerDown={onPointerDown}\n onKeyDown={onKeyDown}\n {...props}\n >\n {withHandle && (\n <div className={RESIZABLE_HANDLE_GRIP}>\n <svg\n className=\"size-2.5\"\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"15\"\n height=\"15\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden=\"true\"\n >\n <circle cx=\"9\" cy=\"12\" r=\"1\" />\n <circle cx=\"9\" cy=\"5\" r=\"1\" />\n <circle cx=\"9\" cy=\"19\" r=\"1\" />\n <circle cx=\"15\" cy=\"12\" r=\"1\" />\n <circle cx=\"15\" cy=\"5\" r=\"1\" />\n <circle cx=\"15\" cy=\"19\" r=\"1\" />\n </svg>\n </div>\n )}\n {children}\n </div>\n );\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,40 @@
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ import {
5
+ SCROLL_AREA_THUMB,
6
+ SCROLL_AREA_VIEWPORT,
7
+ SCROLLBAR_BASE,
8
+ scrollBarOrientations
9
+ } from "../generated/scroll-area.js";
10
+ function ScrollArea({
11
+ className,
12
+ children,
13
+ ...props
14
+ }) {
15
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "scroll-area", className: cn("relative", className), ...props, children: [
16
+ /* @__PURE__ */ jsx("div", { "data-slot": "scroll-area-viewport", className: SCROLL_AREA_VIEWPORT, children }),
17
+ /* @__PURE__ */ jsx(ScrollBar, {})
18
+ ] });
19
+ }
20
+ function ScrollBar({
21
+ className,
22
+ orientation = "vertical",
23
+ ...props
24
+ }) {
25
+ return /* @__PURE__ */ jsx(
26
+ "div",
27
+ {
28
+ "data-slot": "scroll-area-scrollbar",
29
+ "data-orientation": orientation,
30
+ className: cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className),
31
+ ...props,
32
+ children: /* @__PURE__ */ jsx("div", { "data-slot": "scroll-area-thumb", className: SCROLL_AREA_THUMB })
33
+ }
34
+ );
35
+ }
36
+ export {
37
+ ScrollArea,
38
+ ScrollBar
39
+ };
40
+ //# sourceMappingURL=scroll-area.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/scroll-area.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport {\n SCROLL_AREA_THUMB,\n SCROLL_AREA_VIEWPORT,\n SCROLLBAR_BASE,\n scrollBarOrientations,\n type ScrollBarOrientation,\n} from \"../generated/scroll-area\";\n\nexport type { ScrollBarOrientation };\n\n// Dep-light scroll area: a viewport `div` with native `overflow` scrolling.\n// Custom scrollbar thumb tracking is omitted — native overflow does the work;\n// `ScrollBar` is a static decorative element kept for class parity.\n\nexport function ScrollArea({\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"scroll-area\" className={cn(\"relative\", className)} {...props}>\n <div data-slot=\"scroll-area-viewport\" className={SCROLL_AREA_VIEWPORT}>\n {children}\n </div>\n <ScrollBar />\n </div>\n );\n}\n\nexport interface ScrollBarProps extends React.ComponentProps<\"div\"> {\n orientation?: ScrollBarOrientation;\n}\n\nexport function ScrollBar({\n className,\n orientation = \"vertical\",\n ...props\n}: ScrollBarProps) {\n return (\n <div\n data-slot=\"scroll-area-scrollbar\"\n data-orientation={orientation}\n className={cn(SCROLLBAR_BASE, scrollBarOrientations[orientation], className)}\n {...props}\n >\n <div data-slot=\"scroll-area-thumb\" className={SCROLL_AREA_THUMB} />\n </div>\n );\n}\n"],"mappings":"AAsBI,SACE,KADF;AAtBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OAEK;AAQA,SAAS,WAAW;AAAA,EACzB;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAAgC;AAC9B,SACE,qBAAC,SAAI,aAAU,eAAc,WAAW,GAAG,YAAY,SAAS,GAAI,GAAG,OACrE;AAAA,wBAAC,SAAI,aAAU,wBAAuB,WAAW,sBAC9C,UACH;AAAA,IACA,oBAAC,aAAU;AAAA,KACb;AAEJ;AAMO,SAAS,UAAU;AAAA,EACxB;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACL,GAAmB;AACjB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,oBAAkB;AAAA,MAClB,WAAW,GAAG,gBAAgB,sBAAsB,WAAW,GAAG,SAAS;AAAA,MAC1E,GAAG;AAAA,MAEJ,8BAAC,SAAI,aAAU,qBAAoB,WAAW,mBAAmB;AAAA;AAAA,EACnE;AAEJ;","names":[]}
@@ -0,0 +1,88 @@
1
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ import { cn } from "../lib/cn.js";
4
+ import { FIELD_TITLE, FIELD_DESCRIPTION } from "../generated/field.js";
5
+ const SECTION_DESCRIPTOR = "flex flex-col gap-2 rounded-lg border border-border bg-hover p-4 text-left";
6
+ function InfoGlyph({ className }) {
7
+ return /* @__PURE__ */ jsxs(
8
+ "svg",
9
+ {
10
+ viewBox: "0 0 24 24",
11
+ fill: "none",
12
+ stroke: "currentColor",
13
+ strokeWidth: 2,
14
+ strokeLinecap: "round",
15
+ strokeLinejoin: "round",
16
+ "aria-hidden": true,
17
+ className: cn("size-4 shrink-0", className),
18
+ children: [
19
+ /* @__PURE__ */ jsx("circle", { cx: "12", cy: "12", r: "10" }),
20
+ /* @__PURE__ */ jsx("path", { d: "M12 16v-4" }),
21
+ /* @__PURE__ */ jsx("path", { d: "M12 8h.01" })
22
+ ]
23
+ }
24
+ );
25
+ }
26
+ function SectionDescriptor({
27
+ title,
28
+ icon = true,
29
+ collapsible = false,
30
+ defaultOpen = false,
31
+ className,
32
+ children,
33
+ ...props
34
+ }) {
35
+ const titleContent = /* @__PURE__ */ jsxs(Fragment, { children: [
36
+ icon && /* @__PURE__ */ jsx(InfoGlyph, { className: "text-accent-debug" }),
37
+ /* @__PURE__ */ jsx("span", { children: title })
38
+ ] });
39
+ if (collapsible) {
40
+ return /* @__PURE__ */ jsxs(
41
+ "details",
42
+ {
43
+ "data-slot": "section-descriptor",
44
+ "data-collapsible": "",
45
+ open: defaultOpen,
46
+ className: cn(SECTION_DESCRIPTOR, className),
47
+ ...props,
48
+ children: [
49
+ /* @__PURE__ */ jsx(
50
+ "summary",
51
+ {
52
+ "data-slot": "section-descriptor-title",
53
+ className: cn(
54
+ FIELD_TITLE,
55
+ "cursor-pointer list-none [&::-webkit-details-marker]:hidden"
56
+ ),
57
+ children: titleContent
58
+ }
59
+ ),
60
+ /* @__PURE__ */ jsx(
61
+ "p",
62
+ {
63
+ "data-slot": "section-descriptor-body",
64
+ className: cn(FIELD_DESCRIPTION, "mt-2"),
65
+ children
66
+ }
67
+ )
68
+ ]
69
+ }
70
+ );
71
+ }
72
+ return /* @__PURE__ */ jsxs(
73
+ "section",
74
+ {
75
+ "data-slot": "section-descriptor",
76
+ className: cn(SECTION_DESCRIPTOR, className),
77
+ ...props,
78
+ children: [
79
+ /* @__PURE__ */ jsx("div", { "data-slot": "section-descriptor-title", className: FIELD_TITLE, children: titleContent }),
80
+ /* @__PURE__ */ jsx("p", { "data-slot": "section-descriptor-body", className: FIELD_DESCRIPTION, children })
81
+ ]
82
+ }
83
+ );
84
+ }
85
+ export {
86
+ SectionDescriptor
87
+ };
88
+ //# sourceMappingURL=section-descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/section-descriptor.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { cn } from \"../lib/cn\";\nimport { FIELD_TITLE, FIELD_DESCRIPTION } from \"../generated/field\";\n\n/**\n * `SectionDescriptor` — a static, always-visible block that explains a whole\n * feature (withdrawals, fund shares, an operator action). It reads as neutral body\n * copy, NOT a coloured alert: the title reuses `FIELD_TITLE`, the body reuses\n * `FIELD_DESCRIPTION`, inside a subtle bordered container. Content-agnostic — the\n * strings are injected by the caller.\n *\n * With `collapsible`, it renders as a native `<details>`/`<summary>` disclosure,\n * which carries keyboard support and find-in-page auto-expand for free.\n */\nconst SECTION_DESCRIPTOR =\n \"flex flex-col gap-2 rounded-lg border border-border bg-hover p-4 text-left\";\n\n// lucide `info`, inlined per the kit's no-lucide-dep icon convention.\nfunction InfoGlyph({ className }: { className?: string }) {\n return (\n <svg\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth={2}\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n aria-hidden\n className={cn(\"size-4 shrink-0\", className)}\n >\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n );\n}\n\nexport interface SectionDescriptorProps extends Omit<\n React.ComponentProps<\"section\">,\n \"title\"\n> {\n title: React.ReactNode;\n /** Show the leading ⓘ mark. Defaults to true. */\n icon?: boolean;\n /** Render as a collapsible `<details>` disclosure. */\n collapsible?: boolean;\n /** Initial open state when `collapsible`. */\n defaultOpen?: boolean;\n}\n\nexport function SectionDescriptor({\n title,\n icon = true,\n collapsible = false,\n defaultOpen = false,\n className,\n children,\n ...props\n}: SectionDescriptorProps) {\n const titleContent = (\n <>\n {icon && <InfoGlyph className=\"text-accent-debug\" />}\n <span>{title}</span>\n </>\n );\n\n if (collapsible) {\n return (\n <details\n data-slot=\"section-descriptor\"\n data-collapsible=\"\"\n open={defaultOpen}\n className={cn(SECTION_DESCRIPTOR, className)}\n {...(props as Record<string, unknown>)}\n >\n <summary\n data-slot=\"section-descriptor-title\"\n className={cn(\n FIELD_TITLE,\n \"cursor-pointer list-none [&::-webkit-details-marker]:hidden\",\n )}\n >\n {titleContent}\n </summary>\n <p\n data-slot=\"section-descriptor-body\"\n className={cn(FIELD_DESCRIPTION, \"mt-2\")}\n >\n {children}\n </p>\n </details>\n );\n }\n\n return (\n <section\n data-slot=\"section-descriptor\"\n className={cn(SECTION_DESCRIPTOR, className)}\n {...props}\n >\n <div data-slot=\"section-descriptor-title\" className={FIELD_TITLE}>\n {titleContent}\n </div>\n <p data-slot=\"section-descriptor-body\" className={FIELD_DESCRIPTION}>\n {children}\n </p>\n </section>\n );\n}\n"],"mappings":"AAoBI,SAwCA,UA9BE,KAVF;AApBJ,YAAY,WAAW;AACvB,SAAS,UAAU;AACnB,SAAS,aAAa,yBAAyB;AAY/C,MAAM,qBACJ;AAGF,SAAS,UAAU,EAAE,UAAU,GAA2B;AACxD,SACE;AAAA,IAAC;AAAA;AAAA,MACC,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAa;AAAA,MACb,eAAc;AAAA,MACd,gBAAe;AAAA,MACf,eAAW;AAAA,MACX,WAAW,GAAG,mBAAmB,SAAS;AAAA,MAE1C;AAAA,4BAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK;AAAA,QAC/B,oBAAC,UAAK,GAAE,aAAY;AAAA,QACpB,oBAAC,UAAK,GAAE,aAAY;AAAA;AAAA;AAAA,EACtB;AAEJ;AAeO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA,OAAO;AAAA,EACP,cAAc;AAAA,EACd,cAAc;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACL,GAA2B;AACzB,QAAM,eACJ,iCACG;AAAA,YAAQ,oBAAC,aAAU,WAAU,qBAAoB;AAAA,IAClD,oBAAC,UAAM,iBAAM;AAAA,KACf;AAGF,MAAI,aAAa;AACf,WACE;AAAA,MAAC;AAAA;AAAA,QACC,aAAU;AAAA,QACV,oBAAiB;AAAA,QACjB,MAAM;AAAA,QACN,WAAW,GAAG,oBAAoB,SAAS;AAAA,QAC1C,GAAI;AAAA,QAEL;AAAA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAW;AAAA,gBACT;AAAA,gBACA;AAAA,cACF;AAAA,cAEC;AAAA;AAAA,UACH;AAAA,UACA;AAAA,YAAC;AAAA;AAAA,cACC,aAAU;AAAA,cACV,WAAW,GAAG,mBAAmB,MAAM;AAAA,cAEtC;AAAA;AAAA,UACH;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,aAAU;AAAA,MACV,WAAW,GAAG,oBAAoB,SAAS;AAAA,MAC1C,GAAG;AAAA,MAEJ;AAAA,4BAAC,SAAI,aAAU,4BAA2B,WAAW,aAClD,wBACH;AAAA,QACA,oBAAC,OAAE,aAAU,2BAA0B,WAAW,mBAC/C,UACH;AAAA;AAAA;AAAA,EACF;AAEJ;","names":[]}
@@ -0,0 +1,25 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import * as React from "react";
3
+ function SelectChevron({ className }) {
4
+ return /* @__PURE__ */ jsx(
5
+ "svg",
6
+ {
7
+ xmlns: "http://www.w3.org/2000/svg",
8
+ width: "24",
9
+ height: "24",
10
+ viewBox: "0 0 24 24",
11
+ fill: "none",
12
+ stroke: "currentColor",
13
+ strokeWidth: "2",
14
+ strokeLinecap: "round",
15
+ strokeLinejoin: "round",
16
+ className,
17
+ "aria-hidden": "true",
18
+ children: /* @__PURE__ */ jsx("path", { d: "m6 9 6 6 6-6" })
19
+ }
20
+ );
21
+ }
22
+ export {
23
+ SelectChevron
24
+ };
25
+ //# sourceMappingURL=select-chevron.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/components/select-chevron.tsx"],"sourcesContent":["import * as React from \"react\";\n\n/** The kit's select arrow, shared by `SelectTrigger` and `NativeSelect`. */\nexport function SelectChevron({ className }: { className?: string }) {\n return (\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"24\"\n height=\"24\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n aria-hidden=\"true\"\n >\n <path d=\"m6 9 6 6 6-6\" />\n </svg>\n );\n}\n"],"mappings":"AAkBM;AAlBN,YAAY,WAAW;AAGhB,SAAS,cAAc,EAAE,UAAU,GAA2B;AACnE,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAM;AAAA,MACN,OAAM;AAAA,MACN,QAAO;AAAA,MACP,SAAQ;AAAA,MACR,MAAK;AAAA,MACL,QAAO;AAAA,MACP,aAAY;AAAA,MACZ,eAAc;AAAA,MACd,gBAAe;AAAA,MACf;AAAA,MACA,eAAY;AAAA,MAEZ,8BAAC,UAAK,GAAE,gBAAe;AAAA;AAAA,EACzB;AAEJ;","names":[]}