@vuer-ai/vuer-uikit 0.0.96 → 0.0.98

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 (341) hide show
  1. package/README.md +106 -7
  2. package/cli/dial-cli.js +49 -7
  3. package/dist/SyncScroll/SyncScroll.cjs +10 -10
  4. package/dist/SyncScroll/SyncScroll.mjs +3 -3
  5. package/dist/SyncScroll/index.cjs +10 -10
  6. package/dist/SyncScroll/index.mjs +3 -3
  7. package/dist/chunk-3HEZVWRW.mjs +62 -0
  8. package/dist/chunk-4KWGGESI.cjs +494 -0
  9. package/dist/{chunk-CCMKL2OA.cjs → chunk-7GWDO25E.cjs} +2 -2
  10. package/dist/chunk-A5LCX2UQ.cjs +208 -0
  11. package/dist/chunk-BEJIZ56L.mjs +300 -0
  12. package/dist/chunk-C7VGRU3O.mjs +283 -0
  13. package/dist/{chunk-LONOMMFA.cjs → chunk-LJMNHTTG.cjs} +21 -21
  14. package/dist/chunk-O66RESRR.cjs +285 -0
  15. package/dist/{chunk-RINTUFYQ.cjs → chunk-RMK6W774.cjs} +24 -19
  16. package/dist/{chunk-BFQ2WL5U.mjs → chunk-TTYSYGVE.mjs} +2 -2
  17. package/dist/chunk-VA3PEYFM.mjs +489 -0
  18. package/dist/chunk-VBBJSIY7.cjs +308 -0
  19. package/dist/{chunk-AIINOWEH.mjs → chunk-W4JCKCW7.mjs} +5 -5
  20. package/dist/chunk-WWGF6TBZ.mjs +206 -0
  21. package/dist/chunk-ZGN4UEJR.cjs +679 -0
  22. package/dist/chunk-ZQLRMOUW.mjs +661 -0
  23. package/dist/dial/DialPanel.cjs +24 -24
  24. package/dist/dial/DialPanel.mjs +23 -23
  25. package/dist/dial/DialProvider.cjs +3 -3
  26. package/dist/dial/DialProvider.d.cts +1 -0
  27. package/dist/dial/DialProvider.d.ts +1 -0
  28. package/dist/dial/DialProvider.example.cjs +72 -0
  29. package/dist/dial/DialProvider.example.d.cts +7 -0
  30. package/dist/dial/DialProvider.example.d.ts +7 -0
  31. package/dist/dial/DialProvider.example.mjs +68 -0
  32. package/dist/dial/DialProvider.mjs +1 -1
  33. package/dist/dial/index.cjs +42 -42
  34. package/dist/dial/index.mjs +23 -23
  35. package/dist/dial/wrapped-inputs/ControlledInputs.cjs +27 -27
  36. package/dist/dial/wrapped-inputs/ControlledInputs.mjs +23 -23
  37. package/dist/dial/wrapped-inputs/DialInputs.cjs +34 -34
  38. package/dist/dial/wrapped-inputs/DialInputs.mjs +23 -23
  39. package/dist/dial/wrapped-inputs/DialVectorInput.cjs +24 -24
  40. package/dist/dial/wrapped-inputs/DialVectorInput.mjs +23 -23
  41. package/dist/dial/wrapped-inputs/index.cjs +39 -39
  42. package/dist/dial/wrapped-inputs/index.mjs +23 -23
  43. package/dist/highlight-cursor/cursor-provider.cjs +3 -3
  44. package/dist/highlight-cursor/cursor-provider.mjs +2 -2
  45. package/dist/highlight-cursor/enhanced-components.cjs +10 -10
  46. package/dist/highlight-cursor/enhanced-components.mjs +5 -5
  47. package/dist/highlight-cursor/index.cjs +16 -16
  48. package/dist/highlight-cursor/index.mjs +6 -6
  49. package/dist/hooks/index.cjs +5 -5
  50. package/dist/hooks/index.mjs +1 -1
  51. package/dist/index.cjs +190 -190
  52. package/dist/index.mjs +23 -23
  53. package/dist/ui/UIKitBadge.cjs +6 -6
  54. package/dist/ui/UIKitBadge.mjs +2 -2
  55. package/dist/ui/avatar.cjs +1 -1
  56. package/dist/ui/avatar.mjs +1 -1
  57. package/dist/ui/badge.cjs +1 -1
  58. package/dist/ui/badge.d.cts +1 -1
  59. package/dist/ui/badge.d.ts +1 -1
  60. package/dist/ui/badge.mjs +1 -1
  61. package/dist/ui/button.cjs +1 -1
  62. package/dist/ui/button.mjs +1 -1
  63. package/dist/ui/card.cjs +1 -1
  64. package/dist/ui/card.mjs +1 -1
  65. package/dist/ui/checkbox.cjs +1 -1
  66. package/dist/ui/checkbox.mjs +1 -1
  67. package/dist/ui/collapsible.cjs +1 -1
  68. package/dist/ui/collapsible.mjs +1 -1
  69. package/dist/ui/drawer.cjs +1 -1
  70. package/dist/ui/drawer.mjs +1 -1
  71. package/dist/ui/dropdown.cjs +1 -1
  72. package/dist/ui/dropdown.mjs +1 -1
  73. package/dist/ui/index.cjs +107 -107
  74. package/dist/ui/index.mjs +17 -17
  75. package/dist/ui/inputs/color-input.cjs +1 -1
  76. package/dist/ui/inputs/color-input.mjs +1 -1
  77. package/dist/ui/inputs/index.cjs +11 -11
  78. package/dist/ui/inputs/index.mjs +3 -3
  79. package/dist/ui/inputs/input-numbers.cjs +1 -1
  80. package/dist/ui/inputs/input-numbers.mjs +1 -1
  81. package/dist/ui/inputs/input.cjs +1 -1
  82. package/dist/ui/inputs/input.d.cts +1 -1
  83. package/dist/ui/inputs/input.d.ts +1 -1
  84. package/dist/ui/inputs/input.mjs +1 -1
  85. package/dist/ui/inputs/number-inputs/CmInput.cjs +1 -1
  86. package/dist/ui/inputs/number-inputs/CmInput.mjs +1 -1
  87. package/dist/ui/inputs/number-inputs/DegInput.cjs +1 -1
  88. package/dist/ui/inputs/number-inputs/DegInput.mjs +1 -1
  89. package/dist/ui/inputs/number-inputs/EulerDegInput.cjs +1 -1
  90. package/dist/ui/inputs/number-inputs/EulerDegInput.mjs +1 -1
  91. package/dist/ui/inputs/number-inputs/EulerInput.cjs +1 -1
  92. package/dist/ui/inputs/number-inputs/EulerInput.mjs +1 -1
  93. package/dist/ui/inputs/number-inputs/EulerRadInput.cjs +1 -1
  94. package/dist/ui/inputs/number-inputs/EulerRadInput.mjs +1 -1
  95. package/dist/ui/inputs/number-inputs/InchInput.cjs +1 -1
  96. package/dist/ui/inputs/number-inputs/InchInput.mjs +1 -1
  97. package/dist/ui/inputs/number-inputs/IntInput.cjs +1 -1
  98. package/dist/ui/inputs/number-inputs/IntInput.mjs +1 -1
  99. package/dist/ui/inputs/number-inputs/KVectorInput.cjs +1 -1
  100. package/dist/ui/inputs/number-inputs/KVectorInput.mjs +1 -1
  101. package/dist/ui/inputs/number-inputs/QuaternionInput.cjs +1 -1
  102. package/dist/ui/inputs/number-inputs/QuaternionInput.mjs +1 -1
  103. package/dist/ui/inputs/number-inputs/RadInput.cjs +1 -1
  104. package/dist/ui/inputs/number-inputs/RadInput.mjs +1 -1
  105. package/dist/ui/inputs/number-inputs/TimeInput.cjs +1 -1
  106. package/dist/ui/inputs/number-inputs/TimeInput.mjs +1 -1
  107. package/dist/ui/inputs/number-inputs/Vec3Input.cjs +1 -1
  108. package/dist/ui/inputs/number-inputs/Vec3Input.mjs +1 -1
  109. package/dist/ui/inputs/number-inputs/VectorInput.cjs +1 -1
  110. package/dist/ui/inputs/number-inputs/VectorInput.mjs +1 -1
  111. package/dist/ui/inputs/number-inputs/index.cjs +11 -11
  112. package/dist/ui/inputs/number-inputs/index.mjs +3 -3
  113. package/dist/ui/inputs/presets-input.cjs +1 -1
  114. package/dist/ui/inputs/presets-input.mjs +1 -1
  115. package/dist/ui/label.cjs +1 -1
  116. package/dist/ui/label.mjs +1 -1
  117. package/dist/ui/layout.cjs +1 -1
  118. package/dist/ui/layout.mjs +1 -1
  119. package/dist/ui/layouts/dock-layout/DockLayoutView.cjs +1 -1
  120. package/dist/ui/layouts/dock-layout/DockLayoutView.mjs +1 -1
  121. package/dist/ui/layouts/dock-layout/LayoutSlots.cjs +1 -1
  122. package/dist/ui/layouts/dock-layout/LayoutSlots.mjs +1 -1
  123. package/dist/ui/layouts/dock-layout/index.cjs +1 -1
  124. package/dist/ui/layouts/dock-layout/index.mjs +1 -1
  125. package/dist/ui/layouts/index.cjs +2 -2
  126. package/dist/ui/layouts/index.mjs +2 -2
  127. package/dist/ui/layouts/liquid-layout/LayoutSlots.cjs +1 -1
  128. package/dist/ui/layouts/liquid-layout/LayoutSlots.mjs +1 -1
  129. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.cjs +1 -1
  130. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.mjs +1 -1
  131. package/dist/ui/layouts/liquid-layout/index.cjs +1 -1
  132. package/dist/ui/layouts/liquid-layout/index.mjs +1 -1
  133. package/dist/ui/modal.cjs +1 -1
  134. package/dist/ui/modal.mjs +1 -1
  135. package/dist/ui/navigation.cjs +1 -1
  136. package/dist/ui/navigation.mjs +1 -1
  137. package/dist/ui/pagination.cjs +1 -1
  138. package/dist/ui/pagination.mjs +1 -1
  139. package/dist/ui/panel.cjs +1 -1
  140. package/dist/ui/panel.mjs +1 -1
  141. package/dist/ui/popover.cjs +1 -1
  142. package/dist/ui/popover.mjs +1 -1
  143. package/dist/ui/radio-group.cjs +1 -1
  144. package/dist/ui/radio-group.mjs +1 -1
  145. package/dist/ui/resizable.cjs +1 -1
  146. package/dist/ui/resizable.mjs +1 -1
  147. package/dist/ui/select.cjs +1 -1
  148. package/dist/ui/select.d.cts +1 -1
  149. package/dist/ui/select.d.ts +1 -1
  150. package/dist/ui/select.mjs +1 -1
  151. package/dist/ui/separator.cjs +1 -1
  152. package/dist/ui/separator.mjs +1 -1
  153. package/dist/ui/sheet.cjs +1 -1
  154. package/dist/ui/sheet.mjs +1 -1
  155. package/dist/ui/sidebar.cjs +26 -26
  156. package/dist/ui/sidebar.mjs +2 -2
  157. package/dist/ui/simple-tree-view.cjs +1 -1
  158. package/dist/ui/simple-tree-view.mjs +1 -1
  159. package/dist/ui/skeleton.cjs +1 -1
  160. package/dist/ui/skeleton.mjs +1 -1
  161. package/dist/ui/slider.cjs +1 -1
  162. package/dist/ui/slider.mjs +1 -1
  163. package/dist/ui/switch.cjs +1 -1
  164. package/dist/ui/switch.mjs +1 -1
  165. package/dist/ui/table.cjs +1 -1
  166. package/dist/ui/table.mjs +1 -1
  167. package/dist/ui/tabs.cjs +1 -1
  168. package/dist/ui/tabs.mjs +1 -1
  169. package/dist/ui/textarea.cjs +1 -1
  170. package/dist/ui/textarea.d.cts +1 -1
  171. package/dist/ui/textarea.d.ts +1 -1
  172. package/dist/ui/textarea.mjs +1 -1
  173. package/dist/ui/theme/ThemeToggles.cjs +1 -1
  174. package/dist/ui/theme/ThemeToggles.mjs +1 -1
  175. package/dist/ui/theme/index.cjs +1 -1
  176. package/dist/ui/theme/index.mjs +1 -1
  177. package/dist/ui/toggle-buttons.cjs +1 -1
  178. package/dist/ui/toggle-buttons.mjs +1 -1
  179. package/dist/ui/toggle-group.cjs +1 -1
  180. package/dist/ui/toggle-group.mjs +1 -1
  181. package/dist/ui/toggle.cjs +1 -1
  182. package/dist/ui/toggle.mjs +1 -1
  183. package/dist/ui/toolbar.cjs +1 -1
  184. package/dist/ui/toolbar.mjs +1 -1
  185. package/dist/ui/tooltip.cjs +1 -1
  186. package/dist/ui/tooltip.mjs +1 -1
  187. package/dist/ui/tree-view/TreeSearchBar.cjs +1 -1
  188. package/dist/ui/tree-view/TreeSearchBar.mjs +1 -1
  189. package/dist/ui/tree-view/TreeView.cjs +1 -1
  190. package/dist/ui/tree-view/TreeView.mjs +1 -1
  191. package/dist/ui/tree-view/index.cjs +6 -6
  192. package/dist/ui/tree-view/index.mjs +2 -2
  193. package/dist/ui/tree-view-legacy.cjs +9 -9
  194. package/dist/ui/tree-view-legacy.mjs +5 -5
  195. package/dist/ui/waterfall/CursorOverlay.cjs +1 -1
  196. package/dist/ui/waterfall/CursorOverlay.mjs +1 -1
  197. package/dist/ui/waterfall/TimelineEvent.cjs +1 -1
  198. package/dist/ui/waterfall/TimelineEvent.mjs +1 -1
  199. package/dist/ui/waterfall/TimelineProcessBar.cjs +1 -1
  200. package/dist/ui/waterfall/TimelineProcessBar.mjs +1 -1
  201. package/dist/ui/waterfall/Wedges.cjs +1 -1
  202. package/dist/ui/waterfall/Wedges.mjs +1 -1
  203. package/dist/ui/waterfall/index.cjs +8 -8
  204. package/dist/ui/waterfall/index.mjs +7 -7
  205. package/package.json +28 -2
  206. package/src/SyncScroll/README.md +283 -0
  207. package/src/SyncScroll/SyncScroll.tsx +361 -0
  208. package/src/SyncScroll/index.ts +22 -0
  209. package/src/SyncScroll/useSyncScroll.tsx +226 -0
  210. package/src/cli/dial-cli.ts +1133 -0
  211. package/src/dial/DialPanel.tsx +208 -0
  212. package/src/dial/DialProvider.example.tsx +80 -0
  213. package/src/dial/DialProvider.tsx +138 -0
  214. package/src/dial/index.ts +26 -0
  215. package/src/dial/wrapped-inputs/ControlledInputs.tsx +176 -0
  216. package/src/dial/wrapped-inputs/DialInputs.tsx +401 -0
  217. package/src/dial/wrapped-inputs/DialVectorInput.tsx +125 -0
  218. package/src/dial/wrapped-inputs/index.ts +25 -0
  219. package/src/highlight-cursor/cursor-context.tsx +23 -0
  220. package/src/highlight-cursor/cursor-provider.tsx +264 -0
  221. package/src/highlight-cursor/enhanced-components.tsx +16 -0
  222. package/src/highlight-cursor/index.ts +21 -0
  223. package/src/highlight-cursor/tabs-cursor-context.tsx +121 -0
  224. package/src/highlight-cursor/types.ts +40 -0
  225. package/src/highlight-cursor/with-cursor.tsx +144 -0
  226. package/src/hooks/clientOnly.tsx +54 -0
  227. package/src/hooks/cn.ts +33 -0
  228. package/src/hooks/index.ts +9 -0
  229. package/src/hooks/useDocument.tsx +18 -0
  230. package/src/hooks/useDragSelect.ts +116 -0
  231. package/src/hooks/useIsMobile.ts +35 -0
  232. package/src/hooks/useLocalStorage.ts +122 -0
  233. package/src/hooks/useLocation.tsx +95 -0
  234. package/src/hooks/useQueryParams.tsx +31 -0
  235. package/src/hooks/useWindow.tsx +18 -0
  236. package/src/index.css +5 -0
  237. package/src/index.ts +5 -0
  238. package/src/styles/.editorconfig +0 -0
  239. package/src/styles/theme.css +152 -0
  240. package/src/styles/toast.css +67 -0
  241. package/src/styles/variables.css +229 -0
  242. package/src/ui/UIKitBadge.tsx +171 -0
  243. package/src/ui/avatar.tsx +221 -0
  244. package/src/ui/badge.tsx +74 -0
  245. package/src/ui/button.tsx +143 -0
  246. package/src/ui/card.tsx +146 -0
  247. package/src/ui/checkbox.tsx +78 -0
  248. package/src/ui/collapsible.tsx +43 -0
  249. package/src/ui/drag-selectable/DragSelectProvider.tsx +178 -0
  250. package/src/ui/drag-selectable/createSelectable.tsx +43 -0
  251. package/src/ui/drag-selectable/index.ts +2 -0
  252. package/src/ui/drawer.tsx +137 -0
  253. package/src/ui/dropdown.tsx +707 -0
  254. package/src/ui/icons/MouseCursorIcons.tsx +39 -0
  255. package/src/ui/icons/cursor.tsx +38 -0
  256. package/src/ui/icons/index.ts +2 -0
  257. package/src/ui/index.ts +45 -0
  258. package/src/ui/inputs/color-input.tsx +61 -0
  259. package/src/ui/inputs/index.tsx +5 -0
  260. package/src/ui/inputs/input-numbers.tsx +394 -0
  261. package/src/ui/inputs/input.tsx +155 -0
  262. package/src/ui/inputs/number-inputs/CmInput.tsx +26 -0
  263. package/src/ui/inputs/number-inputs/DegInput.tsx +26 -0
  264. package/src/ui/inputs/number-inputs/EulerDegInput.tsx +14 -0
  265. package/src/ui/inputs/number-inputs/EulerInput.tsx +30 -0
  266. package/src/ui/inputs/number-inputs/EulerRadInput.tsx +14 -0
  267. package/src/ui/inputs/number-inputs/InchInput.tsx +26 -0
  268. package/src/ui/inputs/number-inputs/IntInput.tsx +46 -0
  269. package/src/ui/inputs/number-inputs/KVectorInput.tsx +20 -0
  270. package/src/ui/inputs/number-inputs/QuaternionInput.tsx +27 -0
  271. package/src/ui/inputs/number-inputs/RadInput.tsx +26 -0
  272. package/src/ui/inputs/number-inputs/TimeInput.tsx +26 -0
  273. package/src/ui/inputs/number-inputs/Vec3Input.tsx +26 -0
  274. package/src/ui/inputs/number-inputs/VectorInput.tsx +38 -0
  275. package/src/ui/inputs/number-inputs/index.ts +38 -0
  276. package/src/ui/inputs/presets-input.tsx +59 -0
  277. package/src/ui/label.tsx +35 -0
  278. package/src/ui/layout.tsx +43 -0
  279. package/src/ui/layouts/dock-layout/DockLayoutView.tsx +128 -0
  280. package/src/ui/layouts/dock-layout/LayoutSlots.tsx +85 -0
  281. package/src/ui/layouts/dock-layout/index.tsx +2 -0
  282. package/src/ui/layouts/index.ts +2 -0
  283. package/src/ui/layouts/liquid-layout/LayoutSlots.tsx +82 -0
  284. package/src/ui/layouts/liquid-layout/LiquidLayoutView.tsx +76 -0
  285. package/src/ui/layouts/liquid-layout/index.ts +1 -0
  286. package/src/ui/modal.tsx +211 -0
  287. package/src/ui/navigation.tsx +86 -0
  288. package/src/ui/pagination.tsx +129 -0
  289. package/src/ui/panel.tsx +146 -0
  290. package/src/ui/popover.tsx +112 -0
  291. package/src/ui/radio-group.tsx +63 -0
  292. package/src/ui/resizable.tsx +52 -0
  293. package/src/ui/select.tsx +365 -0
  294. package/src/ui/separator.tsx +26 -0
  295. package/src/ui/sheet.tsx +257 -0
  296. package/src/ui/sidebar.tsx +695 -0
  297. package/src/ui/simple-tree-view.tsx +604 -0
  298. package/src/ui/skeleton.tsx +15 -0
  299. package/src/ui/slider.tsx +204 -0
  300. package/src/ui/switch.tsx +45 -0
  301. package/src/ui/table.tsx +99 -0
  302. package/src/ui/tabs.tsx +192 -0
  303. package/src/ui/textarea.tsx +55 -0
  304. package/src/ui/theme/ThemeProvider.tsx +319 -0
  305. package/src/ui/theme/ThemeToggles.tsx +84 -0
  306. package/src/ui/theme/index.ts +21 -0
  307. package/src/ui/theme/themeScript.tsx +179 -0
  308. package/src/ui/theme/types.ts +61 -0
  309. package/src/ui/toast.tsx +30 -0
  310. package/src/ui/toggle-buttons.tsx +290 -0
  311. package/src/ui/toggle-group.tsx +236 -0
  312. package/src/ui/toggle.tsx +94 -0
  313. package/src/ui/toolbar.tsx +54 -0
  314. package/src/ui/tooltip.tsx +171 -0
  315. package/src/ui/tree-view/TreeSearchBar.tsx +88 -0
  316. package/src/ui/tree-view/TreeView.tsx +232 -0
  317. package/src/ui/tree-view/hooks.tsx +289 -0
  318. package/src/ui/tree-view/index.ts +4 -0
  319. package/src/ui/tree-view/types.ts +23 -0
  320. package/src/ui/tree-view-legacy.tsx +644 -0
  321. package/src/ui/version-badge.tsx +0 -0
  322. package/src/ui/waterfall/CursorOverlay.tsx +96 -0
  323. package/src/ui/waterfall/NavigationControls.tsx +42 -0
  324. package/src/ui/waterfall/Tick.tsx +51 -0
  325. package/src/ui/waterfall/TimeRuleEventDot.tsx +19 -0
  326. package/src/ui/waterfall/TimelineEvent.tsx +60 -0
  327. package/src/ui/waterfall/TimelineProcessBar.tsx +207 -0
  328. package/src/ui/waterfall/Wedges.tsx +67 -0
  329. package/src/ui/waterfall/WheelZoomContext.tsx +128 -0
  330. package/src/ui/waterfall/hooks/useTimelineState.tsx +134 -0
  331. package/src/ui/waterfall/hooks/useViewport.tsx +293 -0
  332. package/src/ui/waterfall/index.tsx +326 -0
  333. package/src/ui/waterfall/types.ts +20 -0
  334. package/src/ui/waterfall/utils.ts +91 -0
  335. package/dist/chunk-W2YAQV5N.mjs +0 -57
  336. package/dist/{chunk-QLCEHV4Q.mjs → chunk-2OZK5DY5.mjs} +2 -2
  337. package/dist/{chunk-Z35DNFRZ.cjs → chunk-7IS37C3P.cjs} +2 -2
  338. package/dist/{chunk-4AOAH77D.mjs → chunk-A2PCEL5S.mjs} +2 -2
  339. package/dist/{chunk-K4VD5PPY.mjs → chunk-BIUDC66P.mjs} +1 -1
  340. package/dist/{chunk-RKJR6RZU.cjs → chunk-OYNLQTHW.cjs} +1 -1
  341. package/dist/{chunk-VE3XLQLO.cjs → chunk-QUFZWF4E.cjs} +2 -2
