entangle-ui 0.1.0 → 0.3.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 (347) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +129 -75
  3. package/dist/esm/components/Icons/CheckIcon.js +27 -0
  4. package/dist/esm/components/Icons/CheckIcon.js.map +1 -0
  5. package/dist/esm/components/Icons/ChevronDownIcon.js +27 -0
  6. package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -0
  7. package/dist/esm/components/Icons/ChevronUpIcon.js +27 -0
  8. package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -0
  9. package/dist/esm/components/Icons/CircleIcon.js +27 -0
  10. package/dist/esm/components/Icons/CircleIcon.js.map +1 -0
  11. package/dist/esm/components/Icons/CloseIcon.js +27 -0
  12. package/dist/esm/components/Icons/CloseIcon.js.map +1 -0
  13. package/dist/esm/components/Icons/EyeDropperIcon.js +28 -0
  14. package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -0
  15. package/dist/esm/components/Icons/TangentAlignedIcon.js +9 -0
  16. package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -0
  17. package/dist/esm/components/Icons/TangentAutoIcon.js +9 -0
  18. package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -0
  19. package/dist/esm/components/Icons/TangentFreeIcon.js +9 -0
  20. package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -0
  21. package/dist/esm/components/Icons/TangentLinearIcon.js +9 -0
  22. package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -0
  23. package/dist/esm/components/Icons/TangentMirroredIcon.js +9 -0
  24. package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -0
  25. package/dist/esm/components/Icons/TangentStepIcon.js +9 -0
  26. package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -0
  27. package/dist/esm/components/controls/ColorPicker/AlphaSlider.js +92 -0
  28. package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -0
  29. package/dist/esm/components/controls/ColorPicker/ColorArea.js +93 -0
  30. package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -0
  31. package/dist/esm/components/controls/ColorPicker/ColorInputs.js +129 -0
  32. package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -0
  33. package/dist/esm/components/controls/ColorPicker/ColorPalette.js +89 -0
  34. package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -0
  35. package/dist/esm/components/controls/ColorPicker/ColorPicker.js +75 -0
  36. package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -0
  37. package/dist/esm/components/controls/ColorPicker/ColorPresets.js +57 -0
  38. package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -0
  39. package/dist/esm/components/controls/ColorPicker/ColorSwatch.js +67 -0
  40. package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -0
  41. package/dist/esm/components/controls/ColorPicker/EyeDropper.js +85 -0
  42. package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -0
  43. package/dist/esm/components/controls/ColorPicker/HueSlider.js +85 -0
  44. package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -0
  45. package/dist/esm/components/controls/ColorPicker/colorUtils.js +220 -0
  46. package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -0
  47. package/dist/esm/components/controls/ColorPicker/palettes/material.js +299 -0
  48. package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -0
  49. package/dist/esm/components/controls/ColorPicker/palettes/professional.js +479 -0
  50. package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -0
  51. package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js +366 -0
  52. package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -0
  53. package/dist/esm/components/controls/ColorPicker/useColor.js +63 -0
  54. package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -0
  55. package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +84 -0
  56. package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -0
  57. package/dist/esm/components/controls/CurveEditor/CurveEditor.js +134 -0
  58. package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -0
  59. package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +96 -0
  60. package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -0
  61. package/dist/esm/components/controls/CurveEditor/curvePresets.js +184 -0
  62. package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -0
  63. package/dist/esm/components/controls/CurveEditor/curveUtils.js +338 -0
  64. package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -0
  65. package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +569 -0
  66. package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -0
  67. package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +400 -0
  68. package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -0
  69. package/dist/esm/components/controls/NumberInput/NumberInput.js +377 -0
  70. package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -0
  71. package/dist/esm/components/controls/NumberInput/useNumberInput.js +324 -0
  72. package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -0
  73. package/dist/esm/components/controls/Select/Select.js +533 -0
  74. package/dist/esm/components/controls/Select/Select.js.map +1 -0
  75. package/dist/esm/components/controls/Slider/Slider.js +413 -0
  76. package/dist/esm/components/controls/Slider/Slider.js.map +1 -0
  77. package/dist/esm/components/controls/TreeView/TreeNode.js +189 -0
  78. package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -0
  79. package/dist/esm/components/controls/TreeView/TreeView.js +213 -0
  80. package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -0
  81. package/dist/esm/components/controls/TreeView/useTreeState.js +154 -0
  82. package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -0
  83. package/dist/esm/components/controls/VectorInput/VectorInput.js +202 -0
  84. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -0
  85. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +42 -0
  86. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -0
  87. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +98 -0
  88. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -0
  89. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +154 -0
  90. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -0
  91. package/dist/esm/components/editor/PropertyInspector/PropertySection.js +136 -0
  92. package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -0
  93. package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js +86 -0
  94. package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -0
  95. package/dist/esm/components/feedback/Dialog/Dialog.js +92 -0
  96. package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -0
  97. package/dist/esm/components/feedback/Dialog/Dialog.styled.js +80 -0
  98. package/dist/esm/components/feedback/Dialog/Dialog.styled.js.map +1 -0
  99. package/dist/esm/components/feedback/Dialog/DialogBody.js +33 -0
  100. package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -0
  101. package/dist/esm/components/feedback/Dialog/DialogClose.js +26 -0
  102. package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -0
  103. package/dist/esm/components/feedback/Dialog/DialogFooter.js +43 -0
  104. package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -0
  105. package/dist/esm/components/feedback/Dialog/DialogHeader.js +84 -0
  106. package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -0
  107. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +70 -0
  108. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -0
  109. package/dist/esm/components/feedback/Dialog/useFocusTrap.js +55 -0
  110. package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +1 -0
  111. package/dist/esm/components/feedback/Toast/ToastContainer.js +34 -0
  112. package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -0
  113. package/dist/esm/components/feedback/Toast/ToastItem.js +214 -0
  114. package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -0
  115. package/dist/esm/components/feedback/Toast/ToastProvider.js +47 -0
  116. package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -0
  117. package/dist/esm/components/feedback/Toast/useToast.js +60 -0
  118. package/dist/esm/components/feedback/Toast/useToast.js.map +1 -0
  119. package/dist/esm/components/form/FormHelperText.js +38 -0
  120. package/dist/esm/components/form/FormHelperText.js.map +1 -0
  121. package/dist/esm/components/form/FormLabel.js +43 -0
  122. package/dist/esm/components/form/FormLabel.js.map +1 -0
  123. package/dist/esm/components/form/InputWrapper.js +100 -0
  124. package/dist/esm/components/form/InputWrapper.js.map +1 -0
  125. package/dist/esm/components/layout/Accordion/Accordion.js +103 -0
  126. package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -0
  127. package/dist/esm/components/layout/Accordion/AccordionContent.js +37 -0
  128. package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -0
  129. package/dist/esm/components/layout/Accordion/AccordionItem.js +24 -0
  130. package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -0
  131. package/dist/esm/components/layout/Accordion/AccordionTrigger.js +123 -0
  132. package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -0
  133. package/dist/esm/components/layout/Flex/Flex.js +149 -0
  134. package/dist/esm/components/layout/Flex/Flex.js.map +1 -0
  135. package/dist/esm/components/layout/Grid/Grid.js +118 -0
  136. package/dist/esm/components/layout/Grid/Grid.js.map +1 -0
  137. package/dist/esm/components/layout/PanelSurface/PanelSurface.js +106 -0
  138. package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -0
  139. package/dist/esm/components/layout/ScrollArea/ScrollArea.js +362 -0
  140. package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -0
  141. package/dist/esm/components/layout/Spacer/Spacer.js +78 -0
  142. package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -0
  143. package/dist/esm/components/layout/SplitPane/SplitPane.js +581 -0
  144. package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -0
  145. package/dist/esm/components/layout/SplitPane/SplitPanePanel.js +29 -0
  146. package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -0
  147. package/dist/esm/components/layout/Stack/Stack.js +138 -0
  148. package/dist/esm/components/layout/Stack/Stack.js.map +1 -0
  149. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -0
  150. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -0
  151. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +52 -0
  152. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +1 -0
  153. package/dist/esm/components/navigation/Menu/Menu.helpers.js +52 -0
  154. package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +1 -0
  155. package/dist/esm/components/navigation/Menu/Menu.js +80 -0
  156. package/dist/esm/components/navigation/Menu/Menu.js.map +1 -0
  157. package/dist/esm/components/navigation/Menu/Menu.styled.js +83 -0
  158. package/dist/esm/components/navigation/Menu/Menu.styled.js.map +1 -0
  159. package/dist/esm/components/navigation/Menu/useMenu.js +87 -0
  160. package/dist/esm/components/navigation/Menu/useMenu.js.map +1 -0
  161. package/dist/esm/components/navigation/Tabs/Tab.js +222 -0
  162. package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -0
  163. package/dist/esm/components/navigation/Tabs/TabList.js +115 -0
  164. package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -0
  165. package/dist/esm/components/navigation/Tabs/TabPanel.js +32 -0
  166. package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -0
  167. package/dist/esm/components/navigation/Tabs/Tabs.js +77 -0
  168. package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -0
  169. package/dist/esm/components/primitives/BaseButton/BaseButton.js +17 -0
  170. package/dist/esm/components/primitives/BaseButton/BaseButton.js.map +1 -0
  171. package/dist/esm/components/primitives/Button/Button.js +183 -0
  172. package/dist/esm/components/primitives/Button/Button.js.map +1 -0
  173. package/dist/esm/components/primitives/Checkbox/Checkbox.js +205 -0
  174. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -0
  175. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +71 -0
  176. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -0
  177. package/dist/esm/components/primitives/Collapsible/Collapsible.js +116 -0
  178. package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -0
  179. package/dist/esm/components/primitives/Icon/Icon.js +63 -0
  180. package/dist/esm/components/primitives/Icon/Icon.js.map +1 -0
  181. package/dist/esm/components/primitives/IconButton/IconButton.js +222 -0
  182. package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -0
  183. package/dist/esm/components/primitives/Input/Input.js +133 -0
  184. package/dist/esm/components/primitives/Input/Input.js.map +1 -0
  185. package/dist/esm/components/primitives/Paper/Paper.js +146 -0
  186. package/dist/esm/components/primitives/Paper/Paper.js.map +1 -0
  187. package/dist/esm/components/primitives/Popover/Popover.js +121 -0
  188. package/dist/esm/components/primitives/Popover/Popover.js.map +1 -0
  189. package/dist/esm/components/primitives/Popover/PopoverClose.js +50 -0
  190. package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -0
  191. package/dist/esm/components/primitives/Popover/PopoverContent.js +102 -0
  192. package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -0
  193. package/dist/esm/components/primitives/Popover/PopoverTrigger.js +37 -0
  194. package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -0
  195. package/dist/esm/components/primitives/Switch/Switch.js +170 -0
  196. package/dist/esm/components/primitives/Switch/Switch.js.map +1 -0
  197. package/dist/esm/components/primitives/Text/Text.js +166 -0
  198. package/dist/esm/components/primitives/Text/Text.js.map +1 -0
  199. package/dist/esm/components/primitives/Tooltip/Arrow.js +52 -0
  200. package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -0
  201. package/dist/esm/components/primitives/Tooltip/Tooltip.js +219 -0
  202. package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -0
  203. package/dist/esm/components/primitives/Tooltip/utils.js +66 -0
  204. package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -0
  205. package/dist/esm/components/shell/AppShell/AppShell.js +157 -0
  206. package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -0
  207. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +236 -0
  208. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -0
  209. package/dist/esm/components/shell/MenuBar/MenuBar.js +340 -0
  210. package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -0
  211. package/dist/esm/components/shell/StatusBar/StatusBar.js +134 -0
  212. package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -0
  213. package/dist/esm/components/shell/Toolbar/Toolbar.js +185 -0
  214. package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -0
  215. package/dist/esm/context/KeyboardContext.js +14 -0
  216. package/dist/esm/context/KeyboardContext.js.map +1 -0
  217. package/dist/esm/index.js +78 -0
  218. package/dist/esm/index.js.map +1 -0
  219. package/dist/esm/palettes.js +4 -0
  220. package/dist/esm/palettes.js.map +1 -0
  221. package/dist/esm/theme/ThemeProvider.js +12 -0
  222. package/dist/esm/theme/ThemeProvider.js.map +1 -0
  223. package/dist/esm/theme/createTheme.js +10 -0
  224. package/dist/esm/theme/createTheme.js.map +1 -0
  225. package/dist/esm/theme/tokens.js +144 -0
  226. package/dist/esm/theme/tokens.js.map +1 -0
  227. package/dist/esm/utils/cn.js +6 -0
  228. package/dist/esm/utils/cn.js.map +1 -0
  229. package/dist/esm/utils/mathExpression.js +275 -0
  230. package/dist/esm/utils/mathExpression.js.map +1 -0
  231. package/dist/esm/utils/mathUtils.js +18 -0
  232. package/dist/esm/utils/mathUtils.js.map +1 -0
  233. package/dist/esm/utils/objects.js +22 -0
  234. package/dist/esm/utils/objects.js.map +1 -0
  235. package/dist/esm/utils/styledUtils.js +81 -0
  236. package/dist/esm/utils/styledUtils.js.map +1 -0
  237. package/dist/types/components/controls/ColorPicker/ColorPalette.d.ts +16 -0
  238. package/dist/types/components/controls/ColorPicker/ColorPicker.d.ts +6 -0
  239. package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +120 -0
  240. package/dist/types/components/controls/ColorPicker/ColorSwatch.d.ts +6 -0
  241. package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +28 -0
  242. package/dist/types/components/controls/ColorPicker/colorUtils.d.ts +3 -0
  243. package/dist/types/components/controls/ColorPicker/palettes/material.d.ts +24 -0
  244. package/dist/types/components/controls/ColorPicker/palettes/professional.d.ts +19 -0
  245. package/dist/types/components/controls/ColorPicker/palettes/tailwind.d.ts +12 -0
  246. package/dist/types/components/controls/CurveEditor/CurveEditor.d.ts +6 -0
  247. package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +297 -0
  248. package/dist/types/components/controls/CurveEditor/curvePresets.d.ts +5 -0
  249. package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +28 -0
  250. package/dist/types/components/controls/NumberInput/NumberInput.d.ts +150 -0
  251. package/dist/types/components/controls/NumberInput/useNumberInput.d.ts +65 -0
  252. package/dist/types/components/controls/Select/Select.d.ts +29 -0
  253. package/dist/types/components/controls/Select/Select.types.d.ts +131 -0
  254. package/dist/types/components/controls/Slider/Slider.d.ts +178 -0
  255. package/dist/types/components/controls/TreeView/TreeView.d.ts +27 -0
  256. package/dist/types/components/controls/TreeView/TreeView.types.d.ts +135 -0
  257. package/dist/types/components/controls/VectorInput/VectorInput.d.ts +26 -0
  258. package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +158 -0
  259. package/dist/types/components/editor/PropertyInspector/PropertyGroup.d.ts +6 -0
  260. package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +238 -0
  261. package/dist/types/components/editor/PropertyInspector/PropertyPanel.d.ts +6 -0
  262. package/dist/types/components/editor/PropertyInspector/PropertyRow.d.ts +6 -0
  263. package/dist/types/components/editor/PropertyInspector/PropertySection.d.ts +6 -0
  264. package/dist/types/components/editor/PropertyInspector/usePropertyUndo.d.ts +9 -0
  265. package/dist/types/components/feedback/Dialog/Dialog.d.ts +25 -0
  266. package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +55 -0
  267. package/dist/types/components/feedback/Dialog/DialogBody.d.ts +16 -0
  268. package/dist/types/components/feedback/Dialog/DialogClose.d.ts +21 -0
  269. package/dist/types/components/feedback/Dialog/DialogFooter.d.ts +17 -0
  270. package/dist/types/components/feedback/Dialog/DialogHeader.d.ts +17 -0
  271. package/dist/types/components/feedback/Toast/Toast.types.d.ts +39 -0
  272. package/dist/types/components/feedback/Toast/ToastProvider.d.ts +19 -0
  273. package/dist/types/components/feedback/Toast/useToast.d.ts +22 -0
  274. package/dist/types/components/form/FormHelperText.d.ts +321 -0
  275. package/dist/types/components/form/FormLabel.d.ts +331 -0
  276. package/dist/types/components/form/InputWrapper.d.ts +346 -0
  277. package/dist/types/components/layout/Accordion/Accordion.d.ts +23 -0
  278. package/dist/types/components/layout/Accordion/Accordion.types.d.ts +109 -0
  279. package/dist/types/components/layout/Accordion/AccordionContent.d.ts +6 -0
  280. package/dist/types/components/layout/Accordion/AccordionItem.d.ts +6 -0
  281. package/dist/types/components/layout/Accordion/AccordionTrigger.d.ts +6 -0
  282. package/dist/types/components/layout/Flex/Flex.d.ts +215 -0
  283. package/dist/types/components/layout/Grid/Grid.d.ts +113 -0
  284. package/dist/types/components/layout/PanelSurface/PanelSurface.d.ts +1153 -0
  285. package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +64 -0
  286. package/dist/types/components/layout/ScrollArea/ScrollArea.d.ts +6 -0
  287. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +93 -0
  288. package/dist/types/components/layout/Spacer/Spacer.d.ts +329 -0
  289. package/dist/types/components/layout/SplitPane/SplitPane.d.ts +21 -0
  290. package/dist/types/components/layout/SplitPane/SplitPane.types.d.ts +87 -0
  291. package/dist/types/components/layout/SplitPane/SplitPanePanel.d.ts +20 -0
  292. package/dist/types/components/layout/Stack/Stack.d.ts +166 -0
  293. package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +6 -0
  294. package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +74 -0
  295. package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +5 -0
  296. package/dist/types/components/navigation/Menu/Menu.d.ts +42 -0
  297. package/dist/types/components/navigation/Menu/Menu.types.d.ts +94 -0
  298. package/dist/types/components/navigation/Menu/useMenu.d.ts +16 -0
  299. package/dist/types/components/navigation/Tabs/Tab.d.ts +6 -0
  300. package/dist/types/components/navigation/Tabs/TabList.d.ts +6 -0
  301. package/dist/types/components/navigation/Tabs/TabPanel.d.ts +6 -0
  302. package/dist/types/components/navigation/Tabs/Tabs.d.ts +23 -0
  303. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +117 -0
  304. package/dist/types/components/primitives/Button/Button.d.ts +392 -0
  305. package/dist/types/components/primitives/Checkbox/Checkbox.d.ts +20 -0
  306. package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +156 -0
  307. package/dist/types/components/primitives/Checkbox/CheckboxGroup.d.ts +25 -0
  308. package/dist/types/components/primitives/Collapsible/Collapsible.d.ts +6 -0
  309. package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +28 -0
  310. package/dist/types/components/primitives/Icon/Icon.d.ts +40 -0
  311. package/dist/types/components/primitives/IconButton/IconButton.d.ts +354 -0
  312. package/dist/types/components/primitives/Input/Input.d.ts +134 -0
  313. package/dist/types/components/primitives/Paper/Paper.d.ts +419 -0
  314. package/dist/types/components/primitives/Popover/Popover.d.ts +25 -0
  315. package/dist/types/components/primitives/Popover/Popover.types.d.ts +99 -0
  316. package/dist/types/components/primitives/Popover/PopoverClose.d.ts +6 -0
  317. package/dist/types/components/primitives/Popover/PopoverContent.d.ts +6 -0
  318. package/dist/types/components/primitives/Popover/PopoverTrigger.d.ts +10 -0
  319. package/dist/types/components/primitives/Switch/Switch.d.ts +78 -0
  320. package/dist/types/components/primitives/Text/Text.d.ts +442 -0
  321. package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +175 -0
  322. package/dist/types/components/primitives/Tooltip/types.d.ts +82 -0
  323. package/dist/types/components/shell/AppShell/AppShell.d.ts +1437 -0
  324. package/dist/types/components/shell/AppShell/AppShell.types.d.ts +48 -0
  325. package/dist/types/components/shell/FloatingPanel/FloatingPanel.d.ts +7 -0
  326. package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +61 -0
  327. package/dist/types/components/shell/MenuBar/MenuBar.d.ts +1441 -0
  328. package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +48 -0
  329. package/dist/types/components/shell/StatusBar/StatusBar.d.ts +868 -0
  330. package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +40 -0
  331. package/dist/types/components/shell/Toolbar/Toolbar.d.ts +1728 -0
  332. package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +59 -0
  333. package/dist/types/index.d.ts +101 -0
  334. package/dist/types/palettes.d.ts +3 -0
  335. package/dist/types/theme/ThemeProvider.d.ts +11 -0
  336. package/dist/types/theme/createTheme.d.ts +6 -0
  337. package/dist/types/theme/tokens.d.ts +147 -0
  338. package/dist/types/theme/types.d.ts +7 -0
  339. package/dist/types/types/common.d.ts +24 -0
  340. package/dist/types/types/utilities.d.ts +72 -0
  341. package/dist/types/utils/cn.d.ts +3 -0
  342. package/package.json +23 -7
  343. package/dist/index.d.ts +0 -11
  344. package/dist/index.esm.js +0 -12149
  345. package/dist/index.esm.js.map +0 -1
  346. package/dist/index.js +0 -12223
  347. package/dist/index.js.map +0 -1
