@bigbinary/neeto-atoms 1.0.7 → 1.0.8

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 (302) hide show
  1. package/dist/ColorPicker-BPvxDGDM.js +276 -0
  2. package/dist/ColorPicker-BPvxDGDM.js.map +1 -0
  3. package/dist/{DataTable-Y4POx0WN.js → DataTable-BKe9K5XP.js} +136 -136
  4. package/dist/DataTable-BKe9K5XP.js.map +1 -0
  5. package/dist/cjs/ColorPicker-DN8aynGh.js +282 -0
  6. package/dist/cjs/ColorPicker-DN8aynGh.js.map +1 -0
  7. package/dist/cjs/{DataTable-DJw2SZ7b.js → DataTable-BQt_mXDX.js} +136 -136
  8. package/dist/cjs/DataTable-BQt_mXDX.js.map +1 -0
  9. package/dist/cjs/components/Accordion.js +49 -0
  10. package/dist/cjs/components/Accordion.js.map +1 -0
  11. package/dist/cjs/components/Alert.js +101 -0
  12. package/dist/cjs/components/Alert.js.map +1 -0
  13. package/dist/cjs/components/Badge.js +71 -0
  14. package/dist/cjs/components/Badge.js.map +1 -0
  15. package/dist/cjs/components/Button.js +121 -0
  16. package/dist/cjs/components/Button.js.map +1 -0
  17. package/dist/cjs/components/Checkbox.js +44 -0
  18. package/dist/cjs/components/Checkbox.js.map +1 -0
  19. package/dist/cjs/components/ColorPicker.js +34 -0
  20. package/dist/cjs/components/ColorPicker.js.map +1 -0
  21. package/dist/cjs/components/DataTable.js +3 -3
  22. package/dist/cjs/components/Dialog.js +88 -0
  23. package/dist/cjs/components/Dialog.js.map +1 -0
  24. package/dist/cjs/components/DropdownMenu.js +180 -0
  25. package/dist/cjs/components/DropdownMenu.js.map +1 -0
  26. package/dist/cjs/components/Input.js +167 -0
  27. package/dist/cjs/components/Input.js.map +1 -0
  28. package/dist/cjs/components/MultiSelect.js +13 -0
  29. package/dist/cjs/components/MultiSelect.js.map +1 -0
  30. package/dist/cjs/components/MultiSelectCombobox.js +3 -0
  31. package/dist/cjs/components/MultiSelectCombobox.js.map +1 -0
  32. package/dist/cjs/components/MultiSelectDropdown.js +37 -0
  33. package/dist/cjs/components/MultiSelectDropdown.js.map +1 -0
  34. package/dist/cjs/components/OptionItem.js +34 -0
  35. package/dist/cjs/components/OptionItem.js.map +1 -0
  36. package/dist/cjs/components/Popover.js +123 -0
  37. package/dist/cjs/components/Popover.js.map +1 -0
  38. package/dist/cjs/components/RadioGroup.js +63 -0
  39. package/dist/cjs/components/RadioGroup.js.map +1 -0
  40. package/dist/cjs/components/Select.js +3 -0
  41. package/dist/cjs/components/Select.js.map +1 -0
  42. package/dist/cjs/components/SelectFieldWrapper.js +33 -0
  43. package/dist/cjs/components/SelectFieldWrapper.js.map +1 -0
  44. package/dist/cjs/components/SelectOptions.js +43 -0
  45. package/dist/cjs/components/SelectOptions.js.map +1 -0
  46. package/dist/cjs/components/SelectTriggerContent.js +43 -0
  47. package/dist/cjs/components/SelectTriggerContent.js.map +1 -0
  48. package/dist/cjs/components/Sheet.js +90 -0
  49. package/dist/cjs/components/Sheet.js.map +1 -0
  50. package/dist/cjs/components/Switch.js +35 -0
  51. package/dist/cjs/components/Switch.js.map +1 -0
  52. package/dist/cjs/components/Tabs.js +74 -0
  53. package/dist/cjs/components/Tabs.js.map +1 -0
  54. package/dist/cjs/components/Textarea.js +89 -0
  55. package/dist/cjs/components/Textarea.js.map +1 -0
  56. package/dist/cjs/components/Toastr.js +133 -0
  57. package/dist/cjs/components/Toastr.js.map +1 -0
  58. package/dist/cjs/components/Tooltip.js +109 -0
  59. package/dist/cjs/components/Tooltip.js.map +1 -0
  60. package/dist/cjs/{primitives → components}/Typography.js +6 -6
  61. package/dist/cjs/components/Typography.js.map +1 -0
  62. package/dist/cjs/components/shared.js +8 -0
  63. package/dist/cjs/components/shared.js.map +1 -0
  64. package/dist/cjs/{dialog-DzNWLbJ6.js → dialog-CF2GBHOG.js} +2 -2
  65. package/dist/cjs/{dialog-DzNWLbJ6.js.map → dialog-CF2GBHOG.js.map} +1 -1
  66. package/dist/cjs/{index-DAds6mf_.js → index-BLGrl3PF.js} +31 -31
  67. package/dist/cjs/{index-DAds6mf_.js.map → index-BLGrl3PF.js.map} +1 -1
  68. package/dist/cjs/{index-BqCr1H3u.js → index-BiGm7NEA.js} +11 -11
  69. package/dist/cjs/{index-BqCr1H3u.js.map → index-BiGm7NEA.js.map} +1 -1
  70. package/dist/cjs/{index-CGet1HH4.js → index-PdtYHwPi.js} +66 -66
  71. package/dist/cjs/{index-CGet1HH4.js.map → index-PdtYHwPi.js.map} +1 -1
  72. package/dist/cjs/index-Vlwnyfvs.js +1145 -0
  73. package/dist/cjs/index-Vlwnyfvs.js.map +1 -0
  74. package/dist/cjs/{index-DR7GJU4J.js → index-hQmfI1O7.js} +17 -17
  75. package/dist/cjs/{index-DR7GJU4J.js.map → index-hQmfI1O7.js.map} +1 -1
  76. package/dist/cjs/index.js +463 -26
  77. package/dist/cjs/index.js.map +1 -1
  78. package/dist/cjs/primitives/Accordion.js +16 -16
  79. package/dist/cjs/primitives/Accordion.js.map +1 -1
  80. package/dist/cjs/primitives/AlertDialog.js +1 -1
  81. package/dist/cjs/primitives/Badge.js +58 -6
  82. package/dist/cjs/primitives/Badge.js.map +1 -1
  83. package/dist/cjs/primitives/Chart.js +137 -137
  84. package/dist/cjs/primitives/Chart.js.map +1 -1
  85. package/dist/cjs/primitives/Collapsible.js +1 -1
  86. package/dist/cjs/primitives/Combobox.js +4 -4
  87. package/dist/cjs/primitives/Combobox.js.map +1 -1
  88. package/dist/cjs/primitives/Command.js +2 -2
  89. package/dist/cjs/primitives/ContextMenu.js +2 -2
  90. package/dist/cjs/primitives/Dialog.js +10 -6
  91. package/dist/cjs/primitives/Dialog.js.map +1 -1
  92. package/dist/cjs/primitives/Drawer.js +1 -1
  93. package/dist/cjs/primitives/DropdownMenu.js +38 -38
  94. package/dist/cjs/primitives/DropdownMenu.js.map +1 -1
  95. package/dist/cjs/primitives/HoverCard.js +16 -16
  96. package/dist/cjs/primitives/Menubar.js +2 -2
  97. package/dist/cjs/primitives/Popover.js +13 -13
  98. package/dist/cjs/primitives/RadioGroup.js +27 -26
  99. package/dist/cjs/primitives/RadioGroup.js.map +1 -1
  100. package/dist/cjs/primitives/Select.js +77 -77
  101. package/dist/cjs/primitives/Sheet.js +10 -6
  102. package/dist/cjs/primitives/Sheet.js.map +1 -1
  103. package/dist/cjs/primitives/Sidebar.js +3 -3
  104. package/dist/cjs/primitives/Sonner.js +12 -1138
  105. package/dist/cjs/primitives/Sonner.js.map +1 -1
  106. package/dist/cjs/primitives/Switch.js +4 -8
  107. package/dist/cjs/primitives/Switch.js.map +1 -1
  108. package/dist/cjs/primitives/Tabs.js +11 -11
  109. package/dist/cjs/primitives/ToggleGroup.js +1 -1
  110. package/dist/cjs/primitives/Tooltip.js +1 -1
  111. package/dist/cjs/primitives/index.js +9 -11
  112. package/dist/cjs/primitives/index.js.map +1 -1
  113. package/dist/cjs/renderIcon-fLF3odqg.js +26 -0
  114. package/dist/cjs/renderIcon-fLF3odqg.js.map +1 -0
  115. package/dist/cjs/{sheet-nHSYZxAA.js → sheet-CkCrHmVA.js} +2 -2
  116. package/dist/cjs/{sheet-nHSYZxAA.js.map → sheet-CkCrHmVA.js.map} +1 -1
  117. package/dist/cjs/{tooltip-CRkOMh1b.js → tooltip-C-568jEL.js} +17 -17
  118. package/dist/cjs/{tooltip-CRkOMh1b.js.map → tooltip-C-568jEL.js.map} +1 -1
  119. package/dist/cjs/useCreatableItems-BTHtd7uo.js +100 -0
  120. package/dist/cjs/useCreatableItems-BTHtd7uo.js.map +1 -0
  121. package/dist/cjs/{reselect-CeyIIDM-.js → with-selector-u4xTSzCv.js} +111 -111
  122. package/dist/cjs/with-selector-u4xTSzCv.js.map +1 -0
  123. package/dist/components/Accordion.d.ts +18 -0
  124. package/dist/components/Accordion.js +43 -0
  125. package/dist/components/Accordion.js.map +1 -0
  126. package/dist/components/Alert.d.ts +51 -0
  127. package/dist/components/Alert.js +99 -0
  128. package/dist/components/Alert.js.map +1 -0
  129. package/dist/components/Badge.d.ts +29 -0
  130. package/dist/components/Badge.js +69 -0
  131. package/dist/components/Badge.js.map +1 -0
  132. package/dist/components/Button.d.ts +47 -0
  133. package/dist/components/Button.js +119 -0
  134. package/dist/components/Button.js.map +1 -0
  135. package/dist/components/Checkbox.d.ts +16 -0
  136. package/dist/components/Checkbox.js +42 -0
  137. package/dist/components/Checkbox.js.map +1 -0
  138. package/dist/components/ColorPicker/ColorPicker.d.ts +4 -0
  139. package/dist/components/ColorPicker/Palette.d.ts +12 -0
  140. package/dist/components/ColorPicker/Target.d.ts +15 -0
  141. package/dist/components/ColorPicker/constants.d.ts +10 -0
  142. package/dist/components/ColorPicker/hooks/useEyeDropper.d.ts +15 -0
  143. package/dist/components/ColorPicker/hooks/useRecentlyUsedColors.d.ts +11 -0
  144. package/dist/components/ColorPicker/index.d.ts +2 -0
  145. package/dist/components/ColorPicker/types.d.ts +42 -0
  146. package/dist/components/ColorPicker/utils.d.ts +31 -0
  147. package/dist/components/ColorPicker.js +28 -0
  148. package/dist/components/ColorPicker.js.map +1 -0
  149. package/dist/components/DataTable.js +2 -2
  150. package/dist/components/Dialog.d.ts +56 -0
  151. package/dist/components/Dialog.js +86 -0
  152. package/dist/components/Dialog.js.map +1 -0
  153. package/dist/components/DropdownMenu/Divider.d.ts +3 -0
  154. package/dist/components/DropdownMenu/DropdownBase.d.ts +3 -0
  155. package/dist/components/DropdownMenu/Label.d.ts +7 -0
  156. package/dist/components/DropdownMenu/Menu.d.ts +7 -0
  157. package/dist/components/DropdownMenu/MenuItem.d.ts +10 -0
  158. package/dist/components/DropdownMenu/MenuItemButton.d.ts +4 -0
  159. package/dist/components/DropdownMenu/SplitTrigger.d.ts +13 -0
  160. package/dist/components/DropdownMenu/SubMenu.d.ts +10 -0
  161. package/dist/components/DropdownMenu/TriggerButton.d.ts +10 -0
  162. package/dist/components/DropdownMenu/constants.d.ts +7 -0
  163. package/dist/components/DropdownMenu/index.d.ts +16 -0
  164. package/dist/components/DropdownMenu/types.d.ts +88 -0
  165. package/dist/components/DropdownMenu.js +178 -0
  166. package/dist/components/DropdownMenu.js.map +1 -0
  167. package/dist/components/Input.d.ts +39 -0
  168. package/dist/components/Input.js +165 -0
  169. package/dist/components/Input.js.map +1 -0
  170. package/dist/components/MultiSelect.constants.d.ts +5 -0
  171. package/dist/components/MultiSelect.d.ts +4 -0
  172. package/dist/components/MultiSelect.js +4 -0
  173. package/dist/components/MultiSelect.js.map +1 -0
  174. package/dist/components/MultiSelect.types.d.ts +121 -0
  175. package/dist/components/MultiSelect.utils.d.ts +18 -0
  176. package/dist/components/MultiSelectCombobox.d.ts +3 -0
  177. package/dist/components/MultiSelectCombobox.js +2 -0
  178. package/dist/components/MultiSelectCombobox.js.map +1 -0
  179. package/dist/components/MultiSelectCombobox.types.d.ts +52 -0
  180. package/dist/components/MultiSelectDropdown.d.ts +9 -0
  181. package/dist/components/MultiSelectDropdown.js +35 -0
  182. package/dist/components/MultiSelectDropdown.js.map +1 -0
  183. package/dist/components/OptionItem.d.ts +9 -0
  184. package/dist/components/OptionItem.js +32 -0
  185. package/dist/components/OptionItem.js.map +1 -0
  186. package/dist/components/Popover.d.ts +47 -0
  187. package/dist/components/Popover.js +117 -0
  188. package/dist/components/Popover.js.map +1 -0
  189. package/dist/components/RadioGroup.d.ts +32 -0
  190. package/dist/components/RadioGroup.js +61 -0
  191. package/dist/components/RadioGroup.js.map +1 -0
  192. package/dist/components/Select.constants.d.ts +5 -0
  193. package/dist/components/Select.d.ts +4 -0
  194. package/dist/components/Select.js +2 -0
  195. package/dist/components/Select.js.map +1 -0
  196. package/dist/components/Select.types.d.ts +58 -0
  197. package/dist/components/SelectFieldWrapper.d.ts +18 -0
  198. package/dist/components/SelectFieldWrapper.js +31 -0
  199. package/dist/components/SelectFieldWrapper.js.map +1 -0
  200. package/dist/components/SelectOptions.d.ts +2 -0
  201. package/dist/components/SelectOptions.js +41 -0
  202. package/dist/components/SelectOptions.js.map +1 -0
  203. package/dist/components/SelectTriggerContent.d.ts +18 -0
  204. package/dist/components/SelectTriggerContent.js +41 -0
  205. package/dist/components/SelectTriggerContent.js.map +1 -0
  206. package/dist/components/Sheet.d.ts +54 -0
  207. package/dist/components/Sheet.js +88 -0
  208. package/dist/components/Sheet.js.map +1 -0
  209. package/dist/components/Switch.d.ts +18 -0
  210. package/dist/components/Switch.js +33 -0
  211. package/dist/components/Switch.js.map +1 -0
  212. package/dist/components/Tabs.d.ts +20 -0
  213. package/dist/components/Tabs.js +72 -0
  214. package/dist/components/Tabs.js.map +1 -0
  215. package/dist/components/Textarea.d.ts +36 -0
  216. package/dist/components/Textarea.js +87 -0
  217. package/dist/components/Textarea.js.map +1 -0
  218. package/dist/components/Toastr.d.ts +30 -0
  219. package/dist/components/Toastr.js +131 -0
  220. package/dist/components/Toastr.js.map +1 -0
  221. package/dist/components/Tooltip.d.ts +29 -0
  222. package/dist/components/Tooltip.js +103 -0
  223. package/dist/components/Tooltip.js.map +1 -0
  224. package/dist/{primitives → components}/Typography.d.ts +2 -2
  225. package/dist/{primitives → components}/Typography.js +6 -6
  226. package/dist/components/Typography.js.map +1 -0
  227. package/dist/components/shared.js +6 -0
  228. package/dist/components/shared.js.map +1 -0
  229. package/dist/components/shared.types.d.ts +16 -0
  230. package/dist/{dialog-C97DOTvO.js → dialog-Civ9r6wD.js} +3 -3
  231. package/dist/{dialog-C97DOTvO.js.map → dialog-Civ9r6wD.js.map} +1 -1
  232. package/dist/hooks/useAsyncOptions.d.ts +13 -0
  233. package/dist/hooks/useCreatableItems.d.ts +30 -0
  234. package/dist/hooks/useLazyLoadSentinel.d.ts +6 -0
  235. package/dist/hooks/useMultiSelectOptions.d.ts +15 -0
  236. package/dist/hooks/useMultiSelectState.d.ts +37 -0
  237. package/dist/hooks/useSelectState.d.ts +27 -0
  238. package/dist/{index-PF0ms7Xn.js → index-9HvIbmnI.js} +3 -3
  239. package/dist/{index-PF0ms7Xn.js.map → index-9HvIbmnI.js.map} +1 -1
  240. package/dist/index-D_roZz8G.js +1137 -0
  241. package/dist/index-D_roZz8G.js.map +1 -0
  242. package/dist/{index-BwxI_qgh.js → index-KzJfsx-e.js} +3 -3
  243. package/dist/{index-BwxI_qgh.js.map → index-KzJfsx-e.js.map} +1 -1
  244. package/dist/index.css +25 -1
  245. package/dist/index.d.ts +40 -0
  246. package/dist/index.js +440 -24
  247. package/dist/index.js.map +1 -1
  248. package/dist/{input-group-CDBpz6Pb.js → input-group-ytECR3Hw.js} +2 -2
  249. package/dist/{input-group-CDBpz6Pb.js.map → input-group-ytECR3Hw.js.map} +1 -1
  250. package/dist/lib/renderIcon.d.ts +5 -0
  251. package/dist/primitives/Accordion.js +1 -1
  252. package/dist/primitives/AlertDialog.js +1 -1
  253. package/dist/primitives/Badge.d.ts +13 -3
  254. package/dist/primitives/Badge.js +54 -2
  255. package/dist/primitives/Badge.js.map +1 -1
  256. package/dist/primitives/Chart.js +1 -1
  257. package/dist/primitives/Combobox.js +3 -3
  258. package/dist/primitives/Command.js +3 -3
  259. package/dist/primitives/ContextMenu.js +1 -1
  260. package/dist/primitives/Dialog.d.ts +11 -3
  261. package/dist/primitives/Dialog.js +11 -7
  262. package/dist/primitives/Dialog.js.map +1 -1
  263. package/dist/primitives/Drawer.js +1 -1
  264. package/dist/primitives/DropdownMenu.js +2 -2
  265. package/dist/primitives/InputGroup.js +1 -1
  266. package/dist/primitives/Menubar.js +1 -1
  267. package/dist/primitives/RadioGroup.d.ts +8 -3
  268. package/dist/primitives/RadioGroup.js +9 -8
  269. package/dist/primitives/RadioGroup.js.map +1 -1
  270. package/dist/primitives/Select.js +3 -3
  271. package/dist/primitives/Sheet.d.ts +12 -3
  272. package/dist/primitives/Sheet.js +11 -7
  273. package/dist/primitives/Sheet.js.map +1 -1
  274. package/dist/primitives/Sidebar.js +3 -3
  275. package/dist/primitives/Sonner.js +11 -1135
  276. package/dist/primitives/Sonner.js.map +1 -1
  277. package/dist/primitives/Switch.d.ts +6 -3
  278. package/dist/primitives/Switch.js +4 -8
  279. package/dist/primitives/Switch.js.map +1 -1
  280. package/dist/primitives/Tooltip.js +1 -1
  281. package/dist/primitives/index.d.ts +0 -1
  282. package/dist/primitives/index.js +8 -8
  283. package/dist/renderIcon-tlvMyboj.js +20 -0
  284. package/dist/renderIcon-tlvMyboj.js.map +1 -0
  285. package/dist/shadcn/components/typography.d.ts +4 -4
  286. package/dist/{sheet-D1ngftfX.js → sheet-COcn22fC.js} +3 -3
  287. package/dist/{sheet-D1ngftfX.js.map → sheet-COcn22fC.js.map} +1 -1
  288. package/dist/{tooltip-D5soNrAP.js → tooltip-DzjIJacP.js} +3 -3
  289. package/dist/{tooltip-D5soNrAP.js.map → tooltip-DzjIJacP.js.map} +1 -1
  290. package/dist/useCreatableItems-B0seQA1_.js +89 -0
  291. package/dist/useCreatableItems-B0seQA1_.js.map +1 -0
  292. package/dist/utils/fieldIds.d.ts +2 -0
  293. package/dist/utils/hyphenize.d.ts +1 -0
  294. package/dist/{reselect-CABQm5hA.js → with-selector--fY1NrB9.js} +111 -111
  295. package/dist/with-selector--fY1NrB9.js.map +1 -0
  296. package/package.json +2 -1
  297. package/dist/DataTable-Y4POx0WN.js.map +0 -1
  298. package/dist/cjs/DataTable-DJw2SZ7b.js.map +0 -1
  299. package/dist/cjs/primitives/Typography.js.map +0 -1
  300. package/dist/cjs/reselect-CeyIIDM-.js.map +0 -1
  301. package/dist/primitives/Typography.js.map +0 -1
  302. package/dist/reselect-CABQm5hA.js.map +0 -1
