@vritti/quantum-ui 0.3.12 → 0.3.15

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 (508) hide show
  1. package/dist/ActivePoints.js.map +1 -1
  2. package/dist/ActiveShapeUtils.js.map +1 -1
  3. package/dist/Alert.js +1 -1
  4. package/dist/Alert.js.map +1 -1
  5. package/dist/AreaChart.js.map +1 -1
  6. package/dist/Avatar.js +1 -1
  7. package/dist/Avatar.js.map +1 -1
  8. package/dist/Badge2.js +2 -2
  9. package/dist/BarChart.js.map +1 -1
  10. package/dist/BillingCycleSelector.js +37 -0
  11. package/dist/BillingCycleSelector.js.map +1 -0
  12. package/dist/Breadcrumb.js +1 -1
  13. package/dist/Breadcrumb.js.map +1 -1
  14. package/dist/Button.js +1 -1
  15. package/dist/Button.js.map +1 -1
  16. package/dist/Button2.js +2 -2
  17. package/dist/CardSkeleton.js.map +1 -1
  18. package/dist/CartesianChart.js.map +1 -1
  19. package/dist/CategoryFilter.js +6 -4
  20. package/dist/CategoryFilter.js.map +1 -1
  21. package/dist/Chart.js +53 -55
  22. package/dist/Chart.js.map +1 -1
  23. package/dist/Checkbox.js.map +1 -1
  24. package/dist/Checkbox2.js +4 -4
  25. package/dist/CheckboxGroup.js.map +1 -1
  26. package/dist/Collapsible.js.map +1 -1
  27. package/dist/Combination.js +1129 -0
  28. package/dist/Combination.js.map +1 -0
  29. package/dist/CompanySelector.js +20 -0
  30. package/dist/CompanySelector.js.map +1 -0
  31. package/dist/ConfirmHost.js.map +1 -1
  32. package/dist/CopyField.js +71 -0
  33. package/dist/CopyField.js.map +1 -0
  34. package/dist/CountrySelector.js +37 -0
  35. package/dist/CountrySelector.js.map +1 -0
  36. package/dist/CurrencyField.js +1 -0
  37. package/dist/CurrencyField.js.map +1 -1
  38. package/dist/CustomerSelector.js +2 -2
  39. package/dist/CustomerSelector.js.map +1 -1
  40. package/dist/DangerZoneSkeleton.js +21 -3
  41. package/dist/DangerZoneSkeleton.js.map +1 -1
  42. package/dist/DatePicker.js +3 -3
  43. package/dist/DatePicker.js.map +1 -1
  44. package/dist/DateTimePicker.js +2 -2
  45. package/dist/DetailSectionSkeleton.js.map +1 -1
  46. package/dist/Dialog.js.map +1 -1
  47. package/dist/DropdownMenu.js.map +1 -1
  48. package/dist/ErrorBarContext.js.map +1 -1
  49. package/dist/FeaturePermissionSelector.js +37 -0
  50. package/dist/FeaturePermissionSelector.js.map +1 -0
  51. package/dist/Form.js.map +1 -1
  52. package/dist/FormSection.js +4 -4
  53. package/dist/FormSection.js.map +1 -1
  54. package/dist/HierarchyGraph.js +5 -10621
  55. package/dist/HierarchyGraph.js.map +1 -1
  56. package/dist/ISOCountrySelect.js +283 -0
  57. package/dist/ISOCountrySelect.js.map +1 -0
  58. package/dist/IconSelect.js +3 -2
  59. package/dist/IconSelect.js.map +1 -1
  60. package/dist/InventoryItemSelector.js +2 -2
  61. package/dist/InventoryItemSelector.js.map +1 -1
  62. package/dist/Kbd.js +1 -1
  63. package/dist/Kbd.js.map +1 -1
  64. package/dist/Label.js +1 -1
  65. package/dist/LayoutModeContext.js.map +1 -1
  66. package/dist/LegalEntitySelector.js +37 -0
  67. package/dist/LegalEntitySelector.js.map +1 -0
  68. package/dist/LineChart.js.map +1 -1
  69. package/dist/LocationSelector.js +2 -2
  70. package/dist/LocationSelector.js.map +1 -1
  71. package/dist/LotSelector.js +2 -2
  72. package/dist/LotSelector.js.map +1 -1
  73. package/dist/OTPField.js.map +1 -1
  74. package/dist/PageContent.js.map +1 -1
  75. package/dist/PageHeaderSkeleton.js +21 -10
  76. package/dist/PageHeaderSkeleton.js.map +1 -1
  77. package/dist/PasswordField.js.map +1 -1
  78. package/dist/PermissionGate.js +49 -5
  79. package/dist/PermissionGate.js.map +1 -1
  80. package/dist/PersonSelector.js +20 -0
  81. package/dist/PersonSelector.js.map +1 -0
  82. package/dist/PhoneField.js.map +1 -1
  83. package/dist/PieChart.js.map +1 -1
  84. package/dist/PolarChart.js.map +1 -1
  85. package/dist/PurchaseOrderSelector.js +2 -2
  86. package/dist/PurchaseOrderSelector.js.map +1 -1
  87. package/dist/QuantSelector.js +2 -2
  88. package/dist/QuantSelector.js.map +1 -1
  89. package/dist/RadarChart.js.map +1 -1
  90. package/dist/RadialChart.js.map +1 -1
  91. package/dist/RadioGroup.js +6 -6
  92. package/dist/RadioGroup.js.map +1 -1
  93. package/dist/RoleSelector.js +20 -0
  94. package/dist/RoleSelector.js.map +1 -0
  95. package/dist/Select.js +4 -1
  96. package/dist/Select.js.map +1 -1
  97. package/dist/SelectFilter.js.map +1 -1
  98. package/dist/Separator.js.map +1 -1
  99. package/dist/SerialSelector.js +2 -2
  100. package/dist/SerialSelector.js.map +1 -1
  101. package/dist/Sidebar.js +2 -2
  102. package/dist/Sidebar.js.map +1 -1
  103. package/dist/SingleSelect.js +2 -2
  104. package/dist/SingleSelect.js.map +1 -1
  105. package/dist/SiteGroupSelector.js +37 -0
  106. package/dist/SiteGroupSelector.js.map +1 -0
  107. package/dist/SiteSelector.js +37 -0
  108. package/dist/SiteSelector.js.map +1 -0
  109. package/dist/Sonner.js +1 -1
  110. package/dist/Sonner.js.map +1 -1
  111. package/dist/Sortable.js +4 -4417
  112. package/dist/Sortable.js.map +1 -1
  113. package/dist/StepProgressIndicator.js.map +1 -1
  114. package/dist/SupplierItemSelector.js +2 -2
  115. package/dist/SupplierItemSelector.js.map +1 -1
  116. package/dist/SupplierSelector.js +2 -2
  117. package/dist/SupplierSelector.js.map +1 -1
  118. package/dist/Switch.js +3 -3
  119. package/dist/Switch.js.map +1 -1
  120. package/dist/TabsSkeleton.js +101 -49
  121. package/dist/TabsSkeleton.js.map +1 -1
  122. package/dist/TaxClassSelector.js +20 -0
  123. package/dist/TaxClassSelector.js.map +1 -0
  124. package/dist/TextField.js.map +1 -1
  125. package/dist/ThemeContext.js.map +1 -1
  126. package/dist/ThemeToggle.js.map +1 -1
  127. package/dist/Toggle.js +1 -1
  128. package/dist/Toggle.js.map +1 -1
  129. package/dist/Tooltip.js.map +1 -1
  130. package/dist/Typography.js.map +1 -1
  131. package/dist/UomSelector.js +2 -2
  132. package/dist/UomSelector.js.map +1 -1
  133. package/dist/UploadFile.js.map +1 -1
  134. package/dist/assets/quantum-ui.css +44 -13
  135. package/dist/calendar2.js +1 -1
  136. package/dist/collapsible2.js +1 -1
  137. package/dist/components/CompanySelector.js +2 -0
  138. package/dist/components/CompanySelector.js.map +1 -0
  139. package/dist/components/CopyField.js +2 -0
  140. package/dist/components/CopyField.js.map +1 -0
  141. package/dist/components/FormattedDate.js +2 -2
  142. package/dist/components/HierarchyGraph.js +2 -1
  143. package/dist/components/HierarchyGraph.js.map +1 -1
  144. package/dist/components/PermissionGate.js +1 -1
  145. package/dist/components/PersonSelector.js +2 -0
  146. package/dist/components/PersonSelector.js.map +1 -0
  147. package/dist/components/ScanBarcodeButton.js.map +1 -1
  148. package/dist/components/TreeView.js +7 -7
  149. package/dist/components/TreeView.js.map +1 -1
  150. package/dist/copy.js +18 -0
  151. package/dist/copy.js.map +1 -0
  152. package/dist/core.esm.js +4025 -0
  153. package/dist/core.esm.js.map +1 -0
  154. package/dist/dropdown-menu.js +10 -10
  155. package/dist/field.js +1 -1
  156. package/dist/getClassNameFromUnknown.js.map +1 -1
  157. package/dist/getRadiusAndStrokeWidthFromDot.js.map +1 -1
  158. package/dist/getZIndexFromUnknown.js.map +1 -1
  159. package/dist/graphicalItemSelectors.js.map +1 -1
  160. package/dist/image-component.js.map +1 -1
  161. package/dist/index.js +16 -3
  162. package/dist/index.js.map +1 -1
  163. package/dist/index10.js +102 -1499
  164. package/dist/index10.js.map +1 -1
  165. package/dist/index11.js +1499 -37
  166. package/dist/index11.js.map +1 -1
  167. package/dist/index12.js +29 -477
  168. package/dist/index12.js.map +1 -1
  169. package/dist/index13.js +427 -231
  170. package/dist/index13.js.map +1 -1
  171. package/dist/index14.js +215 -1074
  172. package/dist/index14.js.map +1 -1
  173. package/dist/index15.js +1140 -14
  174. package/dist/index15.js.map +1 -1
  175. package/dist/index16.js +13 -19
  176. package/dist/index16.js.map +1 -1
  177. package/dist/index17.js +24 -172
  178. package/dist/index17.js.map +1 -1
  179. package/dist/index18.js +168 -175
  180. package/dist/index18.js.map +1 -1
  181. package/dist/index19.js +173 -201
  182. package/dist/index19.js.map +1 -1
  183. package/dist/index20.js +203 -69
  184. package/dist/index20.js.map +1 -1
  185. package/dist/index21.js +70 -211
  186. package/dist/index21.js.map +1 -1
  187. package/dist/index22.js +207 -117
  188. package/dist/index22.js.map +1 -1
  189. package/dist/index23.js +123 -71
  190. package/dist/index23.js.map +1 -1
  191. package/dist/index24.js +74 -11
  192. package/dist/index24.js.map +1 -1
  193. package/dist/index25.js +13 -1134
  194. package/dist/index25.js.map +1 -1
  195. package/dist/index26.js +1120 -219
  196. package/dist/index26.js.map +1 -1
  197. package/dist/index27.js +202 -2506
  198. package/dist/index27.js.map +1 -1
  199. package/dist/index28.js +2527 -23
  200. package/dist/index28.js.map +1 -1
  201. package/dist/index29.js +32 -4
  202. package/dist/index29.js.map +1 -1
  203. package/dist/index3.js +11543 -267
  204. package/dist/index3.js.map +1 -1
  205. package/dist/index30.js +3 -1124
  206. package/dist/index30.js.map +1 -1
  207. package/dist/index31.js +1 -1
  208. package/dist/index32.js +7 -7
  209. package/dist/index34.js +1 -1
  210. package/dist/index37.js +1 -1
  211. package/dist/index38.js +23 -43
  212. package/dist/index38.js.map +1 -1
  213. package/dist/index4.js +272 -132
  214. package/dist/index4.js.map +1 -1
  215. package/dist/index5.js +138 -388
  216. package/dist/index5.js.map +1 -1
  217. package/dist/index6.js +386 -7
  218. package/dist/index6.js.map +1 -1
  219. package/dist/index7.js +13 -92
  220. package/dist/index7.js.map +1 -1
  221. package/dist/index8.js +92 -43
  222. package/dist/index8.js.map +1 -1
  223. package/dist/index9.js +42 -102
  224. package/dist/index9.js.map +1 -1
  225. package/dist/lib/components/Alert/Alert.d.ts.map +1 -1
  226. package/dist/lib/components/Avatar/Avatar.d.ts.map +1 -1
  227. package/dist/lib/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
  228. package/dist/lib/components/Button/Button.d.ts.map +1 -1
  229. package/dist/lib/components/Card/CardSkeleton.d.ts.map +1 -1
  230. package/dist/lib/components/Checkbox/Checkbox.d.ts.map +1 -1
  231. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  232. package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
  233. package/dist/lib/components/CompanySelector/CompanySelector.d.ts +4 -0
  234. package/dist/lib/components/CompanySelector/CompanySelector.d.ts.map +1 -0
  235. package/dist/lib/components/CompanySelector/index.d.ts +2 -0
  236. package/dist/lib/components/CompanySelector/index.d.ts.map +1 -0
  237. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
  238. package/dist/lib/components/CopyField/CopyField.d.ts +10 -0
  239. package/dist/lib/components/CopyField/CopyField.d.ts.map +1 -0
  240. package/dist/lib/components/CopyField/index.d.ts +2 -0
  241. package/dist/lib/components/CopyField/index.d.ts.map +1 -0
  242. package/dist/lib/components/CurrencyField/CurrencyField.d.ts.map +1 -1
  243. package/dist/lib/components/DangerZone/DangerZone.d.ts +3 -1
  244. package/dist/lib/components/DangerZone/DangerZone.d.ts.map +1 -1
  245. package/dist/lib/components/DataTable/CompactTableSkeleton.d.ts.map +1 -1
  246. package/dist/lib/components/DataTable/DataTable.d.ts.map +1 -1
  247. package/dist/lib/components/DataTable/cells/cells.d.ts.map +1 -1
  248. package/dist/lib/components/DataTable/components/DataTableSelectionBar.d.ts.map +1 -1
  249. package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
  250. package/dist/lib/components/DataTable/hooks/useDataTable.d.ts.map +1 -1
  251. package/dist/lib/components/DataTable/store/store.d.ts.map +1 -1
  252. package/dist/lib/components/DataTable/types.d.ts.map +1 -1
  253. package/dist/lib/components/DatePicker/DatePicker.d.ts +2 -2
  254. package/dist/lib/components/DatePicker/DatePicker.d.ts.map +1 -1
  255. package/dist/lib/components/DetailField/DetailField.d.ts.map +1 -1
  256. package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -1
  257. package/dist/lib/components/DetailField/DetailSectionSkeleton.d.ts.map +1 -1
  258. package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
  259. package/dist/lib/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  260. package/dist/lib/components/DropdownMenu/types.d.ts.map +1 -1
  261. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
  262. package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
  263. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
  264. package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
  265. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
  266. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
  267. package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
  268. package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
  269. package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
  270. package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
  271. package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
  272. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
  273. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
  274. package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
  275. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
  276. package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
  277. package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
  278. package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
  279. package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
  280. package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
  281. package/dist/lib/components/Editor/shared/react-patches.d.ts.map +1 -1
  282. package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
  283. package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
  284. package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
  285. package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
  286. package/dist/lib/components/Editor/utils/collapsible.d.ts.map +1 -1
  287. package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
  288. package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
  289. package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
  290. package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
  291. package/dist/lib/components/Editor/utils/guard.d.ts.map +1 -1
  292. package/dist/lib/components/Editor/utils/set-floating-elem-position-for-link-editor.d.ts.map +1 -1
  293. package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
  294. package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
  295. package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
  296. package/dist/lib/components/Form/Form.d.ts.map +1 -1
  297. package/dist/lib/components/OTPField/OTPField.d.ts.map +1 -1
  298. package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
  299. package/dist/lib/components/PageHeader/PageHeader.d.ts.map +1 -1
  300. package/dist/lib/components/PasswordField/PasswordField.d.ts.map +1 -1
  301. package/dist/lib/components/PermissionGate/PermissionGate.d.ts +15 -4
  302. package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -1
  303. package/dist/lib/components/PermissionGate/index.d.ts +1 -1
  304. package/dist/lib/components/PermissionGate/index.d.ts.map +1 -1
  305. package/dist/lib/components/PersonSelector/PersonSelector.d.ts +4 -0
  306. package/dist/lib/components/PersonSelector/PersonSelector.d.ts.map +1 -0
  307. package/dist/lib/components/PersonSelector/index.d.ts +2 -0
  308. package/dist/lib/components/PersonSelector/index.d.ts.map +1 -0
  309. package/dist/lib/components/PhoneField/PhoneField.d.ts.map +1 -1
  310. package/dist/lib/components/RadioGroup/RadioGroup.d.ts.map +1 -1
  311. package/dist/lib/components/ScanBarcodeButton/ScanBarcodeButton.d.ts.map +1 -1
  312. package/dist/lib/components/Select/SelectFilter.d.ts.map +1 -1
  313. package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  314. package/dist/lib/components/Select/components/MultiSelect/MultiSelectFilter.d.ts.map +1 -1
  315. package/dist/lib/components/Select/components/SingleSelect/SingleSelect.d.ts.map +1 -1
  316. package/dist/lib/components/Select/components/SingleSelect/SingleSelectFilter.d.ts.map +1 -1
  317. package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
  318. package/dist/lib/components/Select/hooks/useSingleSelect.d.ts.map +1 -1
  319. package/dist/lib/components/Select/types.d.ts +1 -1
  320. package/dist/lib/components/Select/types.d.ts.map +1 -1
  321. package/dist/lib/components/Separator/Separator.d.ts.map +1 -1
  322. package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
  323. package/dist/lib/components/Sonner/Sonner.d.ts.map +1 -1
  324. package/dist/lib/components/Sonner/toast.d.ts.map +1 -1
  325. package/dist/lib/components/StepProgressIndicator/StepProgressIndicator.d.ts.map +1 -1
  326. package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
  327. package/dist/lib/components/Tabs/Tabs.d.ts +2 -0
  328. package/dist/lib/components/Tabs/Tabs.d.ts.map +1 -1
  329. package/dist/lib/components/Tabs/TabsSkeleton.d.ts.map +1 -1
  330. package/dist/lib/components/TextField/TextField.d.ts.map +1 -1
  331. package/dist/lib/components/ThemeToggle/ThemeToggle.d.ts.map +1 -1
  332. package/dist/lib/components/Toggle/Toggle.d.ts.map +1 -1
  333. package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -1
  334. package/dist/lib/components/TreeView/TreeView.d.ts.map +1 -1
  335. package/dist/lib/components/Typography/Typography.d.ts.map +1 -1
  336. package/dist/lib/components/UploadFile/UploadFile.d.ts.map +1 -1
  337. package/dist/lib/components/index.d.ts +3 -0
  338. package/dist/lib/components/index.d.ts.map +1 -1
  339. package/dist/lib/config/index.d.ts.map +1 -1
  340. package/dist/lib/context/LayoutModeContext.d.ts.map +1 -1
  341. package/dist/lib/context/ThemeContext.d.ts.map +1 -1
  342. package/dist/lib/hooks/useBUCurrency.d.ts.map +1 -1
  343. package/dist/lib/hooks/useBUTimezone.d.ts.map +1 -1
  344. package/dist/lib/hooks/useBarcodeScanner.d.ts.map +1 -1
  345. package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
  346. package/dist/lib/hooks/useSSE.d.ts.map +1 -1
  347. package/dist/lib/hooks/useTheme.d.ts.map +1 -1
  348. package/dist/lib/index.d.ts.map +1 -1
  349. package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts +12 -0
  350. package/dist/lib/selects/billing-cycle/BillingCycleFilter.d.ts.map +1 -0
  351. package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts +4 -0
  352. package/dist/lib/selects/billing-cycle/BillingCycleSelector.d.ts.map +1 -0
  353. package/dist/lib/selects/billing-cycle/index.d.ts +3 -0
  354. package/dist/lib/selects/billing-cycle/index.d.ts.map +1 -0
  355. package/dist/lib/selects/category/CategoryFilter.d.ts.map +1 -1
  356. package/dist/lib/selects/category/CategorySelector.d.ts.map +1 -1
  357. package/dist/lib/selects/cost-category/CostCategorySelector.d.ts.map +1 -1
  358. package/dist/lib/selects/country/CountryFilter.d.ts +12 -0
  359. package/dist/lib/selects/country/CountryFilter.d.ts.map +1 -0
  360. package/dist/lib/selects/country/CountrySelector.d.ts +4 -0
  361. package/dist/lib/selects/country/CountrySelector.d.ts.map +1 -0
  362. package/dist/lib/selects/country/index.d.ts +3 -0
  363. package/dist/lib/selects/country/index.d.ts.map +1 -0
  364. package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts +12 -0
  365. package/dist/lib/selects/feature-permission/FeaturePermissionFilter.d.ts.map +1 -0
  366. package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts +4 -0
  367. package/dist/lib/selects/feature-permission/FeaturePermissionSelector.d.ts.map +1 -0
  368. package/dist/lib/selects/feature-permission/index.d.ts +3 -0
  369. package/dist/lib/selects/feature-permission/index.d.ts.map +1 -0
  370. package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -1
  371. package/dist/lib/selects/index.d.ts +9 -0
  372. package/dist/lib/selects/index.d.ts.map +1 -1
  373. package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts +2 -2
  374. package/dist/lib/selects/inventory-item/InventoryItemSelector.d.ts.map +1 -1
  375. package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts +15 -0
  376. package/dist/lib/selects/iso-country/ISOCountrySelect.d.ts.map +1 -0
  377. package/dist/lib/selects/iso-country/index.d.ts +3 -0
  378. package/dist/lib/selects/iso-country/index.d.ts.map +1 -0
  379. package/dist/lib/selects/iso-country/iso-countries.d.ts +7 -0
  380. package/dist/lib/selects/iso-country/iso-countries.d.ts.map +1 -0
  381. package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts +12 -0
  382. package/dist/lib/selects/legal-entity/LegalEntityFilter.d.ts.map +1 -0
  383. package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts +4 -0
  384. package/dist/lib/selects/legal-entity/LegalEntitySelector.d.ts.map +1 -0
  385. package/dist/lib/selects/legal-entity/index.d.ts +3 -0
  386. package/dist/lib/selects/legal-entity/index.d.ts.map +1 -0
  387. package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
  388. package/dist/lib/selects/purchase-order/PurchaseOrderSelector.d.ts.map +1 -1
  389. package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
  390. package/dist/lib/selects/role/RoleSelector.d.ts +4 -0
  391. package/dist/lib/selects/role/RoleSelector.d.ts.map +1 -0
  392. package/dist/lib/selects/role/index.d.ts +2 -0
  393. package/dist/lib/selects/role/index.d.ts.map +1 -0
  394. package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
  395. package/dist/lib/selects/site/SiteFilter.d.ts +12 -0
  396. package/dist/lib/selects/site/SiteFilter.d.ts.map +1 -0
  397. package/dist/lib/selects/site/SiteSelector.d.ts +4 -0
  398. package/dist/lib/selects/site/SiteSelector.d.ts.map +1 -0
  399. package/dist/lib/selects/site/index.d.ts +3 -0
  400. package/dist/lib/selects/site/index.d.ts.map +1 -0
  401. package/dist/lib/selects/site-group/SiteGroupFilter.d.ts +12 -0
  402. package/dist/lib/selects/site-group/SiteGroupFilter.d.ts.map +1 -0
  403. package/dist/lib/selects/site-group/SiteGroupSelector.d.ts +4 -0
  404. package/dist/lib/selects/site-group/SiteGroupSelector.d.ts.map +1 -0
  405. package/dist/lib/selects/site-group/index.d.ts +3 -0
  406. package/dist/lib/selects/site-group/index.d.ts.map +1 -0
  407. package/dist/lib/selects/supplier/SupplierSelector.d.ts.map +1 -1
  408. package/dist/lib/selects/supplier-item/SupplierItemFilter.d.ts.map +1 -1
  409. package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
  410. package/dist/lib/selects/tax-class/TaxClassSelector.d.ts +4 -0
  411. package/dist/lib/selects/tax-class/TaxClassSelector.d.ts.map +1 -0
  412. package/dist/lib/selects/tax-class/index.d.ts +2 -0
  413. package/dist/lib/selects/tax-class/index.d.ts.map +1 -0
  414. package/dist/lib/theme/index.d.ts.map +1 -1
  415. package/dist/lib/types/catalog-resolver.d.ts +50 -17
  416. package/dist/lib/types/catalog-resolver.d.ts.map +1 -1
  417. package/dist/lib/utils/axios.d.ts.map +1 -1
  418. package/dist/lib/utils/cn.d.ts +3 -0
  419. package/dist/lib/utils/cn.d.ts.map +1 -0
  420. package/dist/lib/utils/dagre.d.ts +2 -0
  421. package/dist/lib/utils/dagre.d.ts.map +1 -0
  422. package/dist/lib/utils/dnd-kit/core.d.ts +2 -0
  423. package/dist/lib/utils/dnd-kit/core.d.ts.map +1 -0
  424. package/dist/lib/utils/dnd-kit/sortable.d.ts +2 -0
  425. package/dist/lib/utils/dnd-kit/sortable.d.ts.map +1 -0
  426. package/dist/lib/utils/dnd-kit/utilities.d.ts +2 -0
  427. package/dist/lib/utils/dnd-kit/utilities.d.ts.map +1 -0
  428. package/dist/lib/utils/formHelpers.d.ts.map +1 -1
  429. package/dist/lib/utils/format.d.ts.map +1 -1
  430. package/dist/lib/utils/permission-deps.d.ts +9 -0
  431. package/dist/lib/utils/permission-deps.d.ts.map +1 -0
  432. package/dist/lib/utils/react-flow.d.ts +2 -0
  433. package/dist/lib/utils/react-flow.d.ts.map +1 -0
  434. package/dist/lib/utils/zod.d.ts +9 -0
  435. package/dist/lib/utils/zod.d.ts.map +1 -1
  436. package/dist/polarScaleSelectors.js.map +1 -1
  437. package/dist/popover.js +1 -1
  438. package/dist/select2.js +1 -1
  439. package/dist/selects/billing-cycle.js +2 -0
  440. package/dist/selects/billing-cycle.js.map +1 -0
  441. package/dist/selects/cost-category.js +2 -2
  442. package/dist/selects/cost-category.js.map +1 -1
  443. package/dist/selects/country.js +2 -0
  444. package/dist/selects/country.js.map +1 -0
  445. package/dist/selects/feature-permission.js +2 -0
  446. package/dist/selects/feature-permission.js.map +1 -0
  447. package/dist/selects/iso-country.js +2 -0
  448. package/dist/selects/iso-country.js.map +1 -0
  449. package/dist/selects/legal-entity.js +2 -0
  450. package/dist/selects/legal-entity.js.map +1 -0
  451. package/dist/selects/purchase-order-item.js +1 -1
  452. package/dist/selects/purchase-order-item.js.map +1 -1
  453. package/dist/selects/role.js +2 -0
  454. package/dist/selects/role.js.map +1 -0
  455. package/dist/selects/site-group.js +2 -0
  456. package/dist/selects/site-group.js.map +1 -0
  457. package/dist/selects/site.js +2 -0
  458. package/dist/selects/site.js.map +1 -0
  459. package/dist/selects/tax-class.js +2 -0
  460. package/dist/selects/tax-class.js.map +1 -0
  461. package/dist/selects/tax-group.js +2 -2
  462. package/dist/selects/tax-group.js.map +1 -1
  463. package/dist/separator2.js +1 -1
  464. package/dist/sortable.esm.js +780 -0
  465. package/dist/sortable.esm.js.map +1 -0
  466. package/dist/theme/index.js.map +1 -1
  467. package/dist/toast.js +2 -26
  468. package/dist/toast.js.map +1 -1
  469. package/dist/tooltip2.js +1 -1
  470. package/dist/tooltipContext.js.map +1 -1
  471. package/dist/types/catalog-resolver.js +5 -2
  472. package/dist/types/catalog-resolver.js.map +1 -1
  473. package/dist/useBUTimezone.js.map +1 -1
  474. package/dist/useDataTable.js +58 -60
  475. package/dist/useDataTable.js.map +1 -1
  476. package/dist/useFormatters.js.map +1 -1
  477. package/dist/useTheme.js.map +1 -1
  478. package/dist/useTimer.js +2 -2
  479. package/dist/useTimer.js.map +1 -1
  480. package/dist/utilities.esm.js +333 -0
  481. package/dist/utilities.esm.js.map +1 -0
  482. package/dist/utils/axios.js +1 -1
  483. package/dist/utils/axios.js.map +1 -1
  484. package/dist/utils/cn.js +6 -0
  485. package/dist/utils/cn.js.map +1 -0
  486. package/dist/utils/currency.js +2 -2
  487. package/dist/utils/dagre.js +4 -0
  488. package/dist/utils/dagre.js.map +1 -0
  489. package/dist/utils/dnd-kit/core.js +2 -0
  490. package/dist/utils/dnd-kit/core.js.map +1 -0
  491. package/dist/utils/dnd-kit/sortable.js +2 -0
  492. package/dist/utils/dnd-kit/sortable.js.map +1 -0
  493. package/dist/utils/dnd-kit/utilities.js +2 -0
  494. package/dist/utils/dnd-kit/utilities.js.map +1 -0
  495. package/dist/utils/format.js +2 -2
  496. package/dist/utils/format.js.map +1 -1
  497. package/dist/utils/hotkeys.js +1 -1
  498. package/dist/utils/money.js +1 -1
  499. package/dist/utils/permission-deps.js +64 -0
  500. package/dist/utils/permission-deps.js.map +1 -0
  501. package/dist/utils/react-flow.js +2 -0
  502. package/dist/utils/react-flow.js.map +1 -0
  503. package/dist/utils/timezone.js +1 -1
  504. package/dist/utils/zod.js +11 -1
  505. package/dist/utils/zod.js.map +1 -1
  506. package/dist/youtube.js +15 -29
  507. package/dist/youtube.js.map +1 -1
  508. package/package.json +77 -1