@@ -0,0 +1,183 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import React from 'react';
3
+ import styled from '@emotion/styled';
4
+ import { processCss } from '../../../utils/styledUtils.js';
5
+
6
+ const StyledButton = styled.button `
7
+ /* Reset */
8
+ margin: 0;
9
+ font-family: inherit;
10
+ cursor: ${props => (props.disabled ? 'not-allowed' : 'pointer')};
11
+ user-select: none;
12
+
13
+ /* Layout */
14
+ display: inline-flex;
15
+ align-items: center;
16
+ justify-content: center;
17
+ font-weight: ${props => props.theme.typography.fontWeight.medium};
18
+ border-radius: ${props => props.theme.borderRadius.md}px;
19
+ transition: all ${props => props.theme.transitions.normal};
20
+ outline: none;
21
+
22
+ /* Size variants */
23
+ ${props => {
24
+ const sizes = {
25
+ sm: {
26
+ height: '20px',
27
+ padding: `0 ${props.theme.spacing.sm}px`,
28
+ fontSize: `${props.theme.typography.fontSize.md}px`,
29
+ gap: `${props.theme.spacing.xs}px`,
30
+ },
31
+ md: {
32
+ height: '24px',
33
+ padding: `0 ${props.theme.spacing.md}px`,
34
+ fontSize: `${props.theme.typography.fontSize.md}px`,
35
+ gap: `${props.theme.spacing.sm}px`,
36
+ },
37
+ lg: {
38
+ height: '32px',
39
+ padding: `0 ${props.theme.spacing.xl}px`,
40
+ fontSize: `${props.theme.typography.fontSize.lg}px`,
41
+ gap: `${props.theme.spacing.md}px`,
42
+ },
43
+ };
44
+ const size = sizes[props.$size];
45
+ return `
46
+ height: ${size.height};
47
+ padding: ${size.padding};
48
+ font-size: ${size.fontSize};
49
+ gap: ${size.gap};
50
+ `;
51
+ }}
52
+
53
+ /* Variant styles */
54
+ ${props => {
55
+ const { colors } = props.theme;
56
+ switch (props.$variant) {
57
+ case 'default':
58
+ return `
59
+ background: transparent;
60
+ border: 1px solid ${colors.border.default};
61
+ color: ${colors.text.primary};
62
+
63
+ &:hover:not(:disabled) {
64
+ background: ${colors.surface.hover};
65
+ border-color: transparent;
66
+ }
67
+
68
+ &:active:not(:disabled) {
69
+ background: ${colors.surface.active};
70
+ }
71
+ `;
72
+ case 'ghost':
73
+ return `
74
+ background: transparent;
75
+ border: 1px solid transparent;
76
+ color: ${colors.text.secondary};
77
+
78
+ &:hover:not(:disabled) {
79
+ background: ${colors.surface.hover};
80
+ color: ${colors.text.primary};
81
+ }
82
+
83
+ &:active:not(:disabled) {
84
+ background: ${colors.surface.active};
85
+ }
86
+ `;
87
+ case 'filled':
88
+ return `
89
+ background: ${colors.accent.primary};
90
+ border: 1px solid ${colors.accent.primary};
91
+ color: white;
92
+
93
+ &:hover:not(:disabled) {
94
+ background: ${colors.accent.secondary};
95
+ border-color: ${colors.accent.secondary};
96
+ }
97
+
98
+ &:active:not(:disabled) {
99
+ background: ${colors.accent.secondary};
100
+ }
101
+ `;
102
+ default:
103
+ return '';
104
+ }
105
+ }}
106
+
107
+ /* Full width */
108
+ ${props => props.$fullWidth && 'width: 100%;'}
109
+
110
+ /* Disabled state */
111
+ &:disabled {
112
+ opacity: 0.5;
113
+ cursor: not-allowed;
114
+ }
115
+
116
+ /* Focus visible */
117
+ &:focus-visible {
118
+ box-shadow: ${props => props.theme.shadows.focus};
119
+ }
120
+
121
+ /* Custom CSS */
122
+ ${props => processCss(props.$css, props.theme)}
123
+ `;
124
+ /**
125
+ * Loading spinner component
126
+ */
127
+ const LoadingSpinner = styled.div `
128
+ width: 16px;
129
+ height: 16px;
130
+ border: 2px solid currentColor;
131
+ border-top-color: transparent;
132
+ border-radius: 50%;
133
+ animation: spin 1s linear infinite;
134
+
135
+ @keyframes spin {
136
+ to {
137
+ transform: rotate(360deg);
138
+ }
139
+ }
140
+ `;
141
+ /**
142
+ * Icon wrapper
143
+ */
144
+ const IconWrapper = styled.span `
145
+ width: 16px;
146
+ height: 16px;
147
+ display: flex;
148
+ align-items: center;
149
+ justify-content: center;
150
+ `;
151
+ /**
152
+ * Versatile button component for editor interfaces.
153
+ *
154
+ * Supports multiple variants, sizes, and states. Optimized for professional
155
+ * editor interfaces with compact dimensions and precise interactions.
156
+ *
157
+ * @example
158
+ * ```tsx
159
+ * // Basic usage
160
+ * <Button variant="default" size="md">Save</Button>
161
+ *
162
+ * // With icon and loading state
163
+ * <Button
164
+ * icon={<SaveIcon />}
165
+ * loading={isSaving}
166
+ * onClick={handleSave}
167
+ * >
168
+ * Save Project
169
+ * </Button>
170
+ *
171
+ * // Full width button
172
+ * <Button variant="filled" fullWidth>
173
+ * Confirm
174
+ * </Button>
175
+ * ```
176
+ */
177
+ const Button = /*#__PURE__*/ React.memo(({ children, className, size = 'md', variant = 'default', disabled = false, loading = false, icon, fullWidth = false, onClick, testId, style, css, ref, ...props }) => {
178
+ return (jsxs(StyledButton, { ref: ref, className: className, "$size": size, "$variant": variant, "$loading": loading, "$fullWidth": fullWidth, "$css": css, disabled: disabled || loading, onClick: onClick, "data-testid": testId, style: style, ...props, children: [loading ? (jsx(LoadingSpinner, {})) : icon ? (jsx(IconWrapper, { children: icon })) : null, children && jsx("span", { children: children })] }));
179
+ });
180
+ Button.displayName = 'Button';
181
+
182
+ export { Button };
183
+ //# sourceMappingURL=Button.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Button.js","sources":["../../../../../../src/components/primitives/Button/Button.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,205 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useContext, useId, useState, useCallback } from 'react';
3
+ import styled from '@emotion/styled';
4
+ import { processCss } from '../../../utils/styledUtils.js';
5
+ import '../../form/FormLabel.js';
6
+ import { FormHelperText } from '../../form/FormHelperText.js';
7
+ import '../../form/InputWrapper.js';
8
+ import { CheckboxGroupContext } from './CheckboxGroup.js';
9
+
10
+ // --- Size maps ---
11
+ const BOX_SIZES = {
12
+ sm: 14,
13
+ md: 16,
14
+ lg: 20,
15
+ };
16
+ const ICON_SIZES = {
17
+ sm: 10,
18
+ md: 12,
19
+ lg: 14,
20
+ };
21
+ const FONT_SIZE_MAP = {
22
+ sm: 'xs',
23
+ md: 'sm',
24
+ lg: 'md',
25
+ };
26
+ // --- Styled components ---
27
+ const StyledCheckboxContainer = styled.div `
28
+ display: flex;
29
+ flex-direction: column;
30
+ `;
31
+ const StyledCheckboxLabel = styled.label `
32
+ display: inline-flex;
33
+ align-items: center;
34
+ gap: ${props => props.theme.spacing.sm}px;
35
+ cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
36
+ flex-direction: ${props => props.$labelPosition === 'left' ? 'row-reverse' : 'row'};
37
+ font-size: ${props => props.theme.typography.fontSize[FONT_SIZE_MAP[props.$size]]}px;
38
+ color: ${props => props.$disabled
39
+ ? props.theme.colors.text.disabled
40
+ : props.theme.colors.text.secondary};
41
+ line-height: ${props => props.theme.typography.lineHeight.normal};
42
+ user-select: none;
43
+ `;
44
+ const StyledCheckboxBox = styled.button `
45
+ /* Reset */
46
+ padding: 0;
47
+ margin: 0;
48
+ border: none;
49
+ font: inherit;
50
+ outline: none;
51
+ cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
52
+
53
+ /* Layout */
54
+ display: inline-flex;
55
+ align-items: center;
56
+ justify-content: center;
57
+ flex-shrink: 0;
58
+
59
+ /* Sizing */
60
+ width: ${props => BOX_SIZES[props.$size]}px;
61
+ height: ${props => BOX_SIZES[props.$size]}px;
62
+ border-radius: ${props => props.theme.borderRadius.sm}px;
63
+ transition: all ${props => props.theme.transitions.fast};
64
+
65
+ /* Variant + State styles */
66
+ ${props => {
67
+ const { colors } = props.theme;
68
+ const isActive = props.$checked || props.$indeterminate;
69
+ if (props.$disabled) {
70
+ return `
71
+ opacity: 0.5;
72
+ background: ${isActive ? colors.accent.primary : props.$variant === 'filled' ? colors.surface.default : 'transparent'};
73
+ border: 1px solid ${isActive ? colors.accent.primary : colors.border.default};
74
+ `;
75
+ }
76
+ if (props.$error) {
77
+ return `
78
+ background: ${isActive ? colors.accent.error : 'transparent'};
79
+ border: 1px solid ${colors.accent.error};
80
+ &:hover {
81
+ border-color: ${colors.accent.error};
82
+ background: ${isActive ? colors.accent.error : 'transparent'};
83
+ }
84
+ `;
85
+ }
86
+ if (isActive) {
87
+ return `
88
+ background: ${colors.accent.primary};
89
+ border: 1px solid ${colors.accent.primary};
90
+ &:hover {
91
+ background: ${colors.accent.secondary};
92
+ border-color: ${colors.accent.secondary};
93
+ }
94
+ `;
95
+ }
96
+ if (props.$variant === 'filled') {
97
+ return `
98
+ background: ${colors.surface.default};
99
+ border: 1px solid ${colors.border.default};
100
+ &:hover {
101
+ border-color: ${colors.border.focus};
102
+ }
103
+ `;
104
+ }
105
+ return `
106
+ background: transparent;
107
+ border: 1px solid ${colors.border.default};
108
+ &:hover {
109
+ border-color: ${colors.border.focus};
110
+ }
111
+ `;
112
+ }}
113
+
114
+ /* Focus visible */
115
+ &:focus-visible {
116
+ box-shadow: ${props => props.theme.shadows.focus};
117
+ }
118
+
119
+ /* Disabled state */
120
+ &:disabled {
121
+ opacity: 0.5;
122
+ cursor: not-allowed;
123
+ }
124
+
125
+ /* Custom CSS */
126
+ ${props => processCss(props.$css, props.theme)}
127
+ `;
128
+ /**
129
+ * Checkbox component for boolean selection in settings panels,
130
+ * property inspectors, and form interfaces.
131
+ *
132
+ * Supports controlled/uncontrolled modes, indeterminate state,
133
+ * label positioning, sizes, variants, and error states.
134
+ *
135
+ * @example
136
+ * ```tsx
137
+ * <Checkbox label="Enable shadows" />
138
+ * <Checkbox checked={value} onChange={setValue} label="Auto-save" />
139
+ * <Checkbox indeterminate label="Select all" />
140
+ * ```
141
+ */
142
+ const Checkbox = ({ checked: checkedProp, defaultChecked = false, indeterminate = false, label, labelPosition = 'right', size: sizeProp = 'md', variant = 'default', disabled: disabledProp = false, required = false, error = false, helperText, errorMessage, value, name, onChange, className, style, css, testId, ref, id: idProp, ...rest }) => {
143
+ const groupContext = useContext(CheckboxGroupContext);
144
+ const autoId = useId();
145
+ const checkboxId = idProp ?? autoId;
146
+ const helperId = `${checkboxId}-helper`;
147
+ // Internal state for uncontrolled mode
148
+ const [internalChecked, setInternalChecked] = useState(defaultChecked);
149
+ // Resolve group context
150
+ const disabled = disabledProp || (groupContext?.disabled ?? false);
151
+ const size = sizeProp ?? groupContext?.size ?? 'md';
152
+ // Determine checked state for group integration
153
+ const isGrouped = groupContext !== null && value !== undefined;
154
+ const isControlled = checkedProp !== undefined;
155
+ let resolvedChecked;
156
+ if (isGrouped) {
157
+ resolvedChecked = groupContext.groupValue.includes(value);
158
+ }
159
+ else if (isControlled) {
160
+ resolvedChecked = checkedProp;
161
+ }
162
+ else {
163
+ resolvedChecked = internalChecked;
164
+ }
165
+ const handleClick = useCallback(() => {
166
+ if (disabled)
167
+ return;
168
+ const newChecked = !resolvedChecked;
169
+ if (isGrouped && value) {
170
+ groupContext.toggleValue(value);
171
+ }
172
+ if (!isControlled && !isGrouped) {
173
+ setInternalChecked(newChecked);
174
+ }
175
+ onChange?.(newChecked);
176
+ }, [
177
+ disabled,
178
+ resolvedChecked,
179
+ isGrouped,
180
+ value,
181
+ groupContext,
182
+ isControlled,
183
+ onChange,
184
+ ]);
185
+ const iconSize = ICON_SIZES[size];
186
+ const showHelperText = error && errorMessage ? errorMessage : helperText;
187
+ const ariaChecked = indeterminate
188
+ ? 'mixed'
189
+ : resolvedChecked
190
+ ? 'true'
191
+ : 'false';
192
+ const checkboxBox = (jsxs(StyledCheckboxBox, { ref: ref, type: "button", role: "checkbox", "aria-checked": ariaChecked, "aria-disabled": disabled || undefined, "aria-required": required || undefined, "aria-invalid": error || undefined, "aria-describedby": showHelperText ? helperId : undefined, disabled: disabled, onClick: handleClick, "$size": size, "$variant": variant, "$checked": resolvedChecked, "$indeterminate": indeterminate, "$disabled": disabled, "$error": error, "$css": css, "data-testid": testId, ...rest, children: [indeterminate ? (jsx("svg", { width: iconSize, height: iconSize, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: jsx("line", { x1: "2", y1: "6", x2: "10", y2: "6", stroke: "white", strokeWidth: "2", strokeLinecap: "round" }) })) : (jsx("svg", { width: iconSize, height: iconSize, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", style: {
193
+ opacity: resolvedChecked ? 1 : 0,
194
+ transform: resolvedChecked ? 'scale(1)' : 'scale(0)',
195
+ transition: 'opacity 150ms ease-out, transform 150ms ease-out',
196
+ }, children: jsx("path", { d: "M2 6L5 9L10 3", stroke: "white", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })), name && (jsx("input", { type: "hidden", name: name, value: resolvedChecked ? (value ?? 'on') : '' }))] }));
197
+ if (!label && !showHelperText) {
198
+ return checkboxBox;
199
+ }
200
+ return (jsxs(StyledCheckboxContainer, { className: className, style: style, children: [jsxs(StyledCheckboxLabel, { "$labelPosition": labelPosition, "$disabled": disabled, "$size": size, children: [checkboxBox, label && jsx("span", { children: label })] }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
201
+ };
202
+ Checkbox.displayName = 'Checkbox';
203
+
204
+ export { Checkbox };
205
+ //# sourceMappingURL=Checkbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Checkbox.js","sources":["../../../../../../src/components/primitives/Checkbox/Checkbox.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { createContext, useId, useState, useCallback } from 'react';
3
+ import styled from '@emotion/styled';
4
+ import { FormLabel } from '../../form/FormLabel.js';
5
+ import { FormHelperText } from '../../form/FormHelperText.js';
6
+ import '../../form/InputWrapper.js';
7
+ import { processCss } from '../../../utils/styledUtils.js';
8
+
9
+ const CheckboxGroupContext =
10
+ /*#__PURE__*/ createContext(null);
11
+ const StyledGroupContainer = styled.div `
12
+ display: flex;
13
+ flex-direction: column;
14
+
15
+ /* Custom CSS */
16
+ ${props => processCss(props.$css, props.theme)}
17
+ `;
18
+ const StyledGroupItems = styled.div `
19
+ display: flex;
20
+ flex-direction: ${props => props.$direction};
21
+ gap: ${props => props.theme.spacing.md * props.$gap}px;
22
+ `;
23
+ /**
24
+ * Groups multiple Checkbox components with shared state management.
25
+ *
26
+ * Manages a `string[]` value, propagates `disabled` and `size` to children
27
+ * via React Context. Supports controlled and uncontrolled modes.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <CheckboxGroup
32
+ * label="Render passes"
33
+ * value={selected}
34
+ * onChange={setSelected}
35
+ * >
36
+ * <Checkbox value="diffuse" label="Diffuse" />
37
+ * <Checkbox value="specular" label="Specular" />
38
+ * <Checkbox value="shadow" label="Shadow" />
39
+ * </CheckboxGroup>
40
+ * ```
41
+ */
42
+ const CheckboxGroup = ({ value: valueProp, defaultValue = [], label, direction = 'column', gap = 2, disabled = false, size = 'md', helperText, error = false, errorMessage, required = false, children, onChange, className, style, css, testId, ref, id: idProp, ...rest }) => {
43
+ const autoId = useId();
44
+ const groupId = idProp ?? autoId;
45
+ const labelId = `${groupId}-label`;
46
+ const helperId = `${groupId}-helper`;
47
+ const [internalValue, setInternalValue] = useState(defaultValue);
48
+ const isControlled = valueProp !== undefined;
49
+ const currentValue = isControlled ? valueProp : internalValue;
50
+ const toggleValue = useCallback((itemValue) => {
51
+ const nextValue = currentValue.includes(itemValue)
52
+ ? currentValue.filter(v => v !== itemValue)
53
+ : [...currentValue, itemValue];
54
+ if (!isControlled) {
55
+ setInternalValue(nextValue);
56
+ }
57
+ onChange?.(nextValue);
58
+ }, [currentValue, isControlled, onChange]);
59
+ const contextValue = {
60
+ groupValue: currentValue,
61
+ toggleValue,
62
+ disabled,
63
+ size,
64
+ };
65
+ const showHelperText = error && errorMessage ? errorMessage : helperText;
66
+ return (jsxs(StyledGroupContainer, { ref: ref, role: "group", "aria-labelledby": label ? labelId : undefined, "aria-describedby": showHelperText ? helperId : undefined, className: className, style: style, "$css": css, "data-testid": testId, ...rest, children: [label && (jsx(FormLabel, { id: labelId, required: required, disabled: disabled, children: label })), jsx(CheckboxGroupContext.Provider, { value: contextValue, children: jsx(StyledGroupItems, { "$direction": direction, "$gap": gap, children: children }) }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
67
+ };
68
+ CheckboxGroup.displayName = 'CheckboxGroup';
69
+
70
+ export { CheckboxGroup, CheckboxGroupContext };
71
+ //# sourceMappingURL=CheckboxGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CheckboxGroup.js","sources":["../../../../../../src/components/primitives/Checkbox/CheckboxGroup.tsx"],"sourcesContent":[null],"names":["_jsxs","_jsx"],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ import { jsxs, jsx } from 'react/jsx-runtime';
2
+ import { useId, useState, useCallback } from 'react';
3
+ import styled from '@emotion/styled';
4
+
5
+ const TRIGGER_SIZE_MAP = {
6
+ sm: { height: 24, paddingKey: 'md', fontKey: 'xs', chevronSize: 10 },
7
+ md: { height: 28, paddingKey: 'md', fontKey: 'sm', chevronSize: 12 },
8
+ lg: { height: 32, paddingKey: 'lg', fontKey: 'md', chevronSize: 14 },
9
+ };
10
+ const CONTENT_SIZE_MAP = {
11
+ sm: { paddingVKey: 'sm', paddingHKey: 'md' },
12
+ md: { paddingVKey: 'md', paddingHKey: 'lg' },
13
+ lg: { paddingVKey: 'lg', paddingHKey: 'xl' },
14
+ };
15
+ // --- Chevron icon ---
16
+ const ChevronRightIcon = ({ size }) => (jsx("svg", { width: size, height: size, viewBox: "0 0 12 12", fill: "none", "aria-hidden": "true", children: jsx("path", { d: "M4.5 3L7.5 6L4.5 9", stroke: "currentColor", strokeWidth: "1.5", strokeLinecap: "round", strokeLinejoin: "round" }) }));
17
+ // --- Styled ---
18
+ const StyledRoot = styled.div `
19
+ display: flex;
20
+ flex-direction: column;
21
+ `;
22
+ const StyledTrigger = styled.button `
23
+ /* Reset */
24
+ margin: 0;
25
+ border: none;
26
+ font-family: inherit;
27
+ outline: none;
28
+ user-select: none;
29
+ width: 100%;
30
+ text-align: left;
31
+
32
+ /* Layout */
33
+ display: flex;
34
+ align-items: center;
35
+ gap: ${props => props.theme.spacing.sm}px;
36
+
37
+ /* Sizing */
38
+ height: ${props => TRIGGER_SIZE_MAP[props.$size].height}px;
39
+ padding: 0
40
+ ${props => props.theme.spacing[TRIGGER_SIZE_MAP[props.$size].paddingKey]}px;
41
+ font-size: ${props => props.theme.typography.fontSize[TRIGGER_SIZE_MAP[props.$size].fontKey]}px;
42
+ font-weight: ${props => props.theme.typography.fontWeight.medium};
43
+
44
+ /* Colors */
45
+ background: transparent;
46
+ color: ${props => props.theme.colors.text.muted};
47
+ cursor: ${props => (props.$disabled ? 'not-allowed' : 'pointer')};
48
+ opacity: ${props => (props.$disabled ? 0.5 : 1)};
49
+ transition:
50
+ color ${props => props.theme.transitions.fast},
51
+ background ${props => props.theme.transitions.fast};
52
+
53
+ &:hover {
54
+ color: ${props => props.$disabled
55
+ ? props.theme.colors.text.muted
56
+ : props.theme.colors.text.primary};
57
+ }
58
+
59
+ &:focus-visible {
60
+ box-shadow: ${props => props.theme.shadows.focus};
61
+ border-radius: ${props => props.theme.borderRadius.sm}px;
62
+ z-index: 1;
63
+ }
64
+ `;
65
+ const StyledChevron = styled.span `
66
+ display: flex;
67
+ align-items: center;
68
+ justify-content: center;
69
+ flex-shrink: 0;
70
+ transition: transform ${props => props.theme.transitions.fast};
71
+ transform: rotate(${props => (props.$open ? '90deg' : '0deg')});
72
+ color: currentColor;
73
+
74
+ svg {
75
+ width: ${props => props.$size}px;
76
+ height: ${props => props.$size}px;
77
+ }
78
+ `;
79
+ const StyledContentWrapper = styled.div `
80
+ display: grid;
81
+ grid-template-rows: ${props => (props.$open ? '1fr' : '0fr')};
82
+ transition: grid-template-rows ${props => props.theme.transitions.normal};
83
+ `;
84
+ const StyledContentInner = styled.div `
85
+ overflow: hidden;
86
+ min-height: 0;
87
+ `;
88
+ const StyledContentBody = styled.div `
89
+ padding: ${props => props.theme.spacing[CONTENT_SIZE_MAP[props.$size].paddingVKey]}px
90
+ ${props => props.theme.spacing[CONTENT_SIZE_MAP[props.$size].paddingHKey]}px;
91
+ `;
92
+ // --- Component ---
93
+ const Collapsible = ({ trigger, open: openProp, defaultOpen = false, size = 'sm', indicator, disabled = false, keepMounted = false, onChange, children, className, style, testId, ref, ...rest }) => {
94
+ const autoId = useId();
95
+ const triggerId = `collapsible-${autoId}-trigger`;
96
+ const contentId = `collapsible-${autoId}-content`;
97
+ const [internalOpen, setInternalOpen] = useState(defaultOpen);
98
+ const isControlled = openProp !== undefined;
99
+ const resolvedOpen = isControlled ? openProp : internalOpen;
100
+ const handleToggle = useCallback(() => {
101
+ if (disabled)
102
+ return;
103
+ const nextOpen = !resolvedOpen;
104
+ if (!isControlled) {
105
+ setInternalOpen(nextOpen);
106
+ }
107
+ onChange?.(nextOpen);
108
+ }, [disabled, resolvedOpen, isControlled, onChange]);
109
+ const showIndicator = indicator !== null;
110
+ const sizeConfig = TRIGGER_SIZE_MAP[size];
111
+ return (jsxs(StyledRoot, { ref: ref, className: className, style: style, "data-testid": testId, ...rest, children: [jsxs(StyledTrigger, { type: "button", id: triggerId, "aria-expanded": resolvedOpen, "aria-controls": contentId, "aria-disabled": disabled || undefined, disabled: disabled, onClick: handleToggle, "$size": size, "$disabled": disabled, children: [showIndicator && (jsx(StyledChevron, { "$open": resolvedOpen, "$size": sizeConfig.chevronSize, children: indicator ?? jsx(ChevronRightIcon, { size: sizeConfig.chevronSize }) })), jsx("span", { children: trigger })] }), (resolvedOpen || keepMounted) && (jsx(StyledContentWrapper, { "$open": resolvedOpen, role: "region", id: contentId, "aria-labelledby": triggerId, hidden: !resolvedOpen || undefined, children: jsx(StyledContentInner, { children: jsx(StyledContentBody, { "$size": size, children: children }) }) }))] }));
112
+ };
113
+ Collapsible.displayName = 'Collapsible';
114
+
115
+ export { Collapsible };
116
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sources":["../../../../../../src/components/primitives/Collapsible/Collapsible.tsx"],"sourcesContent":[null],"names":["_jsx","_jsxs"],"mappings":"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"}