@@ -0,0 +1,35 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var primitives_Switch = require('../primitives/Switch.js');
6
+ var primitives_Label = require('../primitives/Label.js');
7
+ var utils = require('../utils-CTr7wn5d.js');
8
+ require('../index-COPkC3I5.js');
9
+ require('../index-D-iDn9RI.js');
10
+ require('../index-CGUGhyIp.js');
11
+ require('../index-CyrAgb4H.js');
12
+ require('../index-CCdG4z4E.js');
13
+ require('../index-CF951Pw9.js');
14
+ require('../index-Bf0WsHta.js');
15
+ require('../index-DMbj7vXd.js');
16
+ require('react-dom');
17
+ require('../label-Bdc9ytTI.js');
18
+
19
+ // ---------------------------------------------------------------------------
20
+ // Component
21
+ // ---------------------------------------------------------------------------
22
+ const Switch = React.forwardRef(({ label, error, helpText, required = false, className, size = "default", disabled, id: idProp, ...otherProps }, ref) => {
23
+ const generatedId = React.useId();
24
+ const id = idProp ?? generatedId;
25
+ const errorId = `error_${id}`;
26
+ const helpTextId = `helpText_${id}`;
27
+ const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
28
+ .filter(Boolean)
29
+ .join(" ") || undefined;
30
+ return (jsxRuntime.jsxs("div", { className: utils.cn("inline-flex flex-col gap-1.5", className), "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, children: [jsxRuntime.jsxs("div", { className: utils.cn("inline-flex gap-2", helpText ? "items-start" : "items-center"), children: [jsxRuntime.jsx(primitives_Switch.Switch, { ref: ref, id: id, size: size, disabled: disabled, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, "aria-required": required || undefined, className: helpText ? "mt-0.5" : undefined, ...otherProps }), (label || helpText) && (jsxRuntime.jsxs("div", { className: "flex flex-col gap-0.5", children: [label && (jsxRuntime.jsxs(primitives_Label.Label, { htmlFor: id, className: utils.cn("cursor-pointer", disabled && "cursor-not-allowed opacity-50"), children: [label, required && (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), helpText && (jsxRuntime.jsx("p", { id: helpTextId, className: "text-sm text-muted-foreground", children: helpText }))] }))] }), error && (jsxRuntime.jsx("p", { id: errorId, role: "alert", className: "text-xs text-destructive", children: error }))] }));
31
+ });
32
+ Switch.displayName = "Switch";
33
+
34
+ exports.Switch = Switch;
35
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","sources":["../../../../src/components/Switch.tsx"],"sourcesContent":["import React, { forwardRef, useId } from \"react\";\n\nimport { Switch as PrimitiveSwitch } from \"src/primitives/Switch\";\nimport { Label } from \"src/primitives/Label\";\nimport { cn } from \"src/shadcn/lib/utils\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface SwitchProps extends Omit<\n React.ComponentProps<typeof PrimitiveSwitch>,\n \"children\"\n> {\n /** Text label displayed next to the switch. */\n label?: string;\n /** Error message displayed below the switch. */\n error?: string;\n /** Helper text displayed below the label. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Shows a required indicator next to the label. */\n required?: boolean;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n /** Size of the switch. */\n size?: \"sm\" | \"default\" | \"lg\";\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Switch = forwardRef<\n React.ComponentRef<typeof PrimitiveSwitch>,\n SwitchProps\n>(\n (\n {\n label,\n error,\n helpText,\n required = false,\n className,\n size = \"default\",\n disabled,\n id: idProp,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = idProp ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n return (\n <div\n className={cn(\"inline-flex flex-col gap-1.5\", className)}\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n >\n <div\n className={cn(\n \"inline-flex gap-2\",\n helpText ? \"items-start\" : \"items-center\"\n )}\n >\n <PrimitiveSwitch\n ref={ref}\n id={id}\n size={size}\n disabled={disabled}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n aria-required={required || undefined}\n className={helpText ? \"mt-0.5\" : undefined}\n {...otherProps}\n />\n {(label || helpText) && (\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <Label\n htmlFor={id}\n className={cn(\n \"cursor-pointer\",\n disabled && \"cursor-not-allowed opacity-50\"\n )}\n >\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </Label>\n )}\n {helpText && (\n <p id={helpTextId} className=\"text-sm text-muted-foreground\">\n {helpText}\n </p>\n )}\n </div>\n )}\n </div>\n {error && (\n <p id={errorId} role=\"alert\" className=\"text-xs text-destructive\">\n {error}\n </p>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n\nexport { Switch };\n"],"names":["forwardRef","useId","_jsxs","cn","_jsx","PrimitiveSwitch","Label"],"mappings":";;;;;;;;;;;;;;;;;;AA4BA;AACA;AACA;AAEA,MAAM,MAAM,GAAGA,gBAAU,CAIvB,CACE,EACE,KAAK,EACL,KAAK,EACL,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,SAAS,EACT,IAAI,GAAG,SAAS,EAChB,QAAQ,EACR,EAAE,EAAE,MAAM,EACV,GAAG,UAAU,EACd,EACD,GAAG,KACD;AACF,IAAA,MAAM,WAAW,GAAGC,WAAK,EAAE;AAC3B,IAAA,MAAM,EAAE,GAAG,MAAM,IAAI,WAAW;AAChC,IAAA,MAAM,OAAO,GAAG,CAAA,MAAA,EAAS,EAAE,EAAE;AAC7B,IAAA,MAAM,UAAU,GAAG,CAAA,SAAA,EAAY,EAAE,EAAE;IAEnC,MAAM,eAAe,GACnB,CAAC,KAAK,GAAG,OAAO,GAAG,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,IAAI;SAClD,MAAM,CAAC,OAAO;AACd,SAAA,IAAI,CAAC,GAAG,CAAC,IAAI,SAAS;AAE3B,IAAA,QACEC,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEC,QAAE,CAAC,8BAA8B,EAAE,SAAS,CAAC,EAAA,eAAA,EACzC,QAAQ,IAAI,SAAS,kBACtB,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,QAAA,EAAA,CAElCD,eAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAEC,QAAE,CACX,mBAAmB,EACnB,QAAQ,GAAG,aAAa,GAAG,cAAc,CAC1C,EAAA,QAAA,EAAA,CAEDC,eAACC,wBAAe,EAAA,EACd,GAAG,EAAE,GAAG,EACR,EAAE,EAAE,EAAE,EACN,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,QAAQ,EAAA,cAAA,EACJ,CAAC,CAAC,KAAK,IAAI,SAAS,EAAA,kBAAA,EAChB,eAAe,EAAA,eAAA,EAClB,QAAQ,IAAI,SAAS,EACpC,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,KACtC,UAAU,EAAA,CACd,EACD,CAAC,KAAK,IAAI,QAAQ,MACjBH,yBAAK,SAAS,EAAC,uBAAuB,EAAA,QAAA,EAAA,CACnC,KAAK,KACJA,gBAACI,sBAAK,EAAA,EACJ,OAAO,EAAE,EAAE,EACX,SAAS,EAAEH,QAAE,CACX,gBAAgB,EAChB,QAAQ,IAAI,+BAA+B,CAC5C,aAEA,KAAK,EACL,QAAQ,KACPC,cAAA,CAAA,MAAA,EAAA,EAAA,aAAA,EAAkB,MAAM,EAAC,SAAS,EAAC,kBAAkB,EAAA,QAAA,EAAA,GAAA,EAAA,CAE9C,CACR,CAAA,EAAA,CACK,CACT,EACA,QAAQ,KACPA,cAAA,CAAA,GAAA,EAAA,EAAG,EAAE,EAAE,UAAU,EAAE,SAAS,EAAC,+BAA+B,EAAA,QAAA,EACzD,QAAQ,GACP,CACL,CAAA,EAAA,CACG,CACP,CAAA,EAAA,CACG,EACL,KAAK,KACJA,cAAA,CAAA,GAAA,EAAA,EAAG,EAAE,EAAE,OAAO,EAAE,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,EAAA,QAAA,EAC9D,KAAK,GACJ,CACL,CAAA,EAAA,CACG;AAEV,CAAC;AAGH,MAAM,CAAC,WAAW,GAAG,QAAQ;;;;"}
@@ -0,0 +1,74 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var utils = require('../utils-CTr7wn5d.js');
6
+ var renderIcon = require('../renderIcon-fLF3odqg.js');
7
+ var primitives_Tabs = require('../primitives/Tabs.js');
8
+ require('../index-BZhTddX0.js');
9
+ require('../index-COPkC3I5.js');
10
+ require('../index-CGUGhyIp.js');
11
+ require('../index-hQmfI1O7.js');
12
+ require('../index-Ch55j1or.js');
13
+ require('../index-D-iDn9RI.js');
14
+ require('../index-BwAq9ba8.js');
15
+ require('../index-CCdG4z4E.js');
16
+ require('../index-DMbj7vXd.js');
17
+ require('react-dom');
18
+ require('../index-lWVw05cs.js');
19
+ require('../index-CyrAgb4H.js');
20
+ require('../index-9jC1advf.js');
21
+ require('../index-DcCSSgb7.js');
22
+
23
+ // ---------------------------------------------------------------------------
24
+ // Size config
25
+ // ---------------------------------------------------------------------------
26
+ const SIZE_CLASSES = {
27
+ default: "",
28
+ lg: "text-[15px] px-3 py-1.5",
29
+ };
30
+ const LIST_HEIGHT = {
31
+ default: "",
32
+ lg: "group-data-horizontal/tabs:h-10",
33
+ };
34
+ // ---------------------------------------------------------------------------
35
+ // Context
36
+ // ---------------------------------------------------------------------------
37
+ const TabsSizeContext = React.createContext("default");
38
+ // ---------------------------------------------------------------------------
39
+ // Tabs (root)
40
+ // ---------------------------------------------------------------------------
41
+ const TabsRoot = React.forwardRef(({ size = "default", children, ...props }, ref) => (jsxRuntime.jsx(TabsSizeContext.Provider, { value: size, children: jsxRuntime.jsx(primitives_Tabs.Tabs, { ref: ref, ...props, children: children }) })));
42
+ TabsRoot.displayName = "Tabs";
43
+ // ---------------------------------------------------------------------------
44
+ // Tabs.List
45
+ // ---------------------------------------------------------------------------
46
+ const TabsListComponent = React.forwardRef(({ className, ...props }, ref) => {
47
+ const size = React.useContext(TabsSizeContext);
48
+ return (jsxRuntime.jsx(primitives_Tabs.TabsList, { ref: ref, className: utils.cn(LIST_HEIGHT[size], className), ...props }));
49
+ });
50
+ TabsListComponent.displayName = "Tabs.List";
51
+ // ---------------------------------------------------------------------------
52
+ // Tabs.Item
53
+ // ---------------------------------------------------------------------------
54
+ const TabsItemComponent = React.forwardRef(({ icon, className, children, ...otherProps }, ref) => {
55
+ const size = React.useContext(TabsSizeContext);
56
+ return (jsxRuntime.jsxs(primitives_Tabs.TabsTrigger, { ref: ref, className: utils.cn(SIZE_CLASSES[size], icon && "gap-1.5", className), ...otherProps, children: [icon && renderIcon.renderIcon(icon, size === "lg" ? "size-5" : "size-4"), children] }));
57
+ });
58
+ TabsItemComponent.displayName = "Tabs.Item";
59
+ // ---------------------------------------------------------------------------
60
+ // Tabs.Content
61
+ // ---------------------------------------------------------------------------
62
+ const TabsContentComponent = React.forwardRef((props, ref) => jsxRuntime.jsx(primitives_Tabs.TabsContent, { ref: ref, ...props }));
63
+ TabsContentComponent.displayName = "Tabs.Content";
64
+ // ---------------------------------------------------------------------------
65
+ // Compound component
66
+ // ---------------------------------------------------------------------------
67
+ const Tabs = Object.assign(TabsRoot, {
68
+ List: TabsListComponent,
69
+ Item: TabsItemComponent,
70
+ Content: TabsContentComponent,
71
+ });
72
+
73
+ exports.Tabs = Tabs;
74
+ //# sourceMappingURL=Tabs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tabs.js","sources":["../../../../src/components/Tabs.tsx"],"sourcesContent":["import React, { forwardRef, createContext, useContext } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport { renderIcon, type IconProp } from \"src/lib/renderIcon\";\nimport {\n Tabs as PrimitiveTabs,\n TabsList as PrimitiveTabsList,\n TabsTrigger as PrimitiveTabsTrigger,\n TabsContent as PrimitiveTabsContent,\n} from \"src/primitives/Tabs\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TabsSize = \"default\" | \"lg\";\n\nexport interface TabsProps extends React.ComponentProps<typeof PrimitiveTabs> {\n /** Size of tab triggers. Applied to all Tabs.Item children. */\n size?: TabsSize;\n}\n\ntype TabsListProps = React.ComponentProps<typeof PrimitiveTabsList>;\n\ninterface TabsItemProps extends React.ComponentProps<\n typeof PrimitiveTabsTrigger\n> {\n /** Icon component, element, or class-name string rendered before the label. */\n icon?: IconProp;\n}\n\ntype TabsContentProps = React.ComponentProps<typeof PrimitiveTabsContent>;\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst SIZE_CLASSES: Record<TabsSize, string> = {\n default: \"\",\n lg: \"text-[15px] px-3 py-1.5\",\n};\n\nconst LIST_HEIGHT: Record<TabsSize, string> = {\n default: \"\",\n lg: \"group-data-horizontal/tabs:h-10\",\n};\n\n// ---------------------------------------------------------------------------\n// Context\n// ---------------------------------------------------------------------------\n\nconst TabsSizeContext = createContext<TabsSize>(\"default\");\n\n// ---------------------------------------------------------------------------\n// Tabs (root)\n// ---------------------------------------------------------------------------\n\nconst TabsRoot = forwardRef<HTMLDivElement, TabsProps>(\n ({ size = \"default\", children, ...props }, ref) => (\n <TabsSizeContext.Provider value={size}>\n <PrimitiveTabs ref={ref} {...props}>\n {children}\n </PrimitiveTabs>\n </TabsSizeContext.Provider>\n )\n);\nTabsRoot.displayName = \"Tabs\";\n\n// ---------------------------------------------------------------------------\n// Tabs.List\n// ---------------------------------------------------------------------------\n\nconst TabsListComponent = forwardRef<HTMLDivElement, TabsListProps>(\n ({ className, ...props }, ref) => {\n const size = useContext(TabsSizeContext);\n\n return (\n <PrimitiveTabsList\n ref={ref}\n className={cn(LIST_HEIGHT[size], className)}\n {...props}\n />\n );\n }\n);\nTabsListComponent.displayName = \"Tabs.List\";\n\n// ---------------------------------------------------------------------------\n// Tabs.Item\n// ---------------------------------------------------------------------------\n\nconst TabsItemComponent = forwardRef<HTMLButtonElement, TabsItemProps>(\n ({ icon, className, children, ...otherProps }, ref) => {\n const size = useContext(TabsSizeContext);\n\n return (\n <PrimitiveTabsTrigger\n ref={ref}\n className={cn(SIZE_CLASSES[size], icon && \"gap-1.5\", className)}\n {...otherProps}\n >\n {icon && renderIcon(icon, size === \"lg\" ? \"size-5\" : \"size-4\")}\n {children}\n </PrimitiveTabsTrigger>\n );\n }\n);\nTabsItemComponent.displayName = \"Tabs.Item\";\n\n// ---------------------------------------------------------------------------\n// Tabs.Content\n// ---------------------------------------------------------------------------\n\nconst TabsContentComponent = forwardRef<HTMLDivElement, TabsContentProps>(\n (props, ref) => <PrimitiveTabsContent ref={ref} {...props} />\n);\nTabsContentComponent.displayName = \"Tabs.Content\";\n\n// ---------------------------------------------------------------------------\n// Compound component\n// ---------------------------------------------------------------------------\n\nconst Tabs = Object.assign(TabsRoot, {\n List: TabsListComponent,\n Item: TabsItemComponent,\n Content: TabsContentComponent,\n});\n\nexport { Tabs };\n"],"names":["createContext","forwardRef","_jsx","PrimitiveTabs","useContext","PrimitiveTabsList","cn","_jsxs","PrimitiveTabsTrigger","renderIcon","PrimitiveTabsContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiCA;AACA;AACA;AAEA,MAAM,YAAY,GAA6B;AAC7C,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,EAAE,EAAE,yBAAyB;CAC9B;AAED,MAAM,WAAW,GAA6B;AAC5C,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,EAAE,EAAE,iCAAiC;CACtC;AAED;AACA;AACA;AAEA,MAAM,eAAe,GAAGA,mBAAa,CAAW,SAAS,CAAC;AAE1D;AACA;AACA;AAEA,MAAM,QAAQ,GAAGC,gBAAU,CACzB,CAAC,EAAE,IAAI,GAAG,SAAS,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,MAC5CC,cAAA,CAAC,eAAe,CAAC,QAAQ,IAAC,KAAK,EAAE,IAAI,EAAA,QAAA,EACnCA,cAAA,CAACC,oBAAa,EAAA,EAAC,GAAG,EAAE,GAAG,EAAA,GAAM,KAAK,EAAA,QAAA,EAC/B,QAAQ,GACK,EAAA,CACS,CAC5B,CACF;AACD,QAAQ,CAAC,WAAW,GAAG,MAAM;AAE7B;AACA;AACA;AAEA,MAAM,iBAAiB,GAAGF,gBAAU,CAClC,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,GAAG,KAAI;AAC/B,IAAA,MAAM,IAAI,GAAGG,gBAAU,CAAC,eAAe,CAAC;IAExC,QACEF,eAACG,wBAAiB,EAAA,EAChB,GAAG,EAAE,GAAG,EACR,SAAS,EAAEC,QAAE,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,EAAA,GACvC,KAAK,EAAA,CACT;AAEN,CAAC,CACF;AACD,iBAAiB,CAAC,WAAW,GAAG,WAAW;AAE3C;AACA;AACA;AAEA,MAAM,iBAAiB,GAAGL,gBAAU,CAClC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,UAAU,EAAE,EAAE,GAAG,KAAI;AACpD,IAAA,MAAM,IAAI,GAAGG,gBAAU,CAAC,eAAe,CAAC;IAExC,QACEG,gBAACC,2BAAoB,EAAA,EACnB,GAAG,EAAE,GAAG,EACR,SAAS,EAAEF,QAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,IAAI,SAAS,EAAE,SAAS,CAAC,EAAA,GAC3D,UAAU,EAAA,QAAA,EAAA,CAEb,IAAI,IAAIG,qBAAU,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,GAAG,QAAQ,GAAG,QAAQ,CAAC,EAC7D,QAAQ,CAAA,EAAA,CACY;AAE3B,CAAC,CACF;AACD,iBAAiB,CAAC,WAAW,GAAG,WAAW;AAE3C;AACA;AACA;AAEA,MAAM,oBAAoB,GAAGR,gBAAU,CACrC,CAAC,KAAK,EAAE,GAAG,KAAKC,cAAA,CAACQ,2BAAoB,IAAC,GAAG,EAAE,GAAG,EAAA,GAAM,KAAK,EAAA,CAAI,CAC9D;AACD,oBAAoB,CAAC,WAAW,GAAG,cAAc;AAEjD;AACA;AACA;AAEA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE;AACnC,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,IAAI,EAAE,iBAAiB;AACvB,IAAA,OAAO,EAAE,oBAAoB;AAC9B,CAAA;;;;"}
@@ -0,0 +1,89 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var utils = require('../utils-CTr7wn5d.js');
6
+ var primitives_Field = require('../primitives/Field.js');
7
+ var primitives_Textarea = require('../primitives/Textarea.js');
8
+ require('../index-BZhTddX0.js');
9
+ require('../label-Bdc9ytTI.js');
10
+ require('../index-DMbj7vXd.js');
11
+ require('react-dom');
12
+ require('../index-D-iDn9RI.js');
13
+ require('../separator-CPy2gyg1.js');
14
+ require('../textarea-CZSSY75H.js');
15
+
16
+ // ---------------------------------------------------------------------------
17
+ // Size config
18
+ // ---------------------------------------------------------------------------
19
+ const SIZE_ROWS = {
20
+ small: 1,
21
+ medium: 3,
22
+ large: 4,
23
+ };
24
+ const SIZE_MIN_HEIGHT = {
25
+ small: "min-h-8",
26
+ medium: "min-h-20",
27
+ large: "min-h-28",
28
+ };
29
+ // ---------------------------------------------------------------------------
30
+ // Utilities
31
+ // ---------------------------------------------------------------------------
32
+ function getTrimmedValue(value, disableTrimOnBlur) {
33
+ if (disableTrimOnBlur || typeof value !== "string")
34
+ return value;
35
+ return value.trim();
36
+ }
37
+ // ---------------------------------------------------------------------------
38
+ // Component
39
+ // ---------------------------------------------------------------------------
40
+ const Textarea = React.forwardRef(({ size = "medium", resize = "vertical", label = "", error = "", helpText = "", disabled = false, required = false, maxLength, unlimitedChars = false, disableTrimOnBlur = false, prefix, suffix, nakedTextarea = false, labelProps, className = "", rows: rowsProp, onBlur, onChange, value: controlledValue, ...otherProps }, ref) => {
41
+ const generatedId = React.useId();
42
+ const id = otherProps.id ?? generatedId;
43
+ const errorId = `error_${id}`;
44
+ const helpTextId = `helpText_${id}`;
45
+ // Controlled / uncontrolled value tracking
46
+ const [valueInternal, setValueInternal] = React.useState(controlledValue ?? "");
47
+ const isControlled = controlledValue !== undefined;
48
+ const value = isControlled ? controlledValue : valueInternal;
49
+ const valueLength = value?.toString().length || 0;
50
+ const isMaxLengthPresent = !!maxLength || maxLength === 0;
51
+ const isCharacterLimitVisible = isMaxLengthPresent && valueLength >= maxLength * 0.85;
52
+ const maxLengthError = unlimitedChars && valueLength > maxLength;
53
+ const rows = rowsProp ?? SIZE_ROWS[size];
54
+ // --- Handlers ---
55
+ const handleChange = (e) => {
56
+ if (!isControlled) {
57
+ setValueInternal(e.target.value);
58
+ }
59
+ onChange?.(e);
60
+ };
61
+ const handleBlur = (e) => {
62
+ const trimmedValue = getTrimmedValue(value ?? "", disableTrimOnBlur);
63
+ if (trimmedValue !== value) {
64
+ e.target.value = trimmedValue.toString();
65
+ handleChange(e);
66
+ }
67
+ onBlur?.(e);
68
+ };
69
+ // --- aria-describedby ---
70
+ const ariaDescribedBy = [error ? errorId : null, helpText ? helpTextId : null]
71
+ .filter(Boolean)
72
+ .join(" ") || undefined;
73
+ // --- Textarea element ---
74
+ const hasField = !!(label || error || helpText);
75
+ const textareaElement = (jsxRuntime.jsx(primitives_Textarea.Textarea, { ref: ref, id: id, rows: rows, disabled: disabled, required: required, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: utils.cn(
76
+ // Override shadcn's field-sizing-content and min-h-16 so rows works
77
+ "!field-sizing-normal", SIZE_MIN_HEIGHT[size], resize === "none" && "resize-none", resize === "vertical" && "resize-y", nakedTextarea &&
78
+ "border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0", !!error && "border-destructive ring-destructive/20 ring-3"), value: value, onBlur: handleBlur, onChange: handleChange, ...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {}), ...otherProps }));
79
+ const hasPrefixSuffix = !!(prefix || suffix);
80
+ const textareaWithAffixes = hasPrefixSuffix ? (jsxRuntime.jsxs("div", { className: utils.cn("flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50", !!error && "border-destructive ring-destructive/20 ring-3", nakedTextarea && "border-transparent shadow-none"), children: [prefix && (jsxRuntime.jsx("div", { className: "shrink-0 pt-0.5 text-muted-foreground", children: prefix })), jsxRuntime.jsx(primitives_Textarea.Textarea, { ref: ref, id: id, rows: rows, disabled: disabled, required: required, "aria-invalid": !!error || undefined, "aria-describedby": ariaDescribedBy, className: utils.cn("!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0", SIZE_MIN_HEIGHT[size], resize === "none" && "resize-none", resize === "vertical" && "resize-y"), value: value, onBlur: handleBlur, onChange: handleChange, ...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {}), ...otherProps }), suffix && (jsxRuntime.jsx("div", { className: "shrink-0 pt-0.5 text-muted-foreground", children: suffix }))] })) : (textareaElement);
81
+ if (!hasField) {
82
+ return jsxRuntime.jsx("div", { className: utils.cn(className), children: textareaWithAffixes });
83
+ }
84
+ return (jsxRuntime.jsxs(primitives_Field.Field, { "data-disabled": disabled || undefined, "data-invalid": !!error || undefined, className: className, children: [(label || isCharacterLimitVisible) && (jsxRuntime.jsxs("div", { className: "flex items-center justify-between", children: [label && (jsxRuntime.jsxs(primitives_Field.FieldLabel, { htmlFor: id, ...labelProps, children: [label, required && (jsxRuntime.jsx("span", { "aria-hidden": "true", className: "text-destructive", children: "*" }))] })), isCharacterLimitVisible && (jsxRuntime.jsxs("span", { className: utils.cn("text-xs tabular-nums", maxLengthError ? "text-destructive" : "text-muted-foreground"), children: [valueLength, "/", maxLength] }))] })), jsxRuntime.jsxs(primitives_Field.FieldContent, { children: [textareaWithAffixes, !!error && jsxRuntime.jsx(primitives_Field.FieldError, { id: errorId, children: error }), helpText && (jsxRuntime.jsx(primitives_Field.FieldDescription, { id: helpTextId, children: helpText }))] })] }));
85
+ });
86
+ Textarea.displayName = "Textarea";
87
+
88
+ exports.Textarea = Textarea;
89
+ //# sourceMappingURL=Textarea.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Textarea.js","sources":["../../../../src/components/Textarea.tsx"],"sourcesContent":["import React, { forwardRef, useId, useState } from \"react\";\n\nimport { cn } from \"src/shadcn/lib/utils\";\nimport {\n Field,\n FieldLabel,\n FieldContent,\n FieldDescription,\n FieldError,\n} from \"src/primitives/Field\";\nimport { Textarea as PrimitiveTextarea } from \"src/primitives/Textarea\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TextareaSize = \"small\" | \"medium\" | \"large\";\ntype TextareaResize = \"vertical\" | \"none\";\n\ntype PrimitiveTextareaProps = React.ComponentProps<typeof PrimitiveTextarea>;\n\nexport interface TextareaProps extends Omit<\n PrimitiveTextareaProps,\n \"size\" | \"children\"\n> {\n /** Size of the textarea. Controls default rows: small=1, medium=3, large=4. */\n size?: TextareaSize;\n /** Resize behavior. */\n resize?: TextareaResize;\n /** Label displayed above the textarea. */\n label?: string;\n /** Error message displayed below the textarea. */\n error?: string;\n /** Help text displayed below the textarea. Accepts string or ReactNode. */\n helpText?: React.ReactNode;\n /** Maximum character limit. Counter visible at 85% capacity. */\n maxLength?: number;\n /** Allow typing past maxLength, show error styling on count. */\n unlimitedChars?: boolean;\n /** Prevent trimming whitespace on blur. */\n disableTrimOnBlur?: boolean;\n /** Content to display before the textarea. */\n prefix?: React.ReactNode;\n /** Content to display after the textarea. */\n suffix?: React.ReactNode;\n /** Render the textarea without borders. */\n nakedTextarea?: boolean;\n /** Props forwarded to the Label element. */\n labelProps?: React.ComponentProps<typeof FieldLabel>;\n /** Additional class name for the outermost wrapper. */\n className?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst SIZE_ROWS: Record<TextareaSize, number> = {\n small: 1,\n medium: 3,\n large: 4,\n};\n\nconst SIZE_MIN_HEIGHT: Record<TextareaSize, string> = {\n small: \"min-h-8\",\n medium: \"min-h-20\",\n large: \"min-h-28\",\n};\n\n// ---------------------------------------------------------------------------\n// Utilities\n// ---------------------------------------------------------------------------\n\nfunction getTrimmedValue(\n value: string | number,\n disableTrimOnBlur: boolean\n): string | number {\n if (disableTrimOnBlur || typeof value !== \"string\") return value;\n return value.trim();\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n (\n {\n size = \"medium\",\n resize = \"vertical\",\n label = \"\",\n error = \"\",\n helpText = \"\",\n disabled = false,\n required = false,\n maxLength,\n unlimitedChars = false,\n disableTrimOnBlur = false,\n prefix,\n suffix,\n nakedTextarea = false,\n labelProps,\n className = \"\",\n rows: rowsProp,\n onBlur,\n onChange,\n value: controlledValue,\n ...otherProps\n },\n ref\n ) => {\n const generatedId = useId();\n const id = otherProps.id ?? generatedId;\n const errorId = `error_${id}`;\n const helpTextId = `helpText_${id}`;\n\n // Controlled / uncontrolled value tracking\n const [valueInternal, setValueInternal] = useState(controlledValue ?? \"\");\n const isControlled = controlledValue !== undefined;\n\n const value = isControlled ? controlledValue : valueInternal;\n const valueLength = value?.toString().length || 0;\n\n const isMaxLengthPresent = !!maxLength || maxLength === 0;\n const isCharacterLimitVisible =\n isMaxLengthPresent && valueLength >= maxLength! * 0.85;\n const maxLengthError = unlimitedChars && valueLength > maxLength!;\n\n const rows = rowsProp ?? SIZE_ROWS[size];\n\n // --- Handlers ---\n\n const handleChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n if (!isControlled) {\n setValueInternal(e.target.value);\n }\n onChange?.(e);\n };\n\n const handleBlur = (e: React.FocusEvent<HTMLTextAreaElement>) => {\n const trimmedValue = getTrimmedValue(value ?? \"\", disableTrimOnBlur);\n\n if (trimmedValue !== value) {\n e.target.value = trimmedValue.toString();\n handleChange(e as unknown as React.ChangeEvent<HTMLTextAreaElement>);\n }\n\n onBlur?.(e);\n };\n\n // --- aria-describedby ---\n\n const ariaDescribedBy =\n [error ? errorId : null, helpText ? helpTextId : null]\n .filter(Boolean)\n .join(\" \") || undefined;\n\n // --- Textarea element ---\n\n const hasField = !!(label || error || helpText);\n\n const textareaElement = (\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n // Override shadcn's field-sizing-content and min-h-16 so rows works\n \"!field-sizing-normal\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\",\n nakedTextarea &&\n \"border-transparent shadow-none px-0 py-0 focus-visible:border-transparent focus-visible:ring-0\",\n !!error && \"border-destructive ring-destructive/20 ring-3\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n );\n\n const hasPrefixSuffix = !!(prefix || suffix);\n\n const textareaWithAffixes = hasPrefixSuffix ? (\n <div\n className={cn(\n \"flex items-start gap-2 rounded-lg border border-input px-2.5 py-2 focus-within:border-ring focus-within:ring-3 focus-within:ring-ring/50\",\n !!error && \"border-destructive ring-destructive/20 ring-3\",\n nakedTextarea && \"border-transparent shadow-none\"\n )}\n >\n {prefix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{prefix}</div>\n )}\n <PrimitiveTextarea\n ref={ref}\n id={id}\n rows={rows}\n disabled={disabled}\n required={required}\n aria-invalid={!!error || undefined}\n aria-describedby={ariaDescribedBy}\n className={cn(\n \"!field-sizing-normal border-0 p-0 shadow-none focus-visible:border-0 focus-visible:ring-0\",\n SIZE_MIN_HEIGHT[size],\n resize === \"none\" && \"resize-none\",\n resize === \"vertical\" && \"resize-y\"\n )}\n value={value}\n onBlur={handleBlur}\n onChange={handleChange}\n {...(isMaxLengthPresent && !unlimitedChars ? { maxLength } : {})}\n {...otherProps}\n />\n {suffix && (\n <div className=\"shrink-0 pt-0.5 text-muted-foreground\">{suffix}</div>\n )}\n </div>\n ) : (\n textareaElement\n );\n\n if (!hasField) {\n return <div className={cn(className)}>{textareaWithAffixes}</div>;\n }\n\n return (\n <Field\n data-disabled={disabled || undefined}\n data-invalid={!!error || undefined}\n className={className}\n >\n {(label || isCharacterLimitVisible) && (\n <div className=\"flex items-center justify-between\">\n {label && (\n <FieldLabel htmlFor={id} {...labelProps}>\n {label}\n {required && (\n <span aria-hidden=\"true\" className=\"text-destructive\">\n *\n </span>\n )}\n </FieldLabel>\n )}\n {isCharacterLimitVisible && (\n <span\n className={cn(\n \"text-xs tabular-nums\",\n maxLengthError ? \"text-destructive\" : \"text-muted-foreground\"\n )}\n >\n {valueLength}/{maxLength}\n </span>\n )}\n </div>\n )}\n <FieldContent>\n {textareaWithAffixes}\n {!!error && <FieldError id={errorId}>{error}</FieldError>}\n {helpText && (\n <FieldDescription id={helpTextId}>{helpText}</FieldDescription>\n )}\n </FieldContent>\n </Field>\n );\n }\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport { Textarea };\n"],"names":["forwardRef","useId","useState","_jsx","PrimitiveTextarea","cn","_jsxs","Field","FieldLabel","FieldContent","FieldError","FieldDescription"],"mappings":"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"}
@@ -0,0 +1,133 @@
1
+ 'use strict';
2
+
3
+ var index = require('../index-Vlwnyfvs.js');
4
+ require('react');
5
+ require('react-dom');
6
+
7
+ // ---------------------------------------------------------------------------
8
+ // Dedup set — prevents showing the same toast twice simultaneously
9
+ // ---------------------------------------------------------------------------
10
+ const activeToasts = new Set();
11
+ function toastKey(type, message, buttonLabel) {
12
+ return `${type}::${message}::${buttonLabel ?? ""}`;
13
+ }
14
+ // ---------------------------------------------------------------------------
15
+ // RTL detection
16
+ // ---------------------------------------------------------------------------
17
+ function getContentDir() {
18
+ if (typeof document === "undefined")
19
+ return "ltr";
20
+ return (document.documentElement.getAttribute("dir") ??
21
+ document.body.getAttribute("dir") ??
22
+ "ltr");
23
+ }
24
+ // ---------------------------------------------------------------------------
25
+ // Message parsing
26
+ // ---------------------------------------------------------------------------
27
+ function resolveMessage(message) {
28
+ if (typeof message === "string")
29
+ return message;
30
+ if (message && typeof message === "object") {
31
+ if (message.customMessage)
32
+ return message.customMessage;
33
+ if (message.notice)
34
+ return message.notice;
35
+ if (message.noticeCode)
36
+ return message.noticeCode;
37
+ }
38
+ return String(message);
39
+ }
40
+ // ---------------------------------------------------------------------------
41
+ // Error parsing (mirrors neeto-ui behavior)
42
+ // ---------------------------------------------------------------------------
43
+ function resolveErrorMessage(errorObject) {
44
+ if (typeof errorObject === "string")
45
+ return errorObject;
46
+ if (errorObject && typeof errorObject === "object") {
47
+ // Axios-style error
48
+ const axiosLike = errorObject;
49
+ if (axiosLike.response?.data) {
50
+ const data = axiosLike.response.data;
51
+ if (data.customMessage)
52
+ return String(data.customMessage);
53
+ if (data.error)
54
+ return String(data.error);
55
+ if (Array.isArray(data.errors))
56
+ return data.errors.join("\n");
57
+ if (data.noticeCode)
58
+ return String(data.noticeCode);
59
+ }
60
+ if (axiosLike.isAxiosError && axiosLike.message)
61
+ return axiosLike.message;
62
+ // Native Error
63
+ if (errorObject instanceof Error)
64
+ return errorObject.message;
65
+ // ToastrMessage object
66
+ return resolveMessage(errorObject);
67
+ }
68
+ return "Something went wrong.";
69
+ }
70
+ function showToast(type, message, config) {
71
+ const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};
72
+ const key = toastKey(type, message, buttonLabel);
73
+ if (activeToasts.has(key))
74
+ return undefined;
75
+ activeToasts.add(key);
76
+ const options = {
77
+ onDismiss: () => activeToasts.delete(key),
78
+ onAutoClose: () => activeToasts.delete(key),
79
+ position: getContentDir() === "rtl" ? "bottom-right" : "bottom-left",
80
+ ...restConfig,
81
+ };
82
+ if (buttonLabel) {
83
+ options.action = {
84
+ label: buttonLabel,
85
+ onClick: onClick ?? (() => { }),
86
+ };
87
+ }
88
+ // When showIcon is explicitly false, hide the type icon
89
+ if (showIcon === false) {
90
+ options.icon = null;
91
+ }
92
+ return index.toast[type](message, options);
93
+ }
94
+ // ---------------------------------------------------------------------------
95
+ // Public API (matches neeto-ui Toastr interface)
96
+ // ---------------------------------------------------------------------------
97
+ function parseConfig(args) {
98
+ if (args.length === 0)
99
+ return {};
100
+ const first = args[0];
101
+ if (typeof first === "object" && first !== null && !Array.isArray(first)) {
102
+ return first;
103
+ }
104
+ // Legacy positional args: buttonLabel, onClick, customConfig, showIcon
105
+ const [buttonLabel, onClick, customConfig, showIcon] = args;
106
+ return {
107
+ ...(buttonLabel ? { buttonLabel } : {}),
108
+ ...(onClick ? { onClick } : {}),
109
+ ...(showIcon !== undefined ? { showIcon } : {}),
110
+ ...(customConfig ?? {}),
111
+ };
112
+ }
113
+ const Toastr = {
114
+ success(message, ...args) {
115
+ return showToast("success", resolveMessage(message), parseConfig(args));
116
+ },
117
+ info(message, ...args) {
118
+ return showToast("info", resolveMessage(message), parseConfig(args));
119
+ },
120
+ show(message, ...args) {
121
+ return showToast("info", resolveMessage(message), parseConfig(args));
122
+ },
123
+ warning(message, ...args) {
124
+ return showToast("warning", resolveMessage(message), parseConfig(args));
125
+ },
126
+ error(errorObject, ...args) {
127
+ const msg = resolveErrorMessage(errorObject);
128
+ return showToast("error", msg, parseConfig(args));
129
+ },
130
+ };
131
+
132
+ exports.Toastr = Toastr;
133
+ //# sourceMappingURL=Toastr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toastr.js","sources":["../../../../src/components/Toastr.tsx"],"sourcesContent":["import { toast } from \"sonner\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface ToastrConfig {\n /** Label for an action button inside the toast. */\n buttonLabel?: string;\n /** Callback when the action button is clicked. */\n onClick?: () => void;\n /** Whether to show the type icon in the toast. */\n showIcon?: boolean;\n /** Additional sonner toast options (duration, position, dismissible, etc.). */\n [key: string]: unknown;\n}\n\ntype ToastrMessage =\n | string\n | { noticeCode?: string; customMessage?: string; notice?: string };\n\ntype ToastrErrorInput =\n | string\n | Error\n | {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n }\n | ToastrMessage;\n\n// ---------------------------------------------------------------------------\n// Dedup set — prevents showing the same toast twice simultaneously\n// ---------------------------------------------------------------------------\n\nconst activeToasts = new Set<string>();\n\nfunction toastKey(type: string, message: string, buttonLabel?: string): string {\n return `${type}::${message}::${buttonLabel ?? \"\"}`;\n}\n\n// ---------------------------------------------------------------------------\n// RTL detection\n// ---------------------------------------------------------------------------\n\nfunction getContentDir(): \"ltr\" | \"rtl\" {\n if (typeof document === \"undefined\") return \"ltr\";\n return (\n (document.documentElement.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n (document.body.getAttribute(\"dir\") as \"ltr\" | \"rtl\") ??\n \"ltr\"\n );\n}\n\n// ---------------------------------------------------------------------------\n// Message parsing\n// ---------------------------------------------------------------------------\n\nfunction resolveMessage(message: ToastrMessage): string {\n if (typeof message === \"string\") return message;\n if (message && typeof message === \"object\") {\n if (message.customMessage) return message.customMessage;\n if (message.notice) return message.notice;\n if (message.noticeCode) return message.noticeCode;\n }\n return String(message);\n}\n\n// ---------------------------------------------------------------------------\n// Error parsing (mirrors neeto-ui behavior)\n// ---------------------------------------------------------------------------\n\nfunction resolveErrorMessage(errorObject: ToastrErrorInput): string {\n if (typeof errorObject === \"string\") return errorObject;\n\n if (errorObject && typeof errorObject === \"object\") {\n // Axios-style error\n const axiosLike = errorObject as {\n response?: { data?: Record<string, unknown> };\n message?: string;\n isAxiosError?: boolean;\n };\n\n if (axiosLike.response?.data) {\n const data = axiosLike.response.data;\n if (data.customMessage) return String(data.customMessage);\n if (data.error) return String(data.error);\n if (Array.isArray(data.errors)) return data.errors.join(\"\\n\");\n if (data.noticeCode) return String(data.noticeCode);\n }\n\n if (axiosLike.isAxiosError && axiosLike.message) return axiosLike.message;\n\n // Native Error\n if (errorObject instanceof Error) return errorObject.message;\n\n // ToastrMessage object\n return resolveMessage(errorObject as ToastrMessage);\n }\n\n return \"Something went wrong.\";\n}\n\n// ---------------------------------------------------------------------------\n// Core toast helper\n// ---------------------------------------------------------------------------\n\ntype SonnerType = \"success\" | \"info\" | \"warning\" | \"error\";\n\nfunction showToast(\n type: SonnerType,\n message: string,\n config?: ToastrConfig\n): string | number | undefined {\n const { buttonLabel, onClick, showIcon, ...restConfig } = config ?? {};\n\n const key = toastKey(type, message, buttonLabel);\n\n if (activeToasts.has(key)) return undefined;\n activeToasts.add(key);\n\n const options: Record<string, unknown> = {\n onDismiss: () => activeToasts.delete(key),\n onAutoClose: () => activeToasts.delete(key),\n position: getContentDir() === \"rtl\" ? \"bottom-right\" : \"bottom-left\",\n ...restConfig,\n };\n\n if (buttonLabel) {\n options.action = {\n label: buttonLabel,\n onClick: onClick ?? (() => {}),\n };\n }\n\n // When showIcon is explicitly false, hide the type icon\n if (showIcon === false) {\n options.icon = null;\n }\n\n return toast[type](message, options);\n}\n\n// ---------------------------------------------------------------------------\n// Public API (matches neeto-ui Toastr interface)\n// ---------------------------------------------------------------------------\n\nfunction parseConfig(args: unknown[]): ToastrConfig {\n if (args.length === 0) return {};\n\n const first = args[0];\n if (typeof first === \"object\" && first !== null && !Array.isArray(first)) {\n return first as ToastrConfig;\n }\n\n // Legacy positional args: buttonLabel, onClick, customConfig, showIcon\n const [buttonLabel, onClick, customConfig, showIcon] = args as [\n string?,\n (() => void)?,\n Record<string, unknown>?,\n boolean?,\n ];\n\n return {\n ...(buttonLabel ? { buttonLabel } : {}),\n ...(onClick ? { onClick } : {}),\n ...(showIcon !== undefined ? { showIcon } : {}),\n ...(customConfig ?? {}),\n };\n}\n\nconst Toastr = {\n success(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"success\", resolveMessage(message), parseConfig(args));\n },\n\n info(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n show(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"info\", resolveMessage(message), parseConfig(args));\n },\n\n warning(message: ToastrMessage, ...args: unknown[]) {\n return showToast(\"warning\", resolveMessage(message), parseConfig(args));\n },\n\n error(errorObject: ToastrErrorInput, ...args: unknown[]) {\n const msg = resolveErrorMessage(errorObject);\n return showToast(\"error\", msg, parseConfig(args));\n },\n};\n\nexport { Toastr };\n"],"names":["toast"],"mappings":"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"}
@@ -0,0 +1,109 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var React = require('react');
5
+ var primitives_Tooltip = require('../primitives/Tooltip.js');
6
+ require('../tooltip-C-568jEL.js');
7
+ require('../utils-CTr7wn5d.js');
8
+ require('../index-COPkC3I5.js');
9
+ require('../index-D-iDn9RI.js');
10
+ require('../index-CGUGhyIp.js');
11
+ require('../index-Bvu9MiFi.js');
12
+ require('../index-DMbj7vXd.js');
13
+ require('react-dom');
14
+ require('../index-lWVw05cs.js');
15
+ require('../index-BwAq9ba8.js');
16
+ require('../index-CCdG4z4E.js');
17
+ require('../index-C9ICrOhM.js');
18
+ require('../floating-ui.react-dom-B4Aw6O7R.js');
19
+ require('../index-Bf0WsHta.js');
20
+ require('../index-Df-Ffa3s.js');
21
+ require('../index-DcCSSgb7.js');
22
+ require('../index-CyrAgb4H.js');
23
+ require('../index-CB9xFokC.js');
24
+
25
+ function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
+
27
+ var React__default = /*#__PURE__*/_interopDefault(React);
28
+
29
+ // ---------------------------------------------------------------------------
30
+ // Position mapping
31
+ // ---------------------------------------------------------------------------
32
+ const SIDE_MAP = {
33
+ top: "top",
34
+ bottom: "bottom",
35
+ left: "left",
36
+ right: "right",
37
+ "top-start": "top",
38
+ "top-end": "top",
39
+ "bottom-start": "bottom",
40
+ "bottom-end": "bottom",
41
+ "left-start": "left",
42
+ "left-end": "left",
43
+ "right-start": "right",
44
+ "right-end": "right",
45
+ auto: "top",
46
+ };
47
+ const ALIGN_MAP = {
48
+ top: "center",
49
+ bottom: "center",
50
+ left: "center",
51
+ right: "center",
52
+ "top-start": "start",
53
+ "top-end": "end",
54
+ "bottom-start": "start",
55
+ "bottom-end": "end",
56
+ "left-start": "start",
57
+ "left-end": "end",
58
+ "right-start": "start",
59
+ "right-end": "end",
60
+ auto: "center",
61
+ };
62
+ // ---------------------------------------------------------------------------
63
+ // Component
64
+ // ---------------------------------------------------------------------------
65
+ const Tooltip = React.forwardRef(({ content, children, disabled = false, position = "auto", interactive = false, hideAfter = -1, hideOnTargetExit = false, className, delayDuration = 0, defaultOpen,
66
+ // Radix TooltipContent props forwarded
67
+ ...contentProps }, ref) => {
68
+ const [open, setOpen] = React.useState(false);
69
+ const triggerRef = React.useRef(null);
70
+ // Merge external ref with internal trigger ref
71
+ const setTriggerRef = React.useCallback((node) => {
72
+ triggerRef.current = node;
73
+ if (typeof ref === "function")
74
+ ref(node);
75
+ else if (ref)
76
+ ref.current =
77
+ node;
78
+ }, [ref]);
79
+ // Auto-hide after hideAfter ms
80
+ React.useEffect(() => {
81
+ if (!open || hideAfter <= 0)
82
+ return;
83
+ const timer = setTimeout(() => setOpen(false), hideAfter);
84
+ return () => clearTimeout(timer);
85
+ }, [open, hideAfter]);
86
+ // Hide tooltip when trigger exits viewport
87
+ React.useEffect(() => {
88
+ if (!hideOnTargetExit || !open || !triggerRef.current)
89
+ return;
90
+ const observer = new IntersectionObserver(([entry]) => {
91
+ if (!entry.isIntersecting)
92
+ setOpen(false);
93
+ });
94
+ observer.observe(triggerRef.current);
95
+ return () => observer.disconnect();
96
+ }, [hideOnTargetExit, open]);
97
+ if (disabled || !content) {
98
+ return jsxRuntime.jsx(jsxRuntime.Fragment, { children: children });
99
+ }
100
+ const side = SIDE_MAP[position] ?? "top";
101
+ const align = ALIGN_MAP[position] ?? "center";
102
+ // Wrap non-element children in a span so TooltipTrigger can attach
103
+ const trigger = React__default.default.isValidElement(children) ? (children) : (jsxRuntime.jsx("span", { children: children }));
104
+ return (jsxRuntime.jsx(primitives_Tooltip.TooltipProvider, { delayDuration: delayDuration, children: jsxRuntime.jsxs(primitives_Tooltip.Tooltip, { open: open, onOpenChange: setOpen, defaultOpen: defaultOpen, disableHoverableContent: !interactive, children: [jsxRuntime.jsx(primitives_Tooltip.TooltipTrigger, { ref: setTriggerRef, asChild: true, children: trigger }), jsxRuntime.jsx(primitives_Tooltip.TooltipContent, { side: side, align: align, className: className, onPointerDownOutside: interactive ? e => e.preventDefault() : undefined, ...contentProps, children: content })] }) }));
105
+ });
106
+ Tooltip.displayName = "Tooltip";
107
+
108
+ exports.Tooltip = Tooltip;
109
+ //# sourceMappingURL=Tooltip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../../src/components/Tooltip.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\n\nimport {\n Tooltip as PrimitiveTooltip,\n TooltipContent,\n TooltipProvider,\n TooltipTrigger,\n} from \"src/primitives/Tooltip\";\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\ntype TooltipPosition =\n | \"top\"\n | \"bottom\"\n | \"left\"\n | \"right\"\n | \"top-start\"\n | \"top-end\"\n | \"bottom-start\"\n | \"bottom-end\"\n | \"left-start\"\n | \"left-end\"\n | \"right-start\"\n | \"right-end\"\n | \"auto\";\n\n/** Radix Tooltip.Content props we forward via ...otherProps. */\ntype TooltipContentProps = React.ComponentProps<typeof TooltipContent>;\n\nexport interface TooltipProps extends Omit<\n TooltipContentProps,\n \"children\" | \"className\" | \"side\" | \"align\" | \"content\"\n> {\n /** Content rendered inside the tooltip popup. */\n content?: ReactNode;\n /** The trigger element. */\n children?: ReactNode;\n /** Disable the tooltip. */\n disabled?: boolean;\n /** Placement of the tooltip relative to the trigger. */\n position?: TooltipPosition;\n /** Whether the tooltip stays open when hovered over. */\n interactive?: boolean;\n /** Auto-hide after N milliseconds. Use -1 to disable. */\n hideAfter?: number;\n /** Auto-hide the tooltip when the trigger scrolls out of the viewport. */\n hideOnTargetExit?: boolean;\n /** Additional CSS class names for the tooltip content. */\n className?: string;\n /** Delay in ms before the tooltip opens (forwarded to TooltipProvider). */\n delayDuration?: number;\n /** Radix Tooltip `defaultOpen` prop. */\n defaultOpen?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Position mapping\n// ---------------------------------------------------------------------------\n\nconst SIDE_MAP: Record<string, \"top\" | \"right\" | \"bottom\" | \"left\"> = {\n top: \"top\",\n bottom: \"bottom\",\n left: \"left\",\n right: \"right\",\n \"top-start\": \"top\",\n \"top-end\": \"top\",\n \"bottom-start\": \"bottom\",\n \"bottom-end\": \"bottom\",\n \"left-start\": \"left\",\n \"left-end\": \"left\",\n \"right-start\": \"right\",\n \"right-end\": \"right\",\n auto: \"top\",\n};\n\nconst ALIGN_MAP: Record<string, \"start\" | \"center\" | \"end\"> = {\n top: \"center\",\n bottom: \"center\",\n left: \"center\",\n right: \"center\",\n \"top-start\": \"start\",\n \"top-end\": \"end\",\n \"bottom-start\": \"start\",\n \"bottom-end\": \"end\",\n \"left-start\": \"start\",\n \"left-end\": \"end\",\n \"right-start\": \"start\",\n \"right-end\": \"end\",\n auto: \"center\",\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nconst Tooltip = forwardRef<HTMLButtonElement, TooltipProps>(\n (\n {\n content,\n children,\n disabled = false,\n position = \"auto\",\n interactive = false,\n hideAfter = -1,\n hideOnTargetExit = false,\n className,\n delayDuration = 0,\n defaultOpen,\n // Radix TooltipContent props forwarded\n ...contentProps\n },\n ref\n ) => {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Merge external ref with internal trigger ref\n const setTriggerRef = useCallback(\n (node: HTMLButtonElement | null) => {\n triggerRef.current = node;\n if (typeof ref === \"function\") ref(node);\n else if (ref)\n (ref as React.MutableRefObject<HTMLButtonElement | null>).current =\n node;\n },\n [ref]\n );\n\n // Auto-hide after hideAfter ms\n useEffect(() => {\n if (!open || hideAfter <= 0) return;\n const timer = setTimeout(() => setOpen(false), hideAfter);\n return () => clearTimeout(timer);\n }, [open, hideAfter]);\n\n // Hide tooltip when trigger exits viewport\n useEffect(() => {\n if (!hideOnTargetExit || !open || !triggerRef.current) return;\n const observer = new IntersectionObserver(([entry]) => {\n if (!entry.isIntersecting) setOpen(false);\n });\n observer.observe(triggerRef.current);\n return () => observer.disconnect();\n }, [hideOnTargetExit, open]);\n\n if (disabled || !content) {\n return <>{children}</>;\n }\n\n const side = SIDE_MAP[position] ?? \"top\";\n const align = ALIGN_MAP[position] ?? \"center\";\n\n // Wrap non-element children in a span so TooltipTrigger can attach\n const trigger = React.isValidElement(children) ? (\n children\n ) : (\n <span>{children}</span>\n );\n\n return (\n <TooltipProvider delayDuration={delayDuration}>\n <PrimitiveTooltip\n open={open}\n onOpenChange={setOpen}\n defaultOpen={defaultOpen}\n disableHoverableContent={!interactive}\n >\n <TooltipTrigger ref={setTriggerRef} asChild>\n {trigger}\n </TooltipTrigger>\n <TooltipContent\n side={side}\n align={align}\n className={className}\n onPointerDownOutside={\n interactive ? e => e.preventDefault() : undefined\n }\n {...contentProps}\n >\n {content}\n </TooltipContent>\n </PrimitiveTooltip>\n </TooltipProvider>\n );\n }\n);\n\nTooltip.displayName = \"Tooltip\";\n\nexport { Tooltip };\n"],"names":["forwardRef","useState","useRef","useCallback","useEffect","_jsx","_Fragment","React","TooltipProvider","_jsxs","PrimitiveTooltip","TooltipTrigger","TooltipContent"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgEA;AACA;AACA;AAEA,MAAM,QAAQ,GAAwD;AACpE,IAAA,GAAG,EAAE,KAAK;AACV,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,MAAM;AACZ,IAAA,KAAK,EAAE,OAAO;AACd,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,cAAc,EAAE,QAAQ;AACxB,IAAA,YAAY,EAAE,QAAQ;AACtB,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,UAAU,EAAE,MAAM;AAClB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,IAAI,EAAE,KAAK;CACZ;AAED,MAAM,SAAS,GAA+C;AAC5D,IAAA,GAAG,EAAE,QAAQ;AACb,IAAA,MAAM,EAAE,QAAQ;AAChB,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,KAAK,EAAE,QAAQ;AACf,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,SAAS,EAAE,KAAK;AAChB,IAAA,cAAc,EAAE,OAAO;AACvB,IAAA,YAAY,EAAE,KAAK;AACnB,IAAA,YAAY,EAAE,OAAO;AACrB,IAAA,UAAU,EAAE,KAAK;AACjB,IAAA,aAAa,EAAE,OAAO;AACtB,IAAA,WAAW,EAAE,KAAK;AAClB,IAAA,IAAI,EAAE,QAAQ;CACf;AAED;AACA;AACA;AAEA,MAAM,OAAO,GAAGA,gBAAU,CACxB,CACE,EACE,OAAO,EACP,QAAQ,EACR,QAAQ,GAAG,KAAK,EAChB,QAAQ,GAAG,MAAM,EACjB,WAAW,GAAG,KAAK,EACnB,SAAS,GAAG,EAAE,EACd,gBAAgB,GAAG,KAAK,EACxB,SAAS,EACT,aAAa,GAAG,CAAC,EACjB,WAAW;AACX;AACA,GAAG,YAAY,EAChB,EACD,GAAG,KACD;IACF,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,GAAGC,cAAQ,CAAC,KAAK,CAAC;AACvC,IAAA,MAAM,UAAU,GAAGC,YAAM,CAAqB,IAAI,CAAC;;AAGnD,IAAA,MAAM,aAAa,GAAGC,iBAAW,CAC/B,CAAC,IAA8B,KAAI;AACjC,QAAA,UAAU,CAAC,OAAO,GAAG,IAAI;QACzB,IAAI,OAAO,GAAG,KAAK,UAAU;YAAE,GAAG,CAAC,IAAI,CAAC;AACnC,aAAA,IAAI,GAAG;AACT,YAAA,GAAwD,CAAC,OAAO;AAC/D,gBAAA,IAAI;AACV,IAAA,CAAC,EACD,CAAC,GAAG,CAAC,CACN;;IAGDC,eAAS,CAAC,MAAK;AACb,QAAA,IAAI,CAAC,IAAI,IAAI,SAAS,IAAI,CAAC;YAAE;AAC7B,QAAA,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,SAAS,CAAC;AACzD,QAAA,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC;AAClC,IAAA,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;;IAGrBA,eAAS,CAAC,MAAK;QACb,IAAI,CAAC,gBAAgB,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO;YAAE;QACvD,MAAM,QAAQ,GAAG,IAAI,oBAAoB,CAAC,CAAC,CAAC,KAAK,CAAC,KAAI;YACpD,IAAI,CAAC,KAAK,CAAC,cAAc;gBAAE,OAAO,CAAC,KAAK,CAAC;AAC3C,QAAA,CAAC,CAAC;AACF,QAAA,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC;AACpC,QAAA,OAAO,MAAM,QAAQ,CAAC,UAAU,EAAE;AACpC,IAAA,CAAC,EAAE,CAAC,gBAAgB,EAAE,IAAI,CAAC,CAAC;AAE5B,IAAA,IAAI,QAAQ,IAAI,CAAC,OAAO,EAAE;QACxB,OAAOC,cAAA,CAAAC,mBAAA,EAAA,EAAA,QAAA,EAAG,QAAQ,EAAA,CAAI;IACxB;IAEA,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,KAAK;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,QAAQ;;IAG7C,MAAM,OAAO,GAAGC,sBAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,IAC5C,QAAQ,KAERF,cAAA,CAAA,MAAA,EAAA,EAAA,QAAA,EAAO,QAAQ,EAAA,CAAQ,CACxB;AAED,IAAA,QACEA,cAAA,CAACG,kCAAe,EAAA,EAAC,aAAa,EAAE,aAAa,EAAA,QAAA,EAC3CC,eAAA,CAACC,0BAAgB,IACf,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,OAAO,EACrB,WAAW,EAAE,WAAW,EACxB,uBAAuB,EAAE,CAAC,WAAW,EAAA,QAAA,EAAA,CAErCL,cAAA,CAACM,iCAAc,EAAA,EAAC,GAAG,EAAE,aAAa,EAAE,OAAO,EAAA,IAAA,EAAA,QAAA,EACxC,OAAO,EAAA,CACO,EACjBN,cAAA,CAACO,iCAAc,IACb,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAClB,WAAW,GAAG,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,GAAG,SAAS,EAAA,GAE/C,YAAY,EAAA,QAAA,EAEf,OAAO,GACO,CAAA,EAAA,CACA,EAAA,CACH;AAEtB,CAAC;AAGH,OAAO,CAAC,WAAW,GAAG,SAAS;;;;"}
@@ -31,12 +31,12 @@ const typographyVariants = index$1.cva("", {
31
31
  variants: {
32
32
  variant: {
33
33
  jumbo: "text-5xl font-semibold leading-none tracking-tight",
34
- h1: "text-[32px] font-semibold leading-tight tracking-tight",
35
- h2: "text-2xl font-semibold leading-tight tracking-tight",
36
- h3: "text-xl font-semibold leading-tight tracking-tight",
37
- h4: "text-base font-semibold leading-tight",
38
- h5: "text-[15px] font-semibold leading-tight",
39
- h6: "text-sm font-semibold leading-tight",
34
+ h1: "text-[40px] font-semibold leading-tight tracking-tight",
35
+ h2: "text-[32px] font-semibold leading-tight tracking-tight",
36
+ h3: "text-[28px] font-semibold leading-tight tracking-tight",
37
+ h4: "text-2xl font-semibold leading-tight",
38
+ h5: "text-xl font-semibold leading-tight",
39
+ h6: "text-lg font-semibold leading-tight",
40
40
  body1: "text-base leading-normal",
41
41
  body2: "text-[15px] leading-normal",
42
42
  body3: "text-sm leading-normal",
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Typography.js","sources":["../../../../src/shadcn/components/typography.tsx","../../../../src/components/Typography.tsx"],"sourcesContent":["import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\nimport { Slot } from \"radix-ui\"\n\nimport { cn } from \"src/shadcn/lib/utils\"\n\nconst typographyVariants = cva(\"\", {\n variants: {\n variant: {\n jumbo:\n \"text-5xl font-semibold leading-none tracking-tight\",\n h1: \"text-[40px] font-semibold leading-tight tracking-tight\",\n h2: \"text-[32px] font-semibold leading-tight tracking-tight\",\n h3: \"text-[28px] font-semibold leading-tight tracking-tight\",\n h4: \"text-2xl font-semibold leading-tight\",\n h5: \"text-xl font-semibold leading-tight\",\n h6: \"text-lg font-semibold leading-tight\",\n body1: \"text-base leading-normal\",\n body2: \"text-[15px] leading-normal\",\n body3: \"text-sm leading-normal\",\n caption: \"text-xs leading-normal\",\n nano: \"text-[10px] leading-normal\",\n code: \"font-mono text-sm\",\n },\n weight: {\n thin: \"font-thin\",\n extralight: \"font-extralight\",\n light: \"font-light\",\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n bold: \"font-bold\",\n extrabold: \"font-extrabold\",\n black: \"font-black\",\n },\n color: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n destructive: \"text-destructive\",\n inherit: \"text-inherit\",\n },\n lineClamp: {\n none: \"\",\n 1: \"line-clamp-1\",\n 2: \"line-clamp-2\",\n 3: \"line-clamp-3\",\n },\n },\n defaultVariants: {\n variant: \"body3\",\n color: \"default\",\n },\n})\n\nconst defaultElementMap: Record<\n string,\n keyof React.JSX.IntrinsicElements\n> = {\n jumbo: \"h1\",\n h1: \"h1\",\n h2: \"h2\",\n h3: \"h3\",\n h4: \"h4\",\n h5: \"h5\",\n h6: \"h6\",\n body1: \"p\",\n body2: \"p\",\n body3: \"p\",\n caption: \"span\",\n nano: \"span\",\n code: \"code\",\n}\n\nconst Typography = React.forwardRef<\n HTMLElement,\n React.ComponentProps<\"p\"> &\n VariantProps<typeof typographyVariants> & {\n asChild?: boolean\n }\n>(\n (\n {\n className,\n variant = \"body3\",\n weight,\n color = \"default\",\n lineClamp,\n asChild = false,\n ...props\n },\n ref\n ) => {\n const Comp = asChild\n ? Slot.Root\n : defaultElementMap[variant ?? \"body3\"] ?? \"p\"\n\n return (\n <Comp\n ref={ref}\n data-slot=\"typography\"\n data-variant={variant}\n className={cn(\n typographyVariants({ variant, weight, color, lineClamp, className })\n )}\n {...props}\n />\n )\n }\n)\n\nTypography.displayName = \"Typography\"\n\nexport { Typography, typographyVariants }\n","import { forwardRef, type ComponentProps } from \"react\";\nimport { Typography as ShadcnTypography } from \"src/shadcn/components/typography\";\n\nconst Typography = forwardRef<\n HTMLElement,\n ComponentProps<typeof ShadcnTypography>\n>((props, ref) => <ShadcnTypography ref={ref} {...props} />);\n\nTypography.displayName = \"Typography\";\n\nexport { Typography };\nexport { typographyVariants } from \"src/shadcn/components/typography\";\n"],"names":["cva","Typography","React","Slot.Root","_jsx","cn","forwardRef","ShadcnTypography"],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+
3
+ function isOptionGroup(opt) {
4
+ return "options" in opt && Array.isArray(opt.options);
5
+ }
6
+
7
+ exports.isOptionGroup = isOptionGroup;
8
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sources":["../../../../src/components/shared.types.ts"],"sourcesContent":["export interface OptionBase {\n /** Display text for the option. */\n label: string;\n /** Unique value for the option. */\n value: string;\n /** Whether the option is disabled. */\n disabled?: boolean;\n}\n\nexport interface OptionGroup {\n /** Group heading text. */\n label: string;\n /** Options within this group. */\n options: OptionBase[];\n}\n\nexport type Option = OptionBase | OptionGroup;\n\nexport function isOptionGroup(opt: Option): opt is OptionGroup {\n return \"options\" in opt && Array.isArray(opt.options);\n}\n"],"names":[],"mappings":";;AAkBM,SAAU,aAAa,CAAC,GAAW,EAAA;AACvC,IAAA,OAAO,SAAS,IAAI,GAAG,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;AACvD;;;;"}