@@ -0,0 +1,401 @@
1
+ import React from "react";
2
+
3
+ import {
4
+ CmInput,
5
+ DegInput,
6
+ EulerDegInput,
7
+ EulerInput,
8
+ FormLayout,
9
+ InchInput,
10
+ IntInput,
11
+ Label,
12
+ QuaternionInput,
13
+ RadInput,
14
+ TimeInput,
15
+ Vec3Input,
16
+ VectorInput,
17
+ } from "../../index";
18
+ import { LabelPositionT, useDialSchema } from "../DialProvider";
19
+
20
+ // Base props for all dial-wrapped inputs
21
+ interface DialWrapperProps {
22
+ name: string;
23
+ label?: string;
24
+ size?: "sm" | "md" | "lg";
25
+ step?: number;
26
+ labelPosition?: LabelPositionT;
27
+ }
28
+
29
+ // Helper component for wrapping inputs with labels
30
+ const DialInputWrapper: React.FC<{
31
+ label?: string;
32
+ children: React.ReactElement;
33
+ }> = ({ label, children }) => {
34
+ if (!label) {
35
+ return <>{children}</>;
36
+ }
37
+
38
+ // Always use horizontal layout (label on left)
39
+ return (
40
+ <FormLayout orientation="label-top">
41
+ <Label size="sm">{label}</Label>
42
+ {children}
43
+ </FormLayout>
44
+ );
45
+ };
46
+
47
+ // Dial-wrapped Vec3Input
48
+ export const DialVec3Input: React.FC<DialWrapperProps> = ({
49
+ name,
50
+ label,
51
+ size = "sm",
52
+ step,
53
+ labelPosition,
54
+ }) => {
55
+ const { getValue, setValue } = useDialSchema();
56
+ const value = (getValue(name) ?? [0, 0, 0]) as [number, number, number];
57
+
58
+ if (labelPosition === "inline") {
59
+ return (
60
+ <Vec3Input
61
+ value={value}
62
+ onValuesChange={(val) => setValue(name, val)}
63
+ size={size}
64
+ step={step}
65
+ prefix={label ? [label, "", ""] : undefined}
66
+ />
67
+ );
68
+ } else {
69
+ return (
70
+ <DialInputWrapper label={label}>
71
+ <Vec3Input
72
+ value={value}
73
+ onValuesChange={(val) => setValue(name, val)}
74
+ size={size}
75
+ step={step}
76
+ />
77
+ </DialInputWrapper>
78
+ );
79
+ }
80
+ };
81
+
82
+ // Dial-wrapped EulerInput (radians)
83
+ export const DialEulerInput: React.FC<DialWrapperProps> = ({
84
+ name,
85
+ label,
86
+ size = "sm",
87
+ step,
88
+ labelPosition,
89
+ }) => {
90
+ const { getValue, setValue } = useDialSchema();
91
+ const value = (getValue(name) ?? [0, 0, 0]) as [number, number, number];
92
+
93
+ if (labelPosition === "inline") {
94
+ return (
95
+ <EulerInput
96
+ value={value}
97
+ onValuesChange={(val) => setValue(name, val)}
98
+ size={size}
99
+ step={step}
100
+ prefix={label ? [label, "", ""] : undefined}
101
+ />
102
+ );
103
+ } else {
104
+ return (
105
+ <DialInputWrapper label={label}>
106
+ <EulerInput
107
+ value={value}
108
+ onValuesChange={(val) => setValue(name, val)}
109
+ size={size}
110
+ step={step}
111
+ />
112
+ </DialInputWrapper>
113
+ );
114
+ }
115
+ };
116
+
117
+ // Dial-wrapped EulerDegInput (degrees)
118
+ export const DialEulerDegInput: React.FC<DialWrapperProps> = ({
119
+ name,
120
+ label,
121
+ size = "sm",
122
+ step,
123
+ labelPosition,
124
+ }) => {
125
+ const { getValue, setValue } = useDialSchema();
126
+ const value = (getValue(name) ?? [0, 0, 0]) as [number, number, number];
127
+
128
+ if (labelPosition === "inline") {
129
+ return (
130
+ <EulerDegInput
131
+ value={value}
132
+ onValuesChange={(val) => setValue(name, val)}
133
+ size={size}
134
+ step={step}
135
+ prefix={label ? [label, "", ""] : undefined}
136
+ />
137
+ );
138
+ } else {
139
+ return (
140
+ <DialInputWrapper label={label}>
141
+ <EulerDegInput
142
+ value={value}
143
+ onValuesChange={(val) => setValue(name, val)}
144
+ size={size}
145
+ step={step}
146
+ />
147
+ </DialInputWrapper>
148
+ );
149
+ }
150
+ };
151
+
152
+ // Dial-wrapped QuaternionInput
153
+ export const DialQuaternionInput: React.FC<DialWrapperProps> = ({
154
+ name,
155
+ label,
156
+ size = "sm",
157
+ step,
158
+ labelPosition,
159
+ }) => {
160
+ const { getValue, setValue } = useDialSchema();
161
+ const value = (getValue(name) ?? [1, 0, 0, 0]) as [number, number, number, number];
162
+
163
+ if (labelPosition === "inline") {
164
+ return (
165
+ <QuaternionInput
166
+ value={value}
167
+ onValuesChange={(val) => setValue(name, val)}
168
+ size={size}
169
+ step={step}
170
+ prefix={label ? [label, "", "", ""] : undefined}
171
+ />
172
+ );
173
+ } else {
174
+ return (
175
+ <DialInputWrapper label={label}>
176
+ <QuaternionInput
177
+ value={value}
178
+ onValuesChange={(val) => setValue(name, val)}
179
+ size={size}
180
+ step={step}
181
+ />
182
+ </DialInputWrapper>
183
+ );
184
+ }
185
+ };
186
+
187
+ // Dial-wrapped VectorInput (generic N-dimensional)
188
+ export const DialVectorInput: React.FC<DialWrapperProps & { dimensions?: number }> = ({
189
+ name,
190
+ label,
191
+ size = "sm",
192
+ step,
193
+ dimensions = 3,
194
+ labelPosition,
195
+ }) => {
196
+ const { getValue, setValue } = useDialSchema();
197
+ const value = (getValue(name) ?? new Array(dimensions).fill(0)) as number[];
198
+
199
+ if (labelPosition === "inline") {
200
+ return (
201
+ <VectorInput
202
+ value={value}
203
+ onValuesChange={(val) => setValue(name, val)}
204
+ size={size}
205
+ step={step}
206
+ prefix={label ? [label, ...new Array(value.length - 1).fill("")] : undefined}
207
+ />
208
+ );
209
+ } else {
210
+ return (
211
+ <DialInputWrapper label={label}>
212
+ <VectorInput
213
+ value={value}
214
+ onValuesChange={(val) => setValue(name, val)}
215
+ size={size}
216
+ step={step}
217
+ />
218
+ </DialInputWrapper>
219
+ );
220
+ }
221
+ };
222
+
223
+ // Dial-wrapped IntInput
224
+ export const DialIntInput: React.FC<DialWrapperProps> = ({
225
+ name,
226
+ label,
227
+ size = "sm",
228
+ step = 1,
229
+ labelPosition,
230
+ }) => {
231
+ const { getValue, setValue } = useDialSchema();
232
+ const value = (getValue(name) ?? 0) as number;
233
+
234
+ if (labelPosition === "inline") {
235
+ return (
236
+ <IntInput
237
+ value={value}
238
+ prefix={label ? [label] : undefined}
239
+ onChange={(val) => setValue(name, val)}
240
+ size={size}
241
+ step={step}
242
+ />
243
+ );
244
+ } else {
245
+ return (
246
+ <DialInputWrapper label={label}>
247
+ <IntInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
248
+ </DialInputWrapper>
249
+ );
250
+ }
251
+ };
252
+
253
+ // Dial-wrapped DegInput
254
+ export const DialDegInput: React.FC<DialWrapperProps> = ({
255
+ name,
256
+ label,
257
+ size = "sm",
258
+ step,
259
+ labelPosition,
260
+ }) => {
261
+ const { getValue, setValue } = useDialSchema();
262
+ const value = (getValue(name) ?? 0) as number;
263
+
264
+ if (labelPosition === "inline") {
265
+ return (
266
+ <DegInput
267
+ value={value}
268
+ onChange={(val) => setValue(name, val)}
269
+ size={size}
270
+ step={step}
271
+ prefix={label ? [label] : undefined}
272
+ />
273
+ );
274
+ } else {
275
+ return (
276
+ <DialInputWrapper label={label}>
277
+ <DegInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
278
+ </DialInputWrapper>
279
+ );
280
+ }
281
+ };
282
+
283
+ // Dial-wrapped RadInput
284
+ export const DialRadInput: React.FC<DialWrapperProps> = ({
285
+ name,
286
+ label,
287
+ size = "sm",
288
+ step,
289
+ labelPosition,
290
+ }) => {
291
+ const { getValue, setValue } = useDialSchema();
292
+ const value = (getValue(name) ?? 0) as number;
293
+
294
+ if (labelPosition === "inline") {
295
+ return (
296
+ <RadInput
297
+ value={value}
298
+ onChange={(val) => setValue(name, val)}
299
+ size={size}
300
+ step={step}
301
+ prefix={label ? [label] : undefined}
302
+ />
303
+ );
304
+ } else {
305
+ return (
306
+ <DialInputWrapper label={label}>
307
+ <RadInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
308
+ </DialInputWrapper>
309
+ );
310
+ }
311
+ };
312
+
313
+ // Dial-wrapped CmInput
314
+ export const DialCmInput: React.FC<DialWrapperProps> = ({
315
+ name,
316
+ label,
317
+ size = "sm",
318
+ step,
319
+ labelPosition,
320
+ }) => {
321
+ const { getValue, setValue } = useDialSchema();
322
+ const value = (getValue(name) ?? 0) as number;
323
+
324
+ if (labelPosition === "inline") {
325
+ return (
326
+ <CmInput
327
+ value={value}
328
+ onChange={(val) => setValue(name, val)}
329
+ size={size}
330
+ step={step}
331
+ prefix={label ? [label] : undefined}
332
+ />
333
+ );
334
+ } else {
335
+ return (
336
+ <DialInputWrapper label={label}>
337
+ <CmInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
338
+ </DialInputWrapper>
339
+ );
340
+ }
341
+ };
342
+
343
+ // Dial-wrapped InchInput
344
+ export const DialInchInput: React.FC<DialWrapperProps> = ({
345
+ name,
346
+ label,
347
+ size = "sm",
348
+ step,
349
+ labelPosition,
350
+ }) => {
351
+ const { getValue, setValue } = useDialSchema();
352
+ const value = (getValue(name) ?? 0) as number;
353
+
354
+ if (labelPosition === "inline") {
355
+ return (
356
+ <InchInput
357
+ value={value}
358
+ onChange={(val) => setValue(name, val)}
359
+ size={size}
360
+ step={step}
361
+ prefix={label ? [label] : undefined}
362
+ />
363
+ );
364
+ } else {
365
+ return (
366
+ <DialInputWrapper label={label}>
367
+ <InchInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
368
+ </DialInputWrapper>
369
+ );
370
+ }
371
+ };
372
+
373
+ // Dial-wrapped TimeInput
374
+ export const DialTimeInput: React.FC<DialWrapperProps> = ({
375
+ name,
376
+ label,
377
+ size = "sm",
378
+ step,
379
+ labelPosition,
380
+ }) => {
381
+ const { getValue, setValue } = useDialSchema();
382
+ const value = (getValue(name) ?? 0) as number;
383
+
384
+ if (labelPosition === "inline") {
385
+ return (
386
+ <TimeInput
387
+ value={value}
388
+ onChange={(val) => setValue(name, val)}
389
+ size={size}
390
+ step={step}
391
+ prefix={label ? [label] : undefined}
392
+ />
393
+ );
394
+ } else {
395
+ return (
396
+ <DialInputWrapper label={label}>
397
+ <TimeInput value={value} onChange={(val) => setValue(name, val)} size={size} step={step} />
398
+ </DialInputWrapper>
399
+ );
400
+ }
401
+ };
@@ -0,0 +1,125 @@
1
+ import React from "react";
2
+ import { useDialSchema } from "../DialProvider";
3
+ import { FormLayout, Label, VectorInput } from "../../index";
4
+
5
+ interface DialVectorInputProps {
6
+ name: string;
7
+ label?: string;
8
+ column?: boolean;
9
+ size?: "sm" | "md" | "lg";
10
+ }
11
+
12
+ /**
13
+ * Variable-dimension vector input component that supports any number of dimensions
14
+ * Used for vector-6, number-group, or any multi-dimensional numeric input
15
+ */
16
+ export const DialVectorInput: React.FC<DialVectorInputProps> = ({
17
+ name,
18
+ label,
19
+ size = "sm",
20
+ }) => {
21
+ const { getValue, setValue, schemas } = useDialSchema();
22
+ const schema = schemas.find((s) => s.name === name);
23
+ if (!schema) {
24
+ return null;
25
+ }
26
+
27
+ const value = getValue(name) || [];
28
+
29
+ // Get metadata from schema
30
+ const dimensions =
31
+ schema.dimensions ||
32
+ schema.placeholders?.length ||
33
+ schema.dtypes?.length ||
34
+ (Array.isArray(value) ? value.length : 6);
35
+ const placeholders = schema.placeholders || [];
36
+ const dtypes = schema.dtypes || [];
37
+ const steps = schema.steps || [];
38
+ const tags = schema.tags || {};
39
+
40
+ // Determine layout from tags
41
+ // col-N means grid-auto-flow: column with N rows (fills columns first)
42
+ // row-N means grid-auto-flow: row with N columns (fills rows first)
43
+ let gridAutoFlow: "column" | "row";
44
+ let gridColumns: number | undefined;
45
+ let gridRows: number | undefined;
46
+
47
+ if (typeof tags.col === "number") {
48
+ // col-N: flow by columns, with N rows defined
49
+ gridAutoFlow = "column";
50
+ gridRows = tags.col;
51
+ gridColumns = undefined; // Columns auto-calculated based on content
52
+ } else if (typeof tags.row === "number") {
53
+ // row-N: flow by rows, with N columns defined
54
+ gridAutoFlow = "row";
55
+ gridColumns = tags.row;
56
+ gridRows = undefined; // Rows auto-calculated based on content
57
+ } else {
58
+ // Default: no explicit grid, let it flow naturally
59
+ gridAutoFlow = "row";
60
+ gridColumns = undefined;
61
+ gridRows = undefined;
62
+ }
63
+
64
+ console.log("the grid-flow is", gridAutoFlow, gridColumns, gridRows);
65
+
66
+ // Ensure value is an array with correct dimensions
67
+ const vectorValue = Array.isArray(value)
68
+ ? value.concat(Array(Math.max(0, dimensions - value.length)).fill(0))
69
+ : Array(dimensions).fill(0);
70
+
71
+ // Calculate steps for each input based on dtypes or provided steps
72
+ const inputSteps = Array.from({ length: dimensions }, (_, i) => {
73
+ // First check if a specific step is provided for this index
74
+ if (steps[i] !== undefined) {
75
+ return steps[i];
76
+ }
77
+ // Otherwise, determine step based on dtype
78
+ const dtype = dtypes[i];
79
+ return dtype === "number-int" ? 1 : 0.001;
80
+ });
81
+
82
+ // Create labels from placeholders
83
+ const labels =
84
+ placeholders.length > 0
85
+ ? placeholders.map((p) => <span className="text-xs">{p}</span>)
86
+ : undefined;
87
+
88
+ const handleValuesChange = (newValues: number[]) => {
89
+ setValue(name, newValues);
90
+ };
91
+
92
+ const inputComponent = (
93
+ <VectorInput
94
+ value={vectorValue}
95
+ onValuesChange={handleValuesChange}
96
+ size={size}
97
+ step={inputSteps}
98
+ labels={labels}
99
+ gridAutoFlow={gridAutoFlow}
100
+ columns={gridColumns}
101
+ rows={gridRows}
102
+ />
103
+ );
104
+
105
+ if (!label) {
106
+ return inputComponent;
107
+ }
108
+
109
+ return (
110
+ <FormLayout orientation="label-top">
111
+ <Label size="sm">{label}</Label>
112
+ <div className="flex flex-row items-center gap-2">
113
+ {schema.helpText && (
114
+ <span
115
+ className="text-text-secondary cursor-help text-xs"
116
+ title={schema.helpText as string}
117
+ >
118
+
119
+ </span>
120
+ )}
121
+ {inputComponent}
122
+ </div>
123
+ </FormLayout>
124
+ );
125
+ };
@@ -0,0 +1,25 @@
1
+ // Basic controlled inputs
2
+ export {
3
+ DialBooleanInput,
4
+ DialNumberInput,
5
+ DialSelectInput,
6
+ DialSliderInput,
7
+ } from "./ControlledInputs";
8
+
9
+ // UIKit wrapped inputs
10
+ export {
11
+ DialVec3Input,
12
+ DialEulerInput,
13
+ DialEulerDegInput,
14
+ DialQuaternionInput,
15
+ DialVectorInput as DialVectorWrappedInput,
16
+ DialIntInput,
17
+ DialDegInput,
18
+ DialRadInput,
19
+ DialCmInput,
20
+ DialInchInput,
21
+ DialTimeInput,
22
+ } from "./DialInputs";
23
+
24
+ // Variable-dimension vector input
25
+ export { DialVectorInput } from "./DialVectorInput";
@@ -0,0 +1,23 @@
1
+ import { createContext, useContext } from "react";
2
+
3
+ import type { CursorContextType } from "./types";
4
+
5
+ const defaultDimensions = {
6
+ width: 0,
7
+ height: 0,
8
+ x: 0,
9
+ y: 0,
10
+ };
11
+
12
+ const defaultContext: CursorContextType = {
13
+ mousePosition: { x: 0, y: 0 },
14
+ hoveredElementId: null,
15
+ elementDimensions: defaultDimensions,
16
+ registerHoveredElement: () => {},
17
+ unregisterHoveredElement: () => {},
18
+ updateElementDimensions: () => {},
19
+ };
20
+
21
+ export const CursorContext = createContext<CursorContextType>(defaultContext);
22
+
23
+ export const useCursor = () => useContext(CursorContext);