package/dist/Form.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"Form.js","sources":["../lib/utils/formHelpers.ts","../lib/components/Form/Form.tsx"],"sourcesContent":["import type { FieldPath, FieldValues, UseFormReturn } from 'react-hook-form';\n\n/**\n * Field mapping configuration for API error to form field mapping\n */\nexport interface FieldMapping {\n [apiField: string]: string; // Maps API field names to form field names\n}\n\n/**\n * Axios error structure (or similar HTTP client error structure)\n */\ninterface AxiosLikeError {\n response?: {\n data?: unknown;\n };\n}\n\n/**\n * RFC 9457 field error structure\n */\nexport interface FieldError {\n field: string;\n message: string;\n}\n\n/**\n * API error structure with field-specific errors\n * Supports RFC 9457 Problem Details format\n */\nexport interface ApiErrorResponse {\n type?: string; // RFC 9457: URI reference identifying the problem type\n title?: string; // RFC 9457: Short human-readable summary\n status?: number; // RFC 9457: HTTP status code\n label?: string; // Root error heading displayed to the user\n detail?: string; // RFC 9457: Human-readable explanation\n instance?: string; // RFC 9457: URI reference for the specific occurrence\n errors?: FieldError[];\n}\n\n/**\n * Options for mapping API errors to form\n */\nexport interface MapApiErrorsOptions {\n /**\n * Field name mapping from API to form fields\n */\n fieldMapping?: FieldMapping;\n\n /**\n * Whether to set root error for general messages\n */\n setRootError?: boolean;\n}\n\n/**\n * Maps an RFC 9457 Problem Details API error response to react-hook-form errors.\n *\n * Root errors (`label`/`title` + `detail`) and field errors (`errors[]`) are\n * handled independently -- a single response can populate both the root error\n * alert and inline field errors at the same time.\n *\n * @param error - The error object from API response\n * @param form - The react-hook-form instance\n * @param options - Mapping options\n *\n * @example\n * ```tsx\n * try {\n * await api.post('/login', data);\n * } catch (error) {\n * mapApiErrorsToForm(error.response?.data, form, {\n * fieldMapping: {\n * 'email_address': 'email',\n * 'password_hash': 'password'\n * }\n * });\n * }\n * ```\n */\nexport function mapApiErrorsToForm<TFieldValues extends FieldValues = FieldValues>(\n error: unknown,\n form: UseFormReturn<TFieldValues>,\n options: MapApiErrorsOptions = {},\n): void {\n const { fieldMapping = {}, setRootError = true } = options;\n\n if (!error || typeof error !== 'object') {\n if (setRootError) {\n form.setError('root', {\n type: 'Error',\n message: 'An error occurred',\n });\n }\n return;\n }\n\n // Extract error data from axios response structure\n const axiosError = error as AxiosLikeError;\n const errorData = axiosError.response?.data || error;\n const apiError = errorData as ApiErrorResponse;\n\n // Extract title/label for error heading (RFC 9457)\n const errorTitle = apiError.label || apiError.title || 'Error';\n const generalMessage = apiError.detail;\n\n // Map field-specific errors (field is always present in RFC 9457)\n let mappedFieldErrorsCount = 0;\n if (apiError.errors && Array.isArray(apiError.errors)) {\n for (const errorItem of apiError.errors) {\n const formField = fieldMapping[errorItem.field] || errorItem.field;\n\n form.setError(formField as FieldPath<TFieldValues>, {\n type: 'manual',\n message: errorItem.message,\n });\n mappedFieldErrorsCount += 1;\n }\n }\n\n // Root error is shown only when no field errors are present\n if (generalMessage && setRootError && mappedFieldErrorsCount === 0) {\n form.setError('root', {\n type: errorTitle,\n message: generalMessage,\n });\n }\n}\n","import type { UseMutationResult } from '@tanstack/react-query';\nimport type React from 'react';\nimport { Children, cloneElement, Fragment, isValidElement, useCallback } from 'react';\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n type UseFormReturn,\n} from 'react-hook-form';\nimport type { Country } from 'react-phone-number-input';\nimport { cn } from '../../../shadcn/utils';\nimport { axios } from '../../utils/axios';\nimport { type FieldMapping, mapApiErrorsToForm } from '../../utils/formHelpers';\nimport { Alert } from '../Alert';\nimport { Button } from '../Button';\nimport { Checkbox } from '../Checkbox';\nimport { CheckboxGroup } from '../CheckboxGroup';\nimport { DatePicker } from '../DatePicker';\nimport { DateTimePicker } from '../DateTimePicker';\nimport { PhoneField } from '../PhoneField';\nimport { RadioGroup } from '../RadioGroup';\nimport { Switch } from '../Switch';\nimport { UploadFile } from '../UploadFile';\n\n// Re-export Controller for explicit usage\nexport { Controller } from 'react-hook-form';\n\n/**\n * Recursively process children to wrap form fields with Controller\n * and inject loading state into submit buttons\n */\nfunction processChildren<\n TFieldValues extends FieldValues = FieldValues,\n _TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n>(\n children: React.ReactNode,\n control: ControllerProps<TFieldValues, FieldPath<TFieldValues>, TTransformedValues>['control'],\n isSubmitting: boolean,\n setValue: UseFormReturn<TFieldValues, _TContext, TTransformedValues>['setValue'],\n onCancel?: () => void,\n reset?: UseFormReturn<TFieldValues, _TContext, TTransformedValues>['reset'],\n): React.ReactNode {\n return Children.map(children, (child) => {\n // Handle non-element children (strings, numbers, null, etc.)\n if (!isValidElement(child)) {\n return child;\n }\n\n const childProps = child.props as any;\n const isFragment = child.type === Fragment;\n\n // Handle form fields with name prop (but not Fragments)\n if (!isFragment && childProps.name && typeof childProps.name === 'string') {\n const name = childProps.name as FieldPath<TFieldValues>;\n\n return (\n <Controller\n key={name}\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n // Check if this is a Checkbox, Switch, RadioGroup, or CheckboxGroup component\n const isCheckbox = child.type === Checkbox;\n const isSwitch = child.type === Switch;\n const isRadioGroup = child.type === RadioGroup;\n const isCheckboxGroup = child.type === CheckboxGroup;\n const isPhone = child.type === PhoneField;\n const isDatePicker = child.type === DatePicker;\n const isDateTimePicker = child.type === DateTimePicker;\n\n const fieldProps =\n isCheckbox || isSwitch\n ? {\n checked: field.value,\n onCheckedChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isRadioGroup || isCheckboxGroup\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n }\n : isDatePicker\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isDateTimePicker\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isPhone\n ? {\n ...field,\n onCountryChange: (country: Country | undefined) => {\n setValue(`${name}Country` as FieldPath<TFieldValues>, country as any);\n },\n }\n : field;\n\n const isUploadFile = child.type === UploadFile;\n\n return cloneElement(child, {\n ...childProps,\n ...fieldProps,\n error: fieldState.error?.message || (fieldState.error ? 'Invalid' : undefined),\n name: undefined, // Remove name to avoid passing it to the underlying input\n ...(isUploadFile ? { isLoading: isSubmitting } : {}),\n });\n }}\n />\n );\n }\n\n // Handle cancel buttons - wire up form.reset() + onCancel callback\n if (childProps['data-cancel'] && onCancel && reset) {\n return cloneElement(child, {\n ...childProps,\n onClick: () => {\n reset();\n onCancel();\n },\n });\n }\n\n // Handle submit buttons - inject loading state via isLoading prop\n if (childProps.type === 'submit') {\n const isButtonElement =\n child.type === Button || (typeof child.type === 'function' && (child.type as any).displayName === 'Button');\n\n if (isButtonElement) {\n return cloneElement(child, {\n ...childProps,\n isLoading: isSubmitting,\n });\n }\n }\n\n // Handle React Fragments - process their children directly\n if (isFragment) {\n return processChildren(childProps.children, control, isSubmitting, setValue, onCancel, reset);\n }\n\n // Recurse into children for container elements (divs, FieldGroups, etc.)\n if (childProps.children != null) {\n return cloneElement(child, {\n ...childProps,\n children: processChildren(childProps.children, control, isSubmitting, setValue, onCancel, reset),\n });\n }\n\n // Return unchanged if no name prop and no children\n return child;\n });\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = any,\n> extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n /**\n * The react-hook-form form instance\n */\n form: UseFormReturn<TFieldValues, TContext, TTransformedValues>;\n\n /**\n * Form submit handler - receives the transformed values if transformation is applied.\n * Optional when using `mutation` prop.\n */\n onSubmit?: Parameters<UseFormReturn<TFieldValues, TContext, TTransformedValues>['handleSubmit']>[0];\n\n /**\n * Children elements - automatically wrapped with Controller if they have a name prop\n */\n children: React.ReactNode;\n\n /**\n * Position of the root error display\n * @default 'bottom'\n */\n rootErrorPosition?: 'top' | 'bottom';\n\n /**\n * Additional classes for the root error display\n */\n rootErrorClassName?: string;\n\n /**\n * Action element rendered in the root error Alert (e.g. button or link)\n * Positioned in the top-right corner using AlertAction\n */\n rootErrorAction?: React.ReactNode;\n\n /**\n * Field mapping for automatic API error mapping\n * Maps API field names to form field names\n */\n fieldMapping?: FieldMapping;\n\n /**\n * TanStack Query mutation for automatic handling.\n * When provided, the form will use `mutateAsync` to submit data and handle errors automatically.\n * The mutation's own callbacks (onSuccess, onError, etc.) will fire automatically.\n * Form only adds `mapApiErrorsToForm` as an extra error handling layer.\n * Optional - you can use `onSubmit` instead for forms that don't use mutations.\n */\n mutation?: UseMutationResult<TMutationData, TMutationError, TMutationVariables, unknown>;\n\n /**\n * Transform form data to mutation variables before submission.\n * Only used when `mutation` prop is provided.\n */\n transformSubmit?: (\n data: TTransformedValues extends undefined ? TFieldValues : TTransformedValues,\n ) => TMutationVariables;\n\n /**\n * Automatically calls form.reset() after a successful mutation.\n * Set to false for \"edit\" forms where resetting clears pre-populated values.\n * @default true\n */\n resetOnSuccess?: boolean;\n\n /**\n * Called when a cancel button (marked with data-cancel) is clicked.\n * Form.reset() is called automatically before invoking this callback.\n */\n onCancel?: () => void;\n}\n\n/**\n * Smart Form component that automatically wraps children with Controller\n *\n * Usage with onSubmit:\n * ```tsx\n * <Form form={form} onSubmit={handleSubmit}>\n * <TextField name=\"email\" label=\"Email\" description=\"Your email address\" />\n * <PasswordField name=\"password\" label=\"Password\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n *\n * Usage with TanStack Query mutation:\n * ```tsx\n * const mutation = useMutation({\n * mutationFn: (data) => api.post('/login', data),\n * onSuccess: (data) => console.log('Success!', data),\n * onError: (error) => console.error('Error!', error),\n * });\n *\n * <Form\n * form={form}\n * mutation={mutation}\n * transformSubmit={(data) => ({ ...data, timestamp: Date.now() })}\n * >\n * <TextField name=\"email\" label=\"Email\" />\n * <Button type=\"submit\">Submit</Button>\n * </Form>\n * ```\n */\nexport function Form<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = any,\n>({\n form,\n onSubmit,\n children,\n rootErrorPosition = 'bottom',\n rootErrorClassName,\n rootErrorAction,\n fieldMapping,\n mutation,\n transformSubmit,\n resetOnSuccess,\n onCancel,\n className,\n ...props\n}: FormProps<TFieldValues, TContext, TTransformedValues, TMutationData, TMutationError, TMutationVariables>) {\n // Compute isSubmitting from both form state and mutation state\n const isSubmitting = form.formState.isSubmitting || (mutation?.isPending ?? false);\n\n // Wrap the submit handler with automatic error mapping (always enabled)\n // Form only adds mapApiErrorsToForm - the mutation's own callbacks fire automatically\n const wrappedOnSubmit = useCallback(\n async (data: TTransformedValues extends undefined ? TFieldValues : TTransformedValues) => {\n // Suppress error toasts during form submission — Form handles errors inline\n const interceptorId = axios.interceptors.request.use((config) => ({\n ...config,\n showErrorToast: false,\n }));\n\n try {\n if (mutation) {\n const variables = transformSubmit ? transformSubmit(data) : data;\n // mutateAsync will trigger the mutation's onSuccess/onError callbacks\n await mutation.mutateAsync(variables as TMutationVariables);\n } else if (onSubmit) {\n await onSubmit(data as any);\n }\n\n // Reset form after successful submission (default: true)\n if (resetOnSuccess !== false) form.reset();\n } catch (error) {\n // Form's only job: map API errors to form fields\n // mapApiErrorsToForm handles axios error structure extraction internally\n mapApiErrorsToForm(error, form as any, {\n fieldMapping,\n });\n // Log error for debugging\n console.error('[Form Submission Error]', error);\n // Error is swallowed, not re-thrown (mutation's onError already fired)\n } finally {\n axios.interceptors.request.eject(interceptorId);\n }\n },\n [onSubmit, mutation, transformSubmit, fieldMapping, form, resetOnSuccess],\n );\n\n const handleSubmit = form.handleSubmit(wrappedOnSubmit as any);\n\n // Process children recursively to automatically wrap with Controller\n const processedChildren = processChildren(children, form.control, isSubmitting, form.setValue, onCancel, form.reset);\n\n const childArray = Children.toArray(processedChildren);\n const actionsIndex = childArray.findIndex(\n (child) => isValidElement(child) && (child.type as { displayName?: string })?.displayName === 'DialogActions',\n );\n const hasActions = actionsIndex !== -1;\n const bodyChildren = hasActions ? childArray.filter((_, index) => index !== actionsIndex) : processedChildren;\n const actions = hasActions ? childArray[actionsIndex] : null;\n\n const topError =\n rootErrorPosition === 'top' && form.formState.errors.root ? (\n <Alert\n variant=\"destructive\"\n title={form.formState.errors.root.type || 'Error'}\n description={form.formState.errors.root.message}\n action={rootErrorAction}\n className={cn('mb-4', rootErrorClassName)}\n />\n ) : null;\n const bottomError =\n rootErrorPosition === 'bottom' && form.formState.errors.root ? (\n <Alert\n variant=\"destructive\"\n title={form.formState.errors.root.type || 'Error'}\n description={form.formState.errors.root.message}\n action={rootErrorAction}\n className={cn('mt-4', rootErrorClassName)}\n />\n ) : null;\n\n return (\n <FormProvider {...form}>\n <form\n onSubmit={handleSubmit}\n className={cn(hasActions ? 'flex min-h-0 flex-1 flex-col' : 'space-y-4', className)}\n {...props}\n >\n {hasActions ? (\n <>\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto overscroll-contain px-6 py-4 [scrollbar-gutter:stable]\">\n {topError}\n {bodyChildren}\n {bottomError}\n </div>\n {actions}\n </>\n ) : (\n <>\n {topError}\n {processedChildren}\n {bottomError}\n </>\n )}\n </form>\n </FormProvider>\n );\n}\n\nForm.displayName = 'Form';\n"],"names":["Fragment"],"mappings":"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"}
1
+ {"version":3,"file":"Form.js","sources":["../lib/utils/formHelpers.ts","../lib/components/Form/Form.tsx"],"sourcesContent":["import type { FieldPath, FieldValues, UseFormReturn } from 'react-hook-form';\n\nexport interface FieldMapping {\n [apiField: string]: string;\n}\n\ninterface AxiosLikeError {\n response?: {\n data?: unknown;\n };\n}\n\nexport interface FieldError {\n field: string;\n message: string;\n}\n\nexport interface ApiErrorResponse {\n type?: string;\n title?: string;\n status?: number;\n label?: string;\n detail?: string;\n instance?: string;\n errors?: FieldError[];\n}\n\nexport interface MapApiErrorsOptions {\n fieldMapping?: FieldMapping;\n setRootError?: boolean;\n}\n\n// Maps an RFC 9457 Problem Details API error response to react-hook-form root + field errors.\nexport function mapApiErrorsToForm<TFieldValues extends FieldValues = FieldValues>(\n error: unknown,\n form: UseFormReturn<TFieldValues>,\n options: MapApiErrorsOptions = {},\n): void {\n const { fieldMapping = {}, setRootError = true } = options;\n\n if (!error || typeof error !== 'object') {\n if (setRootError) {\n form.setError('root', {\n type: 'Error',\n message: 'An error occurred',\n });\n }\n return;\n }\n\n // Extract error data from axios response structure\n const axiosError = error as AxiosLikeError;\n const errorData = axiosError.response?.data || error;\n const apiError = errorData as ApiErrorResponse;\n\n // Extract title/label for error heading (RFC 9457)\n const errorTitle = apiError.label || apiError.title || 'Error';\n const generalMessage = apiError.detail;\n\n // Map field-specific errors (field is always present in RFC 9457)\n let mappedFieldErrorsCount = 0;\n if (apiError.errors && Array.isArray(apiError.errors)) {\n for (const errorItem of apiError.errors) {\n const formField = fieldMapping[errorItem.field] || errorItem.field;\n\n form.setError(formField as FieldPath<TFieldValues>, {\n type: 'manual',\n message: errorItem.message,\n });\n mappedFieldErrorsCount += 1;\n }\n }\n\n // Root error is shown only when no field errors are present\n if (generalMessage && setRootError && mappedFieldErrorsCount === 0) {\n form.setError('root', {\n type: errorTitle,\n message: generalMessage,\n });\n }\n}\n","import type { UseMutationResult } from '@tanstack/react-query';\nimport type React from 'react';\nimport { Children, cloneElement, Fragment, isValidElement, useCallback } from 'react';\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n FormProvider,\n type UseFormReturn,\n} from 'react-hook-form';\nimport type { Country } from 'react-phone-number-input';\nimport { cn } from '../../../shadcn/utils';\nimport { axios } from '../../utils/axios';\nimport { type FieldMapping, mapApiErrorsToForm } from '../../utils/formHelpers';\nimport { Alert } from '../Alert';\nimport { Button } from '../Button';\nimport { Checkbox } from '../Checkbox';\nimport { CheckboxGroup } from '../CheckboxGroup';\nimport { DatePicker } from '../DatePicker';\nimport { DateTimePicker } from '../DateTimePicker';\nimport { PhoneField } from '../PhoneField';\nimport { RadioGroup } from '../RadioGroup';\nimport { Switch } from '../Switch';\nimport { UploadFile } from '../UploadFile';\n\n// Re-export Controller for explicit usage\nexport { Controller } from 'react-hook-form';\n\n// Recursively process children to wrap form fields with Controller and inject loading state into submit buttons\nfunction processChildren<\n TFieldValues extends FieldValues = FieldValues,\n _TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n>(\n children: React.ReactNode,\n control: ControllerProps<TFieldValues, FieldPath<TFieldValues>, TTransformedValues>['control'],\n isSubmitting: boolean,\n setValue: UseFormReturn<TFieldValues, _TContext, TTransformedValues>['setValue'],\n onCancel?: () => void,\n reset?: UseFormReturn<TFieldValues, _TContext, TTransformedValues>['reset'],\n): React.ReactNode {\n return Children.map(children, (child) => {\n // Handle non-element children (strings, numbers, null, etc.)\n if (!isValidElement(child)) {\n return child;\n }\n\n const childProps = child.props as any;\n const isFragment = child.type === Fragment;\n\n // Handle form fields with name prop (but not Fragments)\n if (!isFragment && childProps.name && typeof childProps.name === 'string') {\n const name = childProps.name as FieldPath<TFieldValues>;\n\n return (\n <Controller\n key={name}\n control={control}\n name={name}\n render={({ field, fieldState }) => {\n // Check if this is a Checkbox, Switch, RadioGroup, or CheckboxGroup component\n const isCheckbox = child.type === Checkbox;\n const isSwitch = child.type === Switch;\n const isRadioGroup = child.type === RadioGroup;\n const isCheckboxGroup = child.type === CheckboxGroup;\n const isPhone = child.type === PhoneField;\n const isDatePicker = child.type === DatePicker;\n const isDateTimePicker = child.type === DateTimePicker;\n\n const fieldProps =\n isCheckbox || isSwitch\n ? {\n checked: field.value,\n onCheckedChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isRadioGroup || isCheckboxGroup\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n }\n : isDatePicker\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isDateTimePicker\n ? {\n value: field.value,\n onValueChange: field.onChange,\n onBlur: field.onBlur,\n ref: field.ref,\n }\n : isPhone\n ? {\n ...field,\n onCountryChange: (country: Country | undefined) => {\n setValue(`${name}Country` as FieldPath<TFieldValues>, country as any);\n },\n }\n : field;\n\n const isUploadFile = child.type === UploadFile;\n\n return cloneElement(child, {\n ...childProps,\n ...fieldProps,\n error: fieldState.error?.message || (fieldState.error ? 'Invalid' : undefined),\n name: undefined, // Remove name to avoid passing it to the underlying input\n ...(isUploadFile ? { isLoading: isSubmitting } : {}),\n });\n }}\n />\n );\n }\n\n // Handle cancel buttons - wire up form.reset() + onCancel callback\n if (childProps['data-cancel'] && onCancel && reset) {\n return cloneElement(child, {\n ...childProps,\n onClick: () => {\n reset();\n onCancel();\n },\n });\n }\n\n // Handle submit buttons - inject loading state via isLoading prop\n if (childProps.type === 'submit') {\n const isButtonElement =\n child.type === Button || (typeof child.type === 'function' && (child.type as any).displayName === 'Button');\n\n if (isButtonElement) {\n return cloneElement(child, {\n ...childProps,\n isLoading: isSubmitting,\n });\n }\n }\n\n // Handle React Fragments - process their children directly\n if (isFragment) {\n return processChildren(childProps.children, control, isSubmitting, setValue, onCancel, reset);\n }\n\n // Recurse into children for container elements (divs, FieldGroups, etc.)\n if (childProps.children != null) {\n return cloneElement(child, {\n ...childProps,\n children: processChildren(childProps.children, control, isSubmitting, setValue, onCancel, reset),\n });\n }\n\n // Return unchanged if no name prop and no children\n return child;\n });\n}\n\nexport interface FormProps<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = any,\n> extends Omit<React.FormHTMLAttributes<HTMLFormElement>, 'onSubmit'> {\n form: UseFormReturn<TFieldValues, TContext, TTransformedValues>;\n\n onSubmit?: Parameters<UseFormReturn<TFieldValues, TContext, TTransformedValues>['handleSubmit']>[0];\n\n children: React.ReactNode;\n\n rootErrorPosition?: 'top' | 'bottom';\n\n rootErrorClassName?: string;\n\n rootErrorAction?: React.ReactNode;\n\n fieldMapping?: FieldMapping;\n\n mutation?: UseMutationResult<TMutationData, TMutationError, TMutationVariables, unknown>;\n\n transformSubmit?: (\n data: TTransformedValues extends undefined ? TFieldValues : TTransformedValues,\n ) => TMutationVariables;\n\n resetOnSuccess?: boolean;\n\n onCancel?: () => void;\n}\n\n// Smart Form component that automatically wraps children with Controller\nexport function Form<\n TFieldValues extends FieldValues = FieldValues,\n TContext = any,\n TTransformedValues extends FieldValues | undefined = TFieldValues,\n TMutationData = unknown,\n TMutationError = Error,\n TMutationVariables = any,\n>({\n form,\n onSubmit,\n children,\n rootErrorPosition = 'bottom',\n rootErrorClassName,\n rootErrorAction,\n fieldMapping,\n mutation,\n transformSubmit,\n resetOnSuccess,\n onCancel,\n className,\n ...props\n}: FormProps<TFieldValues, TContext, TTransformedValues, TMutationData, TMutationError, TMutationVariables>) {\n // Compute isSubmitting from both form state and mutation state\n const isSubmitting = form.formState.isSubmitting || (mutation?.isPending ?? false);\n\n // Wrap the submit handler with automatic error mapping; the mutation's own callbacks fire automatically\n const wrappedOnSubmit = useCallback(\n async (data: TTransformedValues extends undefined ? TFieldValues : TTransformedValues) => {\n // Suppress error toasts during form submission — Form handles errors inline\n const interceptorId = axios.interceptors.request.use((config) => ({\n ...config,\n showErrorToast: false,\n }));\n\n try {\n if (mutation) {\n const variables = transformSubmit ? transformSubmit(data) : data;\n // mutateAsync will trigger the mutation's onSuccess/onError callbacks\n await mutation.mutateAsync(variables as TMutationVariables);\n } else if (onSubmit) {\n await onSubmit(data as any);\n }\n\n // Reset form after successful submission (default: true)\n if (resetOnSuccess !== false) form.reset();\n } catch (error) {\n // Map API errors to form fields — mapApiErrorsToForm extracts the axios error structure internally\n mapApiErrorsToForm(error, form as any, {\n fieldMapping,\n });\n // Log error for debugging\n console.error('[Form Submission Error]', error);\n // Error is swallowed, not re-thrown (mutation's onError already fired)\n } finally {\n axios.interceptors.request.eject(interceptorId);\n }\n },\n [onSubmit, mutation, transformSubmit, fieldMapping, form, resetOnSuccess],\n );\n\n const handleSubmit = form.handleSubmit(wrappedOnSubmit as any);\n\n // Process children recursively to automatically wrap with Controller\n const processedChildren = processChildren(children, form.control, isSubmitting, form.setValue, onCancel, form.reset);\n\n const childArray = Children.toArray(processedChildren);\n const actionsIndex = childArray.findIndex(\n (child) => isValidElement(child) && (child.type as { displayName?: string })?.displayName === 'DialogActions',\n );\n const hasActions = actionsIndex !== -1;\n const bodyChildren = hasActions ? childArray.filter((_, index) => index !== actionsIndex) : processedChildren;\n const actions = hasActions ? childArray[actionsIndex] : null;\n\n const topError =\n rootErrorPosition === 'top' && form.formState.errors.root ? (\n <Alert\n variant=\"destructive\"\n title={form.formState.errors.root.type || 'Error'}\n description={form.formState.errors.root.message}\n action={rootErrorAction}\n className={cn('mb-4', rootErrorClassName)}\n />\n ) : null;\n const bottomError =\n rootErrorPosition === 'bottom' && form.formState.errors.root ? (\n <Alert\n variant=\"destructive\"\n title={form.formState.errors.root.type || 'Error'}\n description={form.formState.errors.root.message}\n action={rootErrorAction}\n className={cn('mt-4', rootErrorClassName)}\n />\n ) : null;\n\n return (\n <FormProvider {...form}>\n <form\n onSubmit={handleSubmit}\n className={cn(hasActions ? 'flex min-h-0 flex-1 flex-col' : 'space-y-4', className)}\n {...props}\n >\n {hasActions ? (\n <>\n <div className=\"min-h-0 flex-1 space-y-4 overflow-y-auto overscroll-contain px-6 py-4 [scrollbar-gutter:stable]\">\n {topError}\n {bodyChildren}\n {bottomError}\n </div>\n {actions}\n </>\n ) : (\n <>\n {topError}\n {processedChildren}\n {bottomError}\n </>\n )}\n </form>\n </FormProvider>\n );\n}\n\nForm.displayName = 'Form';\n"],"names":["Fragment"],"mappings":"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"}
@@ -10,11 +10,11 @@ function FormSection({
10
10
  contentClassName
11
11
  }) {
12
12
  return /* @__PURE__ */ jsxs("section", { className: cn("space-y-3", className), children: [
13
- /* @__PURE__ */ jsxs("div", { className: cn("space-y-1", headerClassName), children: [
14
- /* @__PURE__ */ jsx("h3", { className: "text-sm font-semibold text-foreground", children: title }),
15
- description ? /* @__PURE__ */ jsx("p", { className: "text-sm text-muted-foreground", children: description }) : null
13
+ /* @__PURE__ */ jsxs("div", { className: cn("border-b pb-2", headerClassName), children: [
14
+ /* @__PURE__ */ jsx("div", { className: "text-xs font-semibold uppercase tracking-widest text-muted-foreground", children: title }),
15
+ description ? /* @__PURE__ */ jsx("p", { className: "mt-1 text-sm text-muted-foreground", children: description }) : null
16
16
  ] }),
17
- /* @__PURE__ */ jsx("div", { className: cn(contentClassName), children })
17
+ /* @__PURE__ */ jsx("div", { className: cn(contentClassName ?? "grid grid-cols-2 gap-4"), children })
18
18
  ] });
19
19
  }
20
20
  FormSection.displayName = "FormSection";
@@ -1 +1 @@
1
- {"version":3,"file":"FormSection.js","sources":["../lib/components/Form/FormSection.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface FormSectionProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n}\n\nexport function FormSection({\n title,\n description,\n children,\n className,\n headerClassName,\n contentClassName,\n}: FormSectionProps) {\n return (\n <section className={cn('space-y-3', className)}>\n <div className={cn('space-y-1', headerClassName)}>\n <h3 className=\"text-sm font-semibold text-foreground\">{title}</h3>\n {description ? <p className=\"text-sm text-muted-foreground\">{description}</p> : null}\n </div>\n <div className={cn(contentClassName)}>{children}</div>\n </section>\n );\n}\n\nFormSection.displayName = 'FormSection';\n"],"names":[],"mappings":";;;AAYO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,4BACG,SAAA,EAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,eAAe,CAAA,EAC7C,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,IAAA,EAAA,EAAG,SAAA,EAAU,uCAAA,EAAyC,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC5D,8BAAc,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,+BAAA,EAAiC,uBAAY,CAAA,GAAO;AAAA,KAAA,EAClF,CAAA;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,gBAAgB,GAAI,QAAA,EAAS;AAAA,GAAA,EAClD,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;;"}
1
+ {"version":3,"file":"FormSection.js","sources":["../lib/components/Form/FormSection.tsx"],"sourcesContent":["import type React from 'react';\nimport { cn } from '../../../shadcn/utils';\n\nexport interface FormSectionProps {\n title: React.ReactNode;\n description?: React.ReactNode;\n children: React.ReactNode;\n className?: string;\n headerClassName?: string;\n contentClassName?: string;\n}\n\nexport function FormSection({\n title,\n description,\n children,\n className,\n headerClassName,\n contentClassName,\n}: FormSectionProps) {\n return (\n <section className={cn('space-y-3', className)}>\n <div className={cn('border-b pb-2', headerClassName)}>\n <div className=\"text-xs font-semibold uppercase tracking-widest text-muted-foreground\">{title}</div>\n {description ? <p className=\"mt-1 text-sm text-muted-foreground\">{description}</p> : null}\n </div>\n <div className={cn(contentClassName ?? 'grid grid-cols-2 gap-4')}>{children}</div>\n </section>\n );\n}\n\nFormSection.displayName = 'FormSection';\n"],"names":[],"mappings":";;;AAYO,SAAS,WAAA,CAAY;AAAA,EAC1B,KAAA;AAAA,EACA,WAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA;AAAA,EACA;AACF,CAAA,EAAqB;AACnB,EAAA,4BACG,SAAA,EAAA,EAAQ,SAAA,EAAW,EAAA,CAAG,WAAA,EAAa,SAAS,CAAA,EAC3C,QAAA,EAAA;AAAA,oBAAA,IAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAW,EAAA,CAAG,eAAA,EAAiB,eAAe,CAAA,EACjD,QAAA,EAAA;AAAA,sBAAA,GAAA,CAAC,KAAA,EAAA,EAAI,SAAA,EAAU,uEAAA,EAAyE,QAAA,EAAA,KAAA,EAAM,CAAA;AAAA,MAC7F,8BAAc,GAAA,CAAC,GAAA,EAAA,EAAE,SAAA,EAAU,oCAAA,EAAsC,uBAAY,CAAA,GAAO;AAAA,KAAA,EACvF,CAAA;AAAA,wBACC,KAAA,EAAA,EAAI,SAAA,EAAW,GAAG,gBAAA,IAAoB,wBAAwB,GAAI,QAAA,EAAS;AAAA,GAAA,EAC9E,CAAA;AAEJ;AAEA,WAAA,CAAY,WAAA,GAAc,aAAA;;;;"}