@vritti/quantum-ui 0.3.9 → 0.3.11

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 (453) hide show
  1. package/dist/Avatar.js +5 -5
  2. package/dist/BarChart.js +1 -9
  3. package/dist/BarChart.js.map +1 -1
  4. package/dist/Breadcrumb.js +1 -1
  5. package/dist/Breadcrumb.js.map +1 -1
  6. package/dist/Button.js +14 -6
  7. package/dist/Button.js.map +1 -1
  8. package/dist/Checkbox2.js +5 -5
  9. package/dist/CheckboxGroup.js +64 -6
  10. package/dist/CheckboxGroup.js.map +1 -1
  11. package/dist/Collapsible.js +1 -1
  12. package/dist/Collapsible.js.map +1 -1
  13. package/dist/ConfirmHost.js +5 -17
  14. package/dist/ConfirmHost.js.map +1 -1
  15. package/dist/CurrencyField.js +1 -1
  16. package/dist/CurrencyFilter.js.map +1 -1
  17. package/dist/DateRangePicker.js +4 -2
  18. package/dist/DateRangePicker.js.map +1 -1
  19. package/dist/DateTimePicker.js +1 -1
  20. package/dist/DateTimeRangePicker.js +4 -2
  21. package/dist/DateTimeRangePicker.js.map +1 -1
  22. package/dist/DetailSectionSkeleton.js +14 -1
  23. package/dist/DetailSectionSkeleton.js.map +1 -1
  24. package/dist/Dialog.js +1 -1
  25. package/dist/Dialog.js.map +1 -1
  26. package/dist/ErrorBoundary.js +1 -108
  27. package/dist/ErrorBoundary.js.map +1 -1
  28. package/dist/FilePreview.js +1 -145
  29. package/dist/FilePreview.js.map +1 -1
  30. package/dist/HierarchyGraph.js +12 -8
  31. package/dist/HierarchyGraph.js.map +1 -1
  32. package/dist/IconSelect.js +31393 -0
  33. package/dist/IconSelect.js.map +1 -0
  34. package/dist/Kbd.js +11 -19
  35. package/dist/Kbd.js.map +1 -1
  36. package/dist/LocationSelector.js +13 -15
  37. package/dist/LocationSelector.js.map +1 -1
  38. package/dist/OTPField.js +1 -12
  39. package/dist/OTPField.js.map +1 -1
  40. package/dist/PageContent.js.map +1 -1
  41. package/dist/PageHeaderSkeleton.js +1 -1
  42. package/dist/PageHeaderSkeleton.js.map +1 -1
  43. package/dist/PermissionGate.js +31 -0
  44. package/dist/PermissionGate.js.map +1 -0
  45. package/dist/PieChart.js.map +1 -1
  46. package/dist/Progress.js +2 -2
  47. package/dist/QuantSelector.js.map +1 -1
  48. package/dist/RadialChart.js.map +1 -1
  49. package/dist/RadioGroup.js +7 -7
  50. package/dist/Select.js +32 -188
  51. package/dist/Select.js.map +1 -1
  52. package/dist/SerialSelector.js +13 -15
  53. package/dist/SerialSelector.js.map +1 -1
  54. package/dist/Sidebar.js +8 -19
  55. package/dist/Sidebar.js.map +1 -1
  56. package/dist/Sonner.js +2 -17
  57. package/dist/Sonner.js.map +1 -1
  58. package/dist/SupplierItemSelector.js.map +1 -1
  59. package/dist/Switch.js +7 -5
  60. package/dist/Switch.js.map +1 -1
  61. package/dist/TabsSkeleton.js +2 -2
  62. package/dist/TabsSkeleton.js.map +1 -1
  63. package/dist/ThemeToggle.js +1 -41
  64. package/dist/ThemeToggle.js.map +1 -1
  65. package/dist/Toggle.js +1 -1
  66. package/dist/Tooltip.js +19 -0
  67. package/dist/Tooltip.js.map +1 -0
  68. package/dist/UomSelector.js +6 -1
  69. package/dist/UomSelector.js.map +1 -1
  70. package/dist/UploadFile.js +1 -35
  71. package/dist/UploadFile.js.map +1 -1
  72. package/dist/ValueFilter.js.map +1 -1
  73. package/dist/ViewTabs.js +1 -16
  74. package/dist/ViewTabs.js.map +1 -1
  75. package/dist/assets/quantum-ui.css +109 -4
  76. package/dist/calendar2.js +2 -13
  77. package/dist/calendar2.js.map +1 -1
  78. package/dist/check-check.js +18 -0
  79. package/dist/check-check.js.map +1 -0
  80. package/dist/chevron-left.js +15 -0
  81. package/dist/chevron-left.js.map +1 -0
  82. package/dist/circle-question-mark.js +19 -0
  83. package/dist/circle-question-mark.js.map +1 -0
  84. package/dist/circle-x.js +19 -0
  85. package/dist/circle-x.js.map +1 -0
  86. package/dist/circle.js +15 -0
  87. package/dist/circle.js.map +1 -0
  88. package/dist/components/DataTable.js +1 -1
  89. package/dist/components/DetailField.js +1 -1
  90. package/dist/components/FormattedDate.js.map +1 -1
  91. package/dist/components/PermissionGate.js +2 -0
  92. package/dist/components/PermissionGate.js.map +1 -0
  93. package/dist/components/RichTextEditor.js +1 -1
  94. package/dist/components/ScanBarcodeButton.js +1 -20
  95. package/dist/components/ScanBarcodeButton.js.map +1 -1
  96. package/dist/components/Switch.js +1 -1
  97. package/dist/components/Tooltip.js +2 -0
  98. package/dist/components/Tooltip.js.map +1 -0
  99. package/dist/components/TreeView.js +4 -4
  100. package/dist/dot.js +15 -0
  101. package/dist/dot.js.map +1 -0
  102. package/dist/dropdown-menu.js +11 -22
  103. package/dist/dropdown-menu.js.map +1 -1
  104. package/dist/file.js +148 -0
  105. package/dist/file.js.map +1 -0
  106. package/dist/globe.js +19 -0
  107. package/dist/globe.js.map +1 -0
  108. package/dist/icons.js +21 -0
  109. package/dist/icons.js.map +1 -0
  110. package/dist/image-component.js +37 -96
  111. package/dist/image-component.js.map +1 -1
  112. package/dist/index.js +7 -4
  113. package/dist/index.js.map +1 -1
  114. package/dist/index12.js +7 -7
  115. package/dist/index13.js +7 -7
  116. package/dist/index14.js +11 -11
  117. package/dist/index15.js +1 -1
  118. package/dist/index16.js +1 -1
  119. package/dist/index17.js +168 -175
  120. package/dist/index17.js.map +1 -1
  121. package/dist/index18.js +173 -201
  122. package/dist/index18.js.map +1 -1
  123. package/dist/index19.js +203 -69
  124. package/dist/index19.js.map +1 -1
  125. package/dist/index20.js +70 -211
  126. package/dist/index20.js.map +1 -1
  127. package/dist/index21.js +206 -116
  128. package/dist/index21.js.map +1 -1
  129. package/dist/index22.js +122 -70
  130. package/dist/index22.js.map +1 -1
  131. package/dist/index23.js +74 -11
  132. package/dist/index23.js.map +1 -1
  133. package/dist/index24.js +13 -1134
  134. package/dist/index24.js.map +1 -1
  135. package/dist/index25.js +1120 -219
  136. package/dist/index25.js.map +1 -1
  137. package/dist/index26.js +202 -2506
  138. package/dist/index26.js.map +1 -1
  139. package/dist/index27.js +2527 -23
  140. package/dist/index27.js.map +1 -1
  141. package/dist/index28.js +32 -4
  142. package/dist/index28.js.map +1 -1
  143. package/dist/index29.js +3 -1124
  144. package/dist/index29.js.map +1 -1
  145. package/dist/index30.js +1123 -35
  146. package/dist/index30.js.map +1 -1
  147. package/dist/index31.js +36 -310
  148. package/dist/index31.js.map +1 -1
  149. package/dist/index32.js +309 -7
  150. package/dist/index32.js.map +1 -1
  151. package/dist/index33.js +8 -30
  152. package/dist/index33.js.map +1 -1
  153. package/dist/index34.js +29 -59
  154. package/dist/index34.js.map +1 -1
  155. package/dist/index35.js +59 -10
  156. package/dist/index35.js.map +1 -1
  157. package/dist/index36.js +10 -35
  158. package/dist/index36.js.map +1 -1
  159. package/dist/index37.js +27 -36809
  160. package/dist/index37.js.map +1 -1
  161. package/dist/index38.js +35362 -70
  162. package/dist/index38.js.map +1 -1
  163. package/dist/index39.js +72 -187
  164. package/dist/index39.js.map +1 -1
  165. package/dist/index4.js +5 -5
  166. package/dist/index40.js +199 -0
  167. package/dist/index40.js.map +1 -0
  168. package/dist/lib/components/BarChart/BarChart.d.ts.map +1 -1
  169. package/dist/lib/components/Button/Button.d.ts +1 -0
  170. package/dist/lib/components/Button/Button.d.ts.map +1 -1
  171. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts +1 -0
  172. package/dist/lib/components/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
  173. package/dist/lib/components/Collapsible/Collapsible.d.ts.map +1 -1
  174. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts +3 -0
  175. package/dist/lib/components/ConfirmHost/ConfirmHost.d.ts.map +1 -1
  176. package/dist/lib/components/DataTable/components/RowActions.d.ts +1 -0
  177. package/dist/lib/components/DataTable/components/RowActions.d.ts.map +1 -1
  178. package/dist/lib/components/DataTable/index.d.ts +2 -2
  179. package/dist/lib/components/DataTable/index.d.ts.map +1 -1
  180. package/dist/lib/components/DateRangePicker/DateRangePicker.d.ts.map +1 -1
  181. package/dist/lib/components/DateTimeRangePicker/DateTimeRangePicker.d.ts.map +1 -1
  182. package/dist/lib/components/DetailField/DetailHeader.d.ts +10 -0
  183. package/dist/lib/components/DetailField/DetailHeader.d.ts.map +1 -0
  184. package/dist/lib/components/DetailField/index.d.ts +1 -0
  185. package/dist/lib/components/DetailField/index.d.ts.map +1 -1
  186. package/dist/lib/components/Dialog/Dialog.d.ts.map +1 -1
  187. package/dist/lib/components/Editor/context/editor-config-context.d.ts +2 -2
  188. package/dist/lib/components/Editor/context/editor-config-context.d.ts.map +1 -1
  189. package/dist/lib/components/Editor/context/toolbar-context.d.ts +1 -1
  190. package/dist/lib/components/Editor/context/toolbar-context.d.ts.map +1 -1
  191. package/dist/lib/components/Editor/editor-hooks/use-debounce.d.ts.map +1 -1
  192. package/dist/lib/components/Editor/editor-hooks/use-modal.d.ts.map +1 -1
  193. package/dist/lib/components/Editor/editor-hooks/use-update-toolbar.d.ts.map +1 -1
  194. package/dist/lib/components/Editor/editor-ui/button-group.d.ts +3 -3
  195. package/dist/lib/components/Editor/editor-ui/button-group.d.ts.map +1 -1
  196. package/dist/lib/components/Editor/editor-ui/button.d.ts +2 -2
  197. package/dist/lib/components/Editor/editor-ui/button.d.ts.map +1 -1
  198. package/dist/lib/components/Editor/editor-ui/code-button.d.ts.map +1 -1
  199. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts +8 -8
  200. package/dist/lib/components/Editor/editor-ui/color-picker.d.ts.map +1 -1
  201. package/dist/lib/components/Editor/editor-ui/command.d.ts +2 -2
  202. package/dist/lib/components/Editor/editor-ui/command.d.ts.map +1 -1
  203. package/dist/lib/components/Editor/editor-ui/content-editable.d.ts +1 -1
  204. package/dist/lib/components/Editor/editor-ui/content-editable.d.ts.map +1 -1
  205. package/dist/lib/components/Editor/editor-ui/dialog.d.ts +4 -4
  206. package/dist/lib/components/Editor/editor-ui/dialog.d.ts.map +1 -1
  207. package/dist/lib/components/Editor/editor-ui/image-component.d.ts +3 -3
  208. package/dist/lib/components/Editor/editor-ui/image-component.d.ts.map +1 -1
  209. package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts +2 -2
  210. package/dist/lib/components/Editor/editor-ui/image-resizer.d.ts.map +1 -1
  211. package/dist/lib/components/Editor/editor-ui/input.d.ts +2 -2
  212. package/dist/lib/components/Editor/editor-ui/input.d.ts.map +1 -1
  213. package/dist/lib/components/Editor/editor-ui/label.d.ts +2 -2
  214. package/dist/lib/components/Editor/editor-ui/label.d.ts.map +1 -1
  215. package/dist/lib/components/Editor/editor-ui/popover.d.ts +2 -2
  216. package/dist/lib/components/Editor/editor-ui/popover.d.ts.map +1 -1
  217. package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts +2 -2
  218. package/dist/lib/components/Editor/editor-ui/scroll-area.d.ts.map +1 -1
  219. package/dist/lib/components/Editor/editor-ui/select.d.ts +3 -3
  220. package/dist/lib/components/Editor/editor-ui/select.d.ts.map +1 -1
  221. package/dist/lib/components/Editor/editor-ui/separator.d.ts +2 -2
  222. package/dist/lib/components/Editor/editor-ui/separator.d.ts.map +1 -1
  223. package/dist/lib/components/Editor/editor-ui/tabs.d.ts +2 -2
  224. package/dist/lib/components/Editor/editor-ui/tabs.d.ts.map +1 -1
  225. package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts +2 -2
  226. package/dist/lib/components/Editor/editor-ui/toggle-group.d.ts.map +1 -1
  227. package/dist/lib/components/Editor/editor-ui/toggle.d.ts +2 -2
  228. package/dist/lib/components/Editor/editor-ui/toggle.d.ts.map +1 -1
  229. package/dist/lib/components/Editor/editor-ui/tooltip.d.ts +2 -2
  230. package/dist/lib/components/Editor/editor-ui/tooltip.d.ts.map +1 -1
  231. package/dist/lib/components/Editor/index.d.ts.map +1 -1
  232. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts +2 -2
  233. package/dist/lib/components/Editor/nodes/autocomplete-node.d.ts.map +1 -1
  234. package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts +2 -2
  235. package/dist/lib/components/Editor/nodes/embeds/tweet-node.d.ts.map +1 -1
  236. package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts +1 -1
  237. package/dist/lib/components/Editor/nodes/embeds/youtube-node.d.ts.map +1 -1
  238. package/dist/lib/components/Editor/nodes/emoji-node.d.ts.map +1 -1
  239. package/dist/lib/components/Editor/nodes/image-node.d.ts +5 -5
  240. package/dist/lib/components/Editor/nodes/image-node.d.ts.map +1 -1
  241. package/dist/lib/components/Editor/nodes/keyword-node.d.ts.map +1 -1
  242. package/dist/lib/components/Editor/nodes/layout-container-node.d.ts.map +1 -1
  243. package/dist/lib/components/Editor/nodes/layout-item-node.d.ts.map +1 -1
  244. package/dist/lib/components/Editor/nodes/mention-node.d.ts +1 -1
  245. package/dist/lib/components/Editor/nodes/mention-node.d.ts.map +1 -1
  246. package/dist/lib/components/Editor/nodes/nodes.d.ts.map +1 -1
  247. package/dist/lib/components/Editor/nodes.d.ts.map +1 -1
  248. package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts +2 -2
  249. package/dist/lib/components/Editor/plugins/actions/character-limit-plugin.d.ts.map +1 -1
  250. package/dist/lib/components/Editor/plugins/actions/clear-editor-plugin.d.ts.map +1 -1
  251. package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts +2 -2
  252. package/dist/lib/components/Editor/plugins/actions/counter-character-plugin.d.ts.map +1 -1
  253. package/dist/lib/components/Editor/plugins/actions/edit-mode-toggle-plugin.d.ts.map +1 -1
  254. package/dist/lib/components/Editor/plugins/actions/import-export-plugin.d.ts.map +1 -1
  255. package/dist/lib/components/Editor/plugins/actions/markdown-toggle-plugin.d.ts.map +1 -1
  256. package/dist/lib/components/Editor/plugins/actions/max-length-plugin.d.ts.map +1 -1
  257. package/dist/lib/components/Editor/plugins/actions/share-content-plugin.d.ts.map +1 -1
  258. package/dist/lib/components/Editor/plugins/actions/speech-to-text-plugin.d.ts.map +1 -1
  259. package/dist/lib/components/Editor/plugins/actions/tree-view-plugin.d.ts.map +1 -1
  260. package/dist/lib/components/Editor/plugins/auto-link-plugin.d.ts.map +1 -1
  261. package/dist/lib/components/Editor/plugins/autocomplete-plugin.d.ts.map +1 -1
  262. package/dist/lib/components/Editor/plugins/code-action-menu-plugin.d.ts.map +1 -1
  263. package/dist/lib/components/Editor/plugins/code-highlight-plugin.d.ts.map +1 -1
  264. package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts +1 -1
  265. package/dist/lib/components/Editor/plugins/component-picker-menu-plugin.d.ts.map +1 -1
  266. package/dist/lib/components/Editor/plugins/context-menu-plugin.d.ts.map +1 -1
  267. package/dist/lib/components/Editor/plugins/drag-drop-paste-plugin.d.ts.map +1 -1
  268. package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts +1 -1
  269. package/dist/lib/components/Editor/plugins/draggable-block-plugin.d.ts.map +1 -1
  270. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts +1 -1
  271. package/dist/lib/components/Editor/plugins/embeds/auto-embed-plugin.d.ts.map +1 -1
  272. package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts +1 -1
  273. package/dist/lib/components/Editor/plugins/embeds/twitter-plugin.d.ts.map +1 -1
  274. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts +1 -1
  275. package/dist/lib/components/Editor/plugins/embeds/youtube-plugin.d.ts.map +1 -1
  276. package/dist/lib/components/Editor/plugins/emoji-picker-plugin.d.ts.map +1 -1
  277. package/dist/lib/components/Editor/plugins/emojis-plugin.d.ts.map +1 -1
  278. package/dist/lib/components/Editor/plugins/floating-link-editor-plugin.d.ts.map +1 -1
  279. package/dist/lib/components/Editor/plugins/floating-text-format-plugin.d.ts.map +1 -1
  280. package/dist/lib/components/Editor/plugins/images-plugin.d.ts +4 -4
  281. package/dist/lib/components/Editor/plugins/images-plugin.d.ts.map +1 -1
  282. package/dist/lib/components/Editor/plugins/keywords-plugin.d.ts.map +1 -1
  283. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts +1 -1
  284. package/dist/lib/components/Editor/plugins/layout-plugin.d.ts.map +1 -1
  285. package/dist/lib/components/Editor/plugins/link-plugin.d.ts.map +1 -1
  286. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts +1 -1
  287. package/dist/lib/components/Editor/plugins/list-max-indent-level-plugin.d.ts.map +1 -1
  288. package/dist/lib/components/Editor/plugins/mentions-plugin.d.ts.map +1 -1
  289. package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts +2 -2
  290. package/dist/lib/components/Editor/plugins/picker/alignment-picker-plugin.d.ts.map +1 -1
  291. package/dist/lib/components/Editor/plugins/picker/bulleted-list-picker-plugin.d.ts.map +1 -1
  292. package/dist/lib/components/Editor/plugins/picker/check-list-picker-plugin.d.ts.map +1 -1
  293. package/dist/lib/components/Editor/plugins/picker/code-picker-plugin.d.ts.map +1 -1
  294. package/dist/lib/components/Editor/plugins/picker/columns-layout-picker-plugin.d.ts.map +1 -1
  295. package/dist/lib/components/Editor/plugins/picker/component-picker-menu-plugin.d.ts.map +1 -1
  296. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts +1 -1
  297. package/dist/lib/components/Editor/plugins/picker/component-picker-option.d.ts.map +1 -1
  298. package/dist/lib/components/Editor/plugins/picker/divider-picker-plugin.d.ts.map +1 -1
  299. package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts +2 -2
  300. package/dist/lib/components/Editor/plugins/picker/embeds-picker-plugin.d.ts.map +1 -1
  301. package/dist/lib/components/Editor/plugins/picker/heading-picker-plugin.d.ts.map +1 -1
  302. package/dist/lib/components/Editor/plugins/picker/image-picker-plugin.d.ts.map +1 -1
  303. package/dist/lib/components/Editor/plugins/picker/numbered-list-picker-plugin.d.ts.map +1 -1
  304. package/dist/lib/components/Editor/plugins/picker/paragraph-picker-plugin.d.ts.map +1 -1
  305. package/dist/lib/components/Editor/plugins/picker/quote-picker-plugin.d.ts.map +1 -1
  306. package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts +1 -1
  307. package/dist/lib/components/Editor/plugins/picker/table-picker-plugin.d.ts.map +1 -1
  308. package/dist/lib/components/Editor/plugins/plugins.d.ts +1 -1
  309. package/dist/lib/components/Editor/plugins/plugins.d.ts.map +1 -1
  310. package/dist/lib/components/Editor/plugins/tab-focus-plugin.d.ts.map +1 -1
  311. package/dist/lib/components/Editor/plugins/table-plugin.d.ts +2 -3
  312. package/dist/lib/components/Editor/plugins/table-plugin.d.ts.map +1 -1
  313. package/dist/lib/components/Editor/plugins/toolbar/block-format/block-format-data.d.ts.map +1 -1
  314. package/dist/lib/components/Editor/plugins/toolbar/block-format/format-heading.d.ts.map +1 -1
  315. package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts +1 -1
  316. package/dist/lib/components/Editor/plugins/toolbar/block-format-toolbar-plugin.d.ts.map +1 -1
  317. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-horizontal-rule.d.ts.map +1 -1
  318. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-image.d.ts.map +1 -1
  319. package/dist/lib/components/Editor/plugins/toolbar/block-insert/insert-table.d.ts.map +1 -1
  320. package/dist/lib/components/Editor/plugins/toolbar/block-insert-plugin.d.ts.map +1 -1
  321. package/dist/lib/components/Editor/plugins/toolbar/clear-formatting-toolbar-plugin.d.ts.map +1 -1
  322. package/dist/lib/components/Editor/plugins/toolbar/code-language-toolbar-plugin.d.ts.map +1 -1
  323. package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts +1 -1
  324. package/dist/lib/components/Editor/plugins/toolbar/element-format-toolbar-plugin.d.ts.map +1 -1
  325. package/dist/lib/components/Editor/plugins/toolbar/font-background-toolbar-plugin.d.ts.map +1 -1
  326. package/dist/lib/components/Editor/plugins/toolbar/font-color-toolbar-plugin.d.ts.map +1 -1
  327. package/dist/lib/components/Editor/plugins/toolbar/font-family-toolbar-plugin.d.ts.map +1 -1
  328. package/dist/lib/components/Editor/plugins/toolbar/font-format-toolbar-plugin.d.ts.map +1 -1
  329. package/dist/lib/components/Editor/plugins/toolbar/font-size-toolbar-plugin.d.ts.map +1 -1
  330. package/dist/lib/components/Editor/plugins/toolbar/history-toolbar-plugin.d.ts.map +1 -1
  331. package/dist/lib/components/Editor/plugins/toolbar/horizontal-rule-toolbar-plugin.d.ts.map +1 -1
  332. package/dist/lib/components/Editor/plugins/toolbar/image-toolbar-plugin.d.ts.map +1 -1
  333. package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts +1 -1
  334. package/dist/lib/components/Editor/plugins/toolbar/link-toolbar-plugin.d.ts.map +1 -1
  335. package/dist/lib/components/Editor/plugins/toolbar/subsuper-toolbar-plugin.d.ts.map +1 -1
  336. package/dist/lib/components/Editor/plugins/toolbar/table-toolbar-plugin.d.ts.map +1 -1
  337. package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts +1 -1
  338. package/dist/lib/components/Editor/plugins/toolbar/toolbar-plugin.d.ts.map +1 -1
  339. package/dist/lib/components/Editor/plugins/typing-pref-plugin.d.ts.map +1 -1
  340. package/dist/lib/components/Editor/plugins.d.ts.map +1 -1
  341. package/dist/lib/components/Editor/shared/can-use-dom.d.ts.map +1 -1
  342. package/dist/lib/components/Editor/shared/caret-from-point.d.ts.map +1 -1
  343. package/dist/lib/components/Editor/shared/environment.d.ts.map +1 -1
  344. package/dist/lib/components/Editor/shared/invariant.d.ts +1 -1
  345. package/dist/lib/components/Editor/shared/invariant.d.ts.map +1 -1
  346. package/dist/lib/components/Editor/shared/react-test-utils.d.ts +1 -1
  347. package/dist/lib/components/Editor/shared/react-test-utils.d.ts.map +1 -1
  348. package/dist/lib/components/Editor/shared/simple-diff-with-cursor.d.ts.map +1 -1
  349. package/dist/lib/components/Editor/shared/use-layout-effect.d.ts.map +1 -1
  350. package/dist/lib/components/Editor/themes/editor-theme.d.ts.map +1 -1
  351. package/dist/lib/components/Editor/transformers/index.d.ts +6 -6
  352. package/dist/lib/components/Editor/transformers/index.d.ts.map +1 -1
  353. package/dist/lib/components/Editor/transformers/markdown-emoji-transformer.d.ts.map +1 -1
  354. package/dist/lib/components/Editor/transformers/markdown-hr-transformer.d.ts.map +1 -1
  355. package/dist/lib/components/Editor/transformers/markdown-image-transformer.d.ts.map +1 -1
  356. package/dist/lib/components/Editor/transformers/markdown-table-transformer.d.ts.map +1 -1
  357. package/dist/lib/components/Editor/transformers/markdown-tweet-transformer.d.ts.map +1 -1
  358. package/dist/lib/components/Editor/types.d.ts.map +1 -1
  359. package/dist/lib/components/Editor/utils/can-use-dom.d.ts.map +1 -1
  360. package/dist/lib/components/Editor/utils/doc-serialization.d.ts.map +1 -1
  361. package/dist/lib/components/Editor/utils/emoji-list.d.ts.map +1 -1
  362. package/dist/lib/components/Editor/utils/get-dom-range-rect.d.ts.map +1 -1
  363. package/dist/lib/components/Editor/utils/get-selected-node.d.ts.map +1 -1
  364. package/dist/lib/components/Editor/utils/set-floating-elem-position.d.ts.map +1 -1
  365. package/dist/lib/components/Editor/utils/swipe.d.ts.map +1 -1
  366. package/dist/lib/components/Editor/utils/url.d.ts.map +1 -1
  367. package/dist/lib/components/FormattedDate/FormattedDate.d.ts.map +1 -1
  368. package/dist/lib/components/FormattedDate/index.d.ts +1 -1
  369. package/dist/lib/components/FormattedDate/index.d.ts.map +1 -1
  370. package/dist/lib/components/HierarchyGraph/HierarchyGraph.d.ts.map +1 -1
  371. package/dist/lib/components/Kbd/Kbd.d.ts.map +1 -1
  372. package/dist/lib/components/Kbd/index.d.ts +1 -1
  373. package/dist/lib/components/Kbd/index.d.ts.map +1 -1
  374. package/dist/lib/components/PageContent/PageContent.d.ts.map +1 -1
  375. package/dist/lib/components/PermissionGate/PermissionGate.d.ts +18 -0
  376. package/dist/lib/components/PermissionGate/PermissionGate.d.ts.map +1 -0
  377. package/dist/lib/components/PermissionGate/index.d.ts +2 -0
  378. package/dist/lib/components/PermissionGate/index.d.ts.map +1 -0
  379. package/dist/lib/components/PieChart/PieChart.d.ts.map +1 -1
  380. package/dist/lib/components/RadialChart/RadialChart.d.ts.map +1 -1
  381. package/dist/lib/components/Select/Select.d.ts.map +1 -1
  382. package/dist/lib/components/Select/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  383. package/dist/lib/components/Select/hooks/useSelect.d.ts +2 -1
  384. package/dist/lib/components/Select/hooks/useSelect.d.ts.map +1 -1
  385. package/dist/lib/components/Sidebar/Sidebar.d.ts +2 -0
  386. package/dist/lib/components/Sidebar/Sidebar.d.ts.map +1 -1
  387. package/dist/lib/components/Switch/Switch.d.ts +2 -0
  388. package/dist/lib/components/Switch/Switch.d.ts.map +1 -1
  389. package/dist/lib/components/Switch/index.d.ts +2 -2
  390. package/dist/lib/components/Switch/index.d.ts.map +1 -1
  391. package/dist/lib/components/Tooltip/Tooltip.d.ts +12 -0
  392. package/dist/lib/components/Tooltip/Tooltip.d.ts.map +1 -0
  393. package/dist/lib/components/Tooltip/index.d.ts +3 -0
  394. package/dist/lib/components/Tooltip/index.d.ts.map +1 -0
  395. package/dist/lib/components/ValueFilter/ValueFilter.d.ts.map +1 -1
  396. package/dist/lib/components/index.d.ts +5 -3
  397. package/dist/lib/components/index.d.ts.map +1 -1
  398. package/dist/lib/hooks/useFormatters.d.ts.map +1 -1
  399. package/dist/lib/icons/icon-names.json.d.ts +13731 -0
  400. package/dist/lib/icons/index.d.ts +4 -0
  401. package/dist/lib/icons/index.d.ts.map +1 -0
  402. package/dist/lib/selects/currency/CurrencyFilter.d.ts.map +1 -1
  403. package/dist/lib/selects/icon/IconSelect.d.ts +20 -0
  404. package/dist/lib/selects/icon/IconSelect.d.ts.map +1 -0
  405. package/dist/lib/selects/icon/index.d.ts +2 -0
  406. package/dist/lib/selects/icon/index.d.ts.map +1 -0
  407. package/dist/lib/selects/index.d.ts +3 -2
  408. package/dist/lib/selects/index.d.ts.map +1 -1
  409. package/dist/lib/selects/location/LocationSelector.d.ts.map +1 -1
  410. package/dist/lib/selects/location/index.d.ts +1 -1
  411. package/dist/lib/selects/location/index.d.ts.map +1 -1
  412. package/dist/lib/selects/purchase-order-item/PurchaseOrderItemSelector.d.ts.map +1 -1
  413. package/dist/lib/selects/quant/QuantSelector.d.ts.map +1 -1
  414. package/dist/lib/selects/serial/SerialSelector.d.ts.map +1 -1
  415. package/dist/lib/selects/supplier-item/SupplierItemSelector.d.ts.map +1 -1
  416. package/dist/lib/selects/uom/UomSelector.d.ts.map +1 -1
  417. package/dist/lib/utils/format.d.ts.map +1 -1
  418. package/dist/lib/utils/hotkeys.d.ts +1 -1
  419. package/dist/lib/utils/hotkeys.d.ts.map +1 -1
  420. package/dist/lib/utils/zod.d.ts.map +1 -1
  421. package/dist/lock-keyhole.js +19 -0
  422. package/dist/lock-keyhole.js.map +1 -0
  423. package/dist/panel-left.js +18 -0
  424. package/dist/panel-left.js.map +1 -0
  425. package/dist/scan-barcode.js +23 -0
  426. package/dist/scan-barcode.js.map +1 -0
  427. package/dist/selects/icon.js +2 -0
  428. package/dist/selects/icon.js.map +1 -0
  429. package/dist/selects/purchase-order-item.js.map +1 -1
  430. package/dist/shadcn/shadcnMultiSelect/multi-select.d.ts.map +1 -1
  431. package/dist/sun.js +44 -0
  432. package/dist/sun.js.map +1 -0
  433. package/dist/table-properties.js +351 -0
  434. package/dist/table-properties.js.map +1 -0
  435. package/dist/{tooltip.js → tooltip2.js} +1 -1
  436. package/dist/tooltip2.js.map +1 -0
  437. package/dist/{cells.js → useDataTable.js} +45 -381
  438. package/dist/useDataTable.js.map +1 -0
  439. package/dist/useFormatters.js.map +1 -1
  440. package/dist/user.js +38 -0
  441. package/dist/user.js.map +1 -0
  442. package/dist/utils/format.js +1 -0
  443. package/dist/utils/format.js.map +1 -1
  444. package/dist/utils/motion.js +2 -2
  445. package/dist/utils/zod.js.map +1 -1
  446. package/dist/value.js +1 -1
  447. package/dist/wifi-off.js +111 -0
  448. package/dist/wifi-off.js.map +1 -0
  449. package/dist/youtube.js +737 -0
  450. package/dist/youtube.js.map +1 -0
  451. package/package.json +19 -1
  452. package/dist/cells.js.map +0 -1
  453. package/dist/tooltip.js.map +0 -1
@@ -20,21 +20,19 @@ const SerialFilter = Object.assign(
20
20
  { displayName: "SerialFilter", defaultLabel: "Serial", defaultName: "serialId" }
21
21
  );
22
22
 
23
- const SerialSelector = forwardRef(
24
- ({ params, ...props }, ref) => /* @__PURE__ */ jsx(
25
- Select,
26
- {
27
- ref,
28
- label: "Serial",
29
- placeholder: "Select serial number",
30
- searchable: true,
31
- optionsEndpoint: "commerce-api/inventory-item-serials/select",
32
- params,
33
- fieldKeys: { valueKey: "id", labelKey: "serialNumber" },
34
- ...props
35
- }
36
- )
37
- );
23
+ const SerialSelector = forwardRef(({ params, ...props }, ref) => /* @__PURE__ */ jsx(
24
+ Select,
25
+ {
26
+ ref,
27
+ label: "Serial",
28
+ placeholder: "Select serial number",
29
+ searchable: true,
30
+ optionsEndpoint: "commerce-api/inventory-item-serials/select",
31
+ params,
32
+ fieldKeys: { valueKey: "id", labelKey: "serialNumber" },
33
+ ...props
34
+ }
35
+ ));
38
36
  SerialSelector.displayName = "SerialSelector";
39
37
 
40
38
  export { SerialFilter as S, SerialSelector as a };
@@ -1 +1 @@
1
- {"version":3,"file":"SerialSelector.js","sources":["../lib/selects/serial/SerialFilter.tsx","../lib/selects/serial/SerialSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SerialFilterParams = { quantId?: string };\n\nexport type SerialFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SerialFilterParams;\n};\n\n// Pre-configured SelectFilter for filtering serials within a quant\nexport const SerialFilter = Object.assign(\n forwardRef<HTMLButtonElement, SerialFilterProps>(({ params, ...props }, ref) => (\n <SelectFilter\n ref={ref}\n name=\"serialId\"\n label=\"Serial\"\n placeholder=\"Select serial\"\n optionsEndpoint=\"commerce-api/inventory-item-serials/select\"\n params={params}\n fieldKeys={{ valueKey: 'id', labelKey: 'serialNumber' }}\n {...props}\n />\n )),\n { displayName: 'SerialFilter', defaultLabel: 'Serial', defaultName: 'serialId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type SerialSelectorParams = { quantId?: string };\n\nexport type SerialSelectorProps = Omit<SelectProps, 'optionsEndpoint' | 'params'> & {\n params?: SerialSelectorParams;\n};\n\n// Pre-configured Select for picking specific physical serials within a quant.\n// Returns only AVAILABLE serials, scoped to the given quant.\nexport const SerialSelector = forwardRef<HTMLButtonElement, SerialSelectorProps>(\n ({ params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Serial\"\n placeholder=\"Select serial number\"\n searchable\n optionsEndpoint=\"commerce-api/inventory-item-serials/select\"\n params={params}\n fieldKeys={{ valueKey: 'id', labelKey: 'serialNumber' }}\n {...props}\n />\n ),\n);\nSerialSelector.displayName = 'SerialSelector';\n"],"names":[],"mappings":";;;;;AAWO,MAAM,eAAe,MAAA,CAAO,MAAA;AAAA,EACjC,WAAiD,CAAC,EAAE,QAAQ,GAAG,KAAA,IAAS,GAAA,qBACtE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,eAAA;AAAA,MACZ,eAAA,EAAgB,4CAAA;AAAA,MAChB,MAAA;AAAA,MACA,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,cAAA,EAAe;AAAA,MACrD,GAAG;AAAA;AAAA,GAEP,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,cAAA,EAAgB,YAAA,EAAc,QAAA,EAAU,aAAa,UAAA;AACtE;;ACdO,MAAM,cAAA,GAAiB,UAAA;AAAA,EAC5B,CAAC,EAAE,MAAA,EAAQ,GAAG,KAAA,IAAS,GAAA,qBACrB,GAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,sBAAA;AAAA,MACZ,UAAA,EAAU,IAAA;AAAA,MACV,eAAA,EAAgB,4CAAA;AAAA,MAChB,MAAA;AAAA,MACA,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,cAAA,EAAe;AAAA,MACrD,GAAG;AAAA;AAAA;AAGV;AACA,cAAA,CAAe,WAAA,GAAc,gBAAA;;;;"}
1
+ {"version":3,"file":"SerialSelector.js","sources":["../lib/selects/serial/SerialFilter.tsx","../lib/selects/serial/SerialSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\n\nexport type SerialFilterParams = { quantId?: string };\n\nexport type SerialFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SerialFilterParams;\n};\n\n// Pre-configured SelectFilter for filtering serials within a quant\nexport const SerialFilter = Object.assign(\n forwardRef<HTMLButtonElement, SerialFilterProps>(({ params, ...props }, ref) => (\n <SelectFilter\n ref={ref}\n name=\"serialId\"\n label=\"Serial\"\n placeholder=\"Select serial\"\n optionsEndpoint=\"commerce-api/inventory-item-serials/select\"\n params={params}\n fieldKeys={{ valueKey: 'id', labelKey: 'serialNumber' }}\n {...props}\n />\n )),\n { displayName: 'SerialFilter', defaultLabel: 'Serial', defaultName: 'serialId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\n\nexport type SerialSelectorParams = { quantId?: string };\n\nexport type SerialSelectorProps = Omit<SelectProps, 'optionsEndpoint' | 'params'> & {\n params?: SerialSelectorParams;\n};\n\n// Pre-configured Select for picking specific physical serials within a quant.\n// Returns only AVAILABLE serials, scoped to the given quant.\nexport const SerialSelector = forwardRef<HTMLButtonElement, SerialSelectorProps>(({ params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Serial\"\n placeholder=\"Select serial number\"\n searchable\n optionsEndpoint=\"commerce-api/inventory-item-serials/select\"\n params={params}\n fieldKeys={{ valueKey: 'id', labelKey: 'serialNumber' }}\n {...props}\n />\n));\nSerialSelector.displayName = 'SerialSelector';\n"],"names":[],"mappings":";;;;;AAWO,MAAM,eAAe,MAAA,CAAO,MAAA;AAAA,EACjC,WAAiD,CAAC,EAAE,QAAQ,GAAG,KAAA,IAAS,GAAA,qBACtE,GAAA;AAAA,IAAC,YAAA;AAAA,IAAA;AAAA,MACC,GAAA;AAAA,MACA,IAAA,EAAK,UAAA;AAAA,MACL,KAAA,EAAM,QAAA;AAAA,MACN,WAAA,EAAY,eAAA;AAAA,MACZ,eAAA,EAAgB,4CAAA;AAAA,MAChB,MAAA;AAAA,MACA,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,cAAA,EAAe;AAAA,MACrD,GAAG;AAAA;AAAA,GAEP,CAAA;AAAA,EACD,EAAE,WAAA,EAAa,cAAA,EAAgB,YAAA,EAAc,QAAA,EAAU,aAAa,UAAA;AACtE;;ACdO,MAAM,cAAA,GAAiB,WAAmD,CAAC,EAAE,QAAQ,GAAG,KAAA,IAAS,GAAA,qBACtG,GAAA;AAAA,EAAC,MAAA;AAAA,EAAA;AAAA,IACC,GAAA;AAAA,IACA,KAAA,EAAM,QAAA;AAAA,IACN,WAAA,EAAY,sBAAA;AAAA,IACZ,UAAA,EAAU,IAAA;AAAA,IACV,eAAA,EAAgB,4CAAA;AAAA,IAChB,MAAA;AAAA,IACA,SAAA,EAAW,EAAE,QAAA,EAAU,IAAA,EAAM,UAAU,cAAA,EAAe;AAAA,IACrD,GAAG;AAAA;AACN,CACD;AACD,cAAA,CAAe,WAAA,GAAc,gBAAA;;;;"}
package/dist/Sidebar.js CHANGED
@@ -5,28 +5,14 @@ import { c as cva } from './index8.js';
5
5
  import { forwardRef, useState, useCallback, useEffect, useMemo, useRef, createContext, useContext } from 'react';
6
6
  import { u as useIsMobile } from './useIsMobile.js';
7
7
  import { c as cn } from './utils.js';
8
- import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip.js';
9
- import { R as Root, P as Portal, C as Content, a as Close, b as Title, D as Description, O as Overlay } from './index31.js';
8
+ import { T as TooltipProvider, a as Tooltip, b as TooltipTrigger, c as TooltipContent } from './tooltip2.js';
9
+ import { R as Root, P as Portal, C as Content, a as Close, b as Title, D as Description, O as Overlay } from './index32.js';
10
10
  import { X } from './x.js';
11
11
  import { D as DropdownMenu, a as DropdownMenuTrigger, b as DropdownMenuContent, e as DropdownMenuLabel, c as DropdownMenuItem } from './dropdown-menu.js';
12
- import { c as createLucideIcon } from './createLucideIcon.js';
12
+ import { P as PanelLeft } from './panel-left.js';
13
13
  import { C as Collapsible, a as CollapsibleTrigger, b as CollapsibleContent } from './collapsible2.js';
14
14
  import { C as ChevronRight } from './chevron-right.js';
15
15
 
16
- /**
17
- * @license lucide-react v0.562.0 - ISC
18
- *
19
- * This source code is licensed under the ISC license.
20
- * See the LICENSE file in the root directory of this source tree.
21
- */
22
-
23
-
24
- const __iconNode = [
25
- ["rect", { width: "18", height: "18", x: "3", y: "3", rx: "2", key: "afitv7" }],
26
- ["path", { d: "M9 3v18", key: "fh3hqa" }]
27
- ];
28
- const PanelLeft = createLucideIcon("panel-left", __iconNode);
29
-
30
16
  const Sheet = Root;
31
17
  const SheetPortal = Portal;
32
18
  const SheetOverlay = forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx(
@@ -564,10 +550,13 @@ const FlatItem = ({ item, pathname, navigate }) => /* @__PURE__ */ jsx(SidebarMe
564
550
  {
565
551
  tooltip: item.title,
566
552
  isActive: pathname === item.path || pathname.startsWith(`${item.path}/`),
567
- onClick: () => navigate(item.path),
553
+ onClick: () => item.disabled ? void 0 : navigate(item.path),
554
+ "aria-disabled": item.disabled,
555
+ className: item.disabled ? "opacity-60" : void 0,
568
556
  children: [
569
557
  /* @__PURE__ */ jsx(item.icon, {}),
570
- /* @__PURE__ */ jsx("span", { children: item.title })
558
+ /* @__PURE__ */ jsx("span", { children: item.title }),
559
+ item.endAdornment && /* @__PURE__ */ jsx("span", { className: "ml-auto flex items-center", children: item.endAdornment })
571
560
  ]
572
561
  }
573
562
  ) });
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/panel-left.js","../shadcn/shadcnSheet/sheet.tsx","../shadcn/shadcnSidebar/sidebar.tsx","../lib/components/Sidebar/Sidebar.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"rect\", { width: \"18\", height: \"18\", x: \"3\", y: \"3\", rx: \"2\", key: \"afitv7\" }],\n [\"path\", { d: \"M9 3v18\", key: \"fh3hqa\" }]\n];\nconst PanelLeft = createLucideIcon(\"panel-left\", __iconNode);\n\nexport { __iconNode, PanelLeft as default };\n//# sourceMappingURL=panel-left.js.map\n","'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nconst SheetContent = forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n side === 'top' &&\n 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n side === 'left' &&\n 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n side === 'right' &&\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetPortal>\n ),\n);\nSheetContent.displayName = DialogPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\nSheetHeader.displayName = 'SheetHeader';\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n);\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n));\nSheetTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nSheetDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport type React from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useIsMobile } from '../../lib/hooks/useIsMobile';\nimport { Button } from '../shadcnButton';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from '../shadcnDropdownMenu';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../shadcnSheet';\nimport { Skeleton } from '../shadcnSkeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../shadcnTooltip';\nimport { cn } from '../utils';\n\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3.5rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n// Accesses sidebar state from the nearest SidebarProvider\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n// Provides sidebar state and keyboard shortcut to all sidebar sub-components\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen]);\n\n // Keyboard shortcut to toggle sidebar (Cmd+B / Ctrl+B)\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n// Main sidebar container with responsive mobile Sheet and desktop fixed panel\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n overlay = false,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n overlay?: boolean;\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn('bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n data-overlay={overlay || undefined}\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative bg-transparent transition-[width] duration-200 ease-linear',\n overlay\n ? 'w-(--sidebar-width-icon)'\n : cn(\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ),\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n overlay && state === 'expanded' && 'z-30 shadow-xl',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n// Toggle button that calls toggleSidebar from context\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n// Invisible rail at sidebar edge for drag/click toggling\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Main content area wrapper that adjusts for sidebar inset variant\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Sticky header area at the top of the sidebar\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Sticky footer area at the bottom of the sidebar\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Scrollable content area between header and footer\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Groups related menu items with an optional label\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\n// Label for a sidebar group, hides when collapsed to icon mode\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Action button positioned in the top-right of a sidebar group\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Content wrapper within a sidebar group\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\n// Unordered list container for sidebar menu items\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n}\n\n// List item wrapper for a single menu entry\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding,background-color,color] duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// Interactive menu button with tooltip support in collapsed icon mode\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltipProps} />\n </Tooltip>\n );\n}\n\n// Action button overlaid on a menu item (e.g., \"more\" or \"add\" buttons)\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Badge positioned on a menu item (e.g., unread count)\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Skeleton loading placeholder for a menu item\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n// Nested submenu list container\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// List item wrapper within a submenu\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\n// Link/button within a submenu item\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMode = 'expanded' | 'collapsed' | 'hover';\n\nconst SIDEBAR_MODE_OPTIONS: { value: SidebarMode; label: string }[] = [\n { value: 'expanded', label: 'Expanded' },\n { value: 'collapsed', label: 'Collapsed' },\n { value: 'hover', label: 'Expand on hover' },\n];\n\n// Manages sidebar mode state with localStorage persistence and hover behavior\nfunction useSidebarMode(storageKey = 'sidebar-mode') {\n const { setOpen } = useSidebar();\n\n const [sidebarMode, setSidebarMode] = useState<SidebarMode>(() => {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'expanded' || stored === 'collapsed' || stored === 'hover') return stored;\n return 'expanded';\n });\n\n // Stable ref to avoid re-triggering effect when setOpen identity changes\n const setOpenRef = useRef(setOpen);\n setOpenRef.current = setOpen;\n\n // Sync sidebar open/close when mode changes\n useEffect(() => {\n if (sidebarMode === 'expanded') {\n setOpenRef.current(true);\n } else {\n setOpenRef.current(false);\n }\n }, [sidebarMode]);\n\n function handleModeChange(mode: SidebarMode) {\n setSidebarMode(mode);\n localStorage.setItem(storageKey, mode);\n }\n\n function handleMouseEnter() {\n if (sidebarMode === 'hover') setOpen(true);\n }\n\n function handleMouseLeave() {\n if (sidebarMode === 'hover') setOpen(false);\n }\n\n return {\n sidebarMode,\n setSidebarMode: handleModeChange,\n sidebarProps: {\n overlay: sidebarMode === 'hover',\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n },\n controlProps: {\n sidebarMode,\n onSidebarModeChange: handleModeChange,\n },\n };\n}\n\n// Renders a dropdown menu for selecting the sidebar display mode\nconst SidebarControl = ({\n sidebarMode,\n onSidebarModeChange,\n}: {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton tooltip=\"Sidebar control\">\n <PanelLeftIcon />\n <span>Sidebar control</span>\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"start\" sideOffset={8} className=\"w-48\">\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">Sidebar control</DropdownMenuLabel>\n {SIDEBAR_MODE_OPTIONS.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => onSidebarModeChange(option.value)} className=\"gap-2\">\n <span className=\"flex size-3.5 items-center justify-center\">\n {sidebarMode === option.value && <span className=\"size-1.5 rounded-full bg-foreground\" />}\n </span>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarControl,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n sidebarMenuButtonVariants,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n useSidebar,\n useSidebarMode,\n};\n\nexport type { SidebarMode };\n","import { ChevronRight } from 'lucide-react';\nimport type * as React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport {\n Sidebar as ShadcnSidebar,\n SidebarContent as ShadcnSidebarContent,\n SidebarControl as ShadcnSidebarControl,\n SidebarFooter as ShadcnSidebarFooter,\n SidebarGroup as ShadcnSidebarGroup,\n SidebarGroupContent as ShadcnSidebarGroupContent,\n SidebarGroupLabel as ShadcnSidebarGroupLabel,\n SidebarMenu as ShadcnSidebarMenu,\n SidebarMenuButton as ShadcnSidebarMenuButton,\n SidebarMenuItem as ShadcnSidebarMenuItem,\n SidebarMenuSub as ShadcnSidebarMenuSub,\n SidebarMenuSubButton as ShadcnSidebarMenuSubButton,\n SidebarMenuSubItem as ShadcnSidebarMenuSubItem,\n SidebarRail as ShadcnSidebarRail,\n useSidebarMode as shadcnUseSidebarMode,\n} from '../../../shadcn/shadcnSidebar';\n\nexport interface SidebarNavChild {\n title: string;\n path: string;\n}\n\nexport interface SidebarNavItem {\n title: string;\n icon: React.ComponentType<{ className?: string }>;\n path: string;\n children?: SidebarNavChild[];\n}\n\nexport interface SidebarNavGroup {\n label: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarProps {\n groups: SidebarNavGroup[];\n topOffset?: number;\n}\n\n// Renders a collapsible menu item with a submenu\nconst CollapsibleItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnCollapsible\n defaultOpen={item.children?.some((child) => pathname === child.path)}\n className=\"group/collapsible\"\n >\n <ShadcnSidebarMenuItem>\n <ShadcnCollapsibleTrigger asChild>\n <ShadcnSidebarMenuButton tooltip={item.title} isActive={pathname.startsWith(item.path)}>\n <item.icon />\n <span>{item.title}</span>\n <ChevronRight className=\"ml-auto size-4 transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\" />\n </ShadcnSidebarMenuButton>\n </ShadcnCollapsibleTrigger>\n <ShadcnCollapsibleContent>\n <ShadcnSidebarMenuSub>\n {item.children?.map((child) => (\n <ShadcnSidebarMenuSubItem key={child.path}>\n <ShadcnSidebarMenuSubButton isActive={pathname === child.path} onClick={() => navigate(child.path)}>\n <span>{child.title}</span>\n </ShadcnSidebarMenuSubButton>\n </ShadcnSidebarMenuSubItem>\n ))}\n </ShadcnSidebarMenuSub>\n </ShadcnCollapsibleContent>\n </ShadcnSidebarMenuItem>\n </ShadcnCollapsible>\n);\n\n// Renders a flat menu item without children\nconst FlatItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnSidebarMenuItem>\n <ShadcnSidebarMenuButton\n tooltip={item.title}\n isActive={pathname === item.path || pathname.startsWith(`${item.path}/`)}\n onClick={() => navigate(item.path)}\n >\n <item.icon />\n <span>{item.title}</span>\n </ShadcnSidebarMenuButton>\n </ShadcnSidebarMenuItem>\n);\n\n// Data-driven sidebar that renders grouped nav items with collapsible support\nexport const Sidebar: React.FC<SidebarProps> = ({ groups, topOffset = 14 }) => {\n const location = useLocation();\n const navigate = useNavigate();\n const { sidebarProps, controlProps } = shadcnUseSidebarMode();\n\n return (\n <ShadcnSidebar\n {...sidebarProps}\n collapsible=\"icon\"\n style={{\n top: `calc(var(--spacing) * ${topOffset})`,\n height: `calc(100svh - calc(var(--spacing) * ${topOffset}))`,\n }}\n >\n <ShadcnSidebarContent>\n {groups.map((group) => (\n <ShadcnSidebarGroup key={group.label}>\n <ShadcnSidebarGroupLabel className=\"group-data-[collapsible=icon]:mt-0\">\n {group.label}\n </ShadcnSidebarGroupLabel>\n <ShadcnSidebarGroupContent>\n <ShadcnSidebarMenu>\n {group.items.map((item) =>\n item.children ? (\n <CollapsibleItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ) : (\n <FlatItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ),\n )}\n </ShadcnSidebarMenu>\n </ShadcnSidebarGroupContent>\n </ShadcnSidebarGroup>\n ))}\n </ShadcnSidebarContent>\n\n <ShadcnSidebarFooter>\n <ShadcnSidebarControl {...controlProps} />\n </ShadcnSidebarFooter>\n\n <ShadcnSidebarRail />\n </ShadcnSidebar>\n );\n};\n\nSidebar.displayName = 'Sidebar';\n\n// Re-export layout primitives consumers need alongside the sidebar\nexport {\n SidebarInset,\n SidebarProvider,\n} from '../../../shadcn/shadcnSidebar';\n"],"names":["DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","open","Sidebar","PanelLeftIcon","ShadcnCollapsible","ShadcnSidebarMenuItem","ShadcnCollapsibleTrigger","ShadcnSidebarMenuButton","ShadcnCollapsibleContent","ShadcnSidebarMenuSub","ShadcnSidebarMenuSubItem","ShadcnSidebarMenuSubButton","shadcnUseSidebarMode","ShadcnSidebar","ShadcnSidebarContent","ShadcnSidebarGroup","ShadcnSidebarGroupLabel","ShadcnSidebarGroupContent","ShadcnSidebarMenu","ShadcnSidebarFooter","ShadcnSidebarControl","ShadcnSidebarRail"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Sidebar.js","sources":["../shadcn/shadcnSheet/sheet.tsx","../shadcn/shadcnSidebar/sidebar.tsx","../lib/components/Sidebar/Sidebar.tsx"],"sourcesContent":["'use client';\n\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\nimport type React from 'react';\nimport { forwardRef } from 'react';\nimport { cn } from '../utils';\n\nconst Sheet = DialogPrimitive.Root;\n\nconst SheetTrigger = DialogPrimitive.Trigger;\n\nconst SheetClose = DialogPrimitive.Close;\n\nconst SheetPortal = DialogPrimitive.Portal;\n\nconst SheetOverlay = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Overlay>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Overlay\n className={cn(\n 'fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0',\n className,\n )}\n {...props}\n ref={ref}\n />\n));\nSheetOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\ninterface SheetContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {\n side?: 'top' | 'right' | 'bottom' | 'left';\n}\n\nconst SheetContent = forwardRef<React.ElementRef<typeof DialogPrimitive.Content>, SheetContentProps>(\n ({ side = 'right', className, children, ...props }, ref) => (\n <SheetPortal>\n <SheetOverlay />\n <DialogPrimitive.Content\n ref={ref}\n className={cn(\n 'fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:duration-300 data-[state=open]:duration-500',\n side === 'top' &&\n 'inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top',\n side === 'bottom' &&\n 'inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom',\n side === 'left' &&\n 'inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm',\n side === 'right' &&\n 'inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close className=\"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground\">\n <X className=\"h-4 w-4\" />\n <span className=\"sr-only\">Close</span>\n </DialogPrimitive.Close>\n </DialogPrimitive.Content>\n </SheetPortal>\n ),\n);\nSheetContent.displayName = DialogPrimitive.Content.displayName;\n\nconst SheetHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col space-y-2 text-center sm:text-left', className)} {...props} />\n);\nSheetHeader.displayName = 'SheetHeader';\n\nconst SheetFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2', className)} {...props} />\n);\nSheetFooter.displayName = 'SheetFooter';\n\nconst SheetTitle = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Title>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-lg font-semibold text-foreground', className)} {...props} />\n));\nSheetTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst SheetDescription = forwardRef<\n React.ElementRef<typeof DialogPrimitive.Description>,\n React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>\n>(({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('text-sm text-muted-foreground', className)} {...props} />\n));\nSheetDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Sheet,\n SheetPortal,\n SheetOverlay,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n","'use client';\n\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { PanelLeftIcon } from 'lucide-react';\nimport type React from 'react';\nimport { createContext, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';\n\nimport { useIsMobile } from '../../lib/hooks/useIsMobile';\nimport { Button } from '../shadcnButton';\nimport {\n DropdownMenu,\n DropdownMenuContent,\n DropdownMenuItem,\n DropdownMenuLabel,\n DropdownMenuTrigger,\n} from '../shadcnDropdownMenu';\nimport { Sheet, SheetContent, SheetDescription, SheetHeader, SheetTitle } from '../shadcnSheet';\nimport { Skeleton } from '../shadcnSkeleton';\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '../shadcnTooltip';\nimport { cn } from '../utils';\n\nconst SIDEBAR_WIDTH = '16rem';\nconst SIDEBAR_WIDTH_MOBILE = '18rem';\nconst SIDEBAR_WIDTH_ICON = '3.5rem';\nconst SIDEBAR_KEYBOARD_SHORTCUT = 'b';\n\ntype SidebarContextProps = {\n state: 'expanded' | 'collapsed';\n open: boolean;\n setOpen: (open: boolean) => void;\n openMobile: boolean;\n setOpenMobile: (open: boolean) => void;\n isMobile: boolean;\n toggleSidebar: () => void;\n};\n\nconst SidebarContext = createContext<SidebarContextProps | null>(null);\n\n// Accesses sidebar state from the nearest SidebarProvider\nfunction useSidebar() {\n const context = useContext(SidebarContext);\n if (!context) {\n throw new Error('useSidebar must be used within a SidebarProvider.');\n }\n return context;\n}\n\n// Provides sidebar state and keyboard shortcut to all sidebar sub-components\nfunction SidebarProvider({\n defaultOpen = true,\n open: openProp,\n onOpenChange: setOpenProp,\n className,\n style,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n defaultOpen?: boolean;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}) {\n const isMobile = useIsMobile();\n const [openMobile, setOpenMobile] = useState(false);\n\n const [_open, _setOpen] = useState(defaultOpen);\n const open = openProp ?? _open;\n const setOpen = useCallback(\n (value: boolean | ((value: boolean) => boolean)) => {\n const openState = typeof value === 'function' ? value(open) : value;\n if (setOpenProp) {\n setOpenProp(openState);\n } else {\n _setOpen(openState);\n }\n },\n [setOpenProp, open],\n );\n\n const toggleSidebar = useCallback(() => {\n return isMobile ? setOpenMobile((open) => !open) : setOpen((open) => !open);\n }, [isMobile, setOpen]);\n\n // Keyboard shortcut to toggle sidebar (Cmd+B / Ctrl+B)\n useEffect(() => {\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {\n event.preventDefault();\n toggleSidebar();\n }\n };\n\n window.addEventListener('keydown', handleKeyDown);\n return () => window.removeEventListener('keydown', handleKeyDown);\n }, [toggleSidebar]);\n\n const state = open ? 'expanded' : 'collapsed';\n\n const contextValue = useMemo<SidebarContextProps>(\n () => ({\n state,\n open,\n setOpen,\n isMobile,\n openMobile,\n setOpenMobile,\n toggleSidebar,\n }),\n [state, open, setOpen, isMobile, openMobile, toggleSidebar],\n );\n\n return (\n <SidebarContext.Provider value={contextValue}>\n <TooltipProvider delayDuration={0}>\n <div\n data-slot=\"sidebar-wrapper\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH,\n '--sidebar-width-icon': SIDEBAR_WIDTH_ICON,\n ...style,\n } as React.CSSProperties\n }\n className={cn('group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full', className)}\n {...props}\n >\n {children}\n </div>\n </TooltipProvider>\n </SidebarContext.Provider>\n );\n}\n\n// Main sidebar container with responsive mobile Sheet and desktop fixed panel\nfunction Sidebar({\n side = 'left',\n variant = 'sidebar',\n collapsible = 'offcanvas',\n overlay = false,\n className,\n children,\n ...props\n}: React.ComponentProps<'div'> & {\n side?: 'left' | 'right';\n variant?: 'sidebar' | 'floating' | 'inset';\n collapsible?: 'offcanvas' | 'icon' | 'none';\n overlay?: boolean;\n}) {\n const { isMobile, state, openMobile, setOpenMobile } = useSidebar();\n\n if (collapsible === 'none') {\n return (\n <div\n data-slot=\"sidebar\"\n className={cn('bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n\n if (isMobile) {\n return (\n <Sheet open={openMobile} onOpenChange={setOpenMobile} {...props}>\n <SheetContent\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar\"\n data-mobile=\"true\"\n className=\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\"\n style={\n {\n '--sidebar-width': SIDEBAR_WIDTH_MOBILE,\n } as React.CSSProperties\n }\n side={side}\n >\n <SheetHeader className=\"sr-only\">\n <SheetTitle>Sidebar</SheetTitle>\n <SheetDescription>Displays the mobile sidebar.</SheetDescription>\n </SheetHeader>\n <div className=\"flex h-full w-full flex-col\">{children}</div>\n </SheetContent>\n </Sheet>\n );\n }\n\n return (\n <div\n className=\"group peer text-sidebar-foreground hidden md:block\"\n data-state={state}\n data-collapsible={state === 'collapsed' ? collapsible : ''}\n data-variant={variant}\n data-side={side}\n data-slot=\"sidebar\"\n data-overlay={overlay || undefined}\n >\n <div\n data-slot=\"sidebar-gap\"\n className={cn(\n 'relative bg-transparent transition-[width] duration-200 ease-linear',\n overlay\n ? 'w-(--sidebar-width-icon)'\n : cn(\n 'w-(--sidebar-width)',\n 'group-data-[collapsible=offcanvas]:w-0',\n 'group-data-[side=right]:rotate-180',\n variant === 'floating' || variant === 'inset'\n ? 'group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon)',\n ),\n )}\n />\n <div\n data-slot=\"sidebar-container\"\n className={cn(\n 'fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex',\n side === 'left'\n ? 'left-0 group-data-[collapsible=offcanvas]:left-[calc(var(--sidebar-width)*-1)]'\n : 'right-0 group-data-[collapsible=offcanvas]:right-[calc(var(--sidebar-width)*-1)]',\n variant === 'floating' || variant === 'inset'\n ? 'p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]'\n : 'group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-r group-data-[side=right]:border-l',\n overlay && state === 'expanded' && 'z-30 shadow-xl',\n className,\n )}\n {...props}\n >\n <div\n data-sidebar=\"sidebar\"\n data-slot=\"sidebar-inner\"\n className=\"bg-sidebar group-data-[variant=floating]:border-sidebar-border flex h-full w-full flex-col group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:border group-data-[variant=floating]:shadow-sm\"\n >\n {children}\n </div>\n </div>\n </div>\n );\n}\n\n// Toggle button that calls toggleSidebar from context\nfunction SidebarTrigger({ className, onClick, ...props }: React.ComponentProps<typeof Button>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <Button\n data-sidebar=\"trigger\"\n data-slot=\"sidebar-trigger\"\n variant=\"ghost\"\n size=\"icon\"\n className={cn('size-7', className)}\n onClick={(event) => {\n onClick?.(event);\n toggleSidebar();\n }}\n {...props}\n >\n <PanelLeftIcon />\n <span className=\"sr-only\">Toggle Sidebar</span>\n </Button>\n );\n}\n\n// Invisible rail at sidebar edge for drag/click toggling\nfunction SidebarRail({ className, ...props }: React.ComponentProps<'button'>) {\n const { toggleSidebar } = useSidebar();\n\n return (\n <button\n data-sidebar=\"rail\"\n data-slot=\"sidebar-rail\"\n aria-label=\"Toggle Sidebar\"\n tabIndex={-1}\n onClick={toggleSidebar}\n title=\"Toggle Sidebar\"\n className={cn(\n 'hover:after:bg-sidebar-border absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex',\n 'in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize',\n '[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',\n 'hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full',\n '[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',\n '[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Main content area wrapper that adjusts for sidebar inset variant\nfunction SidebarInset({ className, ...props }: React.ComponentProps<'main'>) {\n return (\n <main\n data-slot=\"sidebar-inset\"\n className={cn(\n 'bg-background relative flex w-full flex-1 flex-col',\n 'md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Sticky header area at the top of the sidebar\nfunction SidebarHeader({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-header\"\n data-sidebar=\"header\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Sticky footer area at the bottom of the sidebar\nfunction SidebarFooter({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-footer\"\n data-sidebar=\"footer\"\n className={cn('flex flex-col gap-2 p-2', className)}\n {...props}\n />\n );\n}\n\n// Scrollable content area between header and footer\nfunction SidebarContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-content\"\n data-sidebar=\"content\"\n className={cn(\n 'flex min-h-0 flex-1 flex-col gap-2 overflow-auto group-data-[collapsible=icon]:overflow-hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Groups related menu items with an optional label\nfunction SidebarGroup({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group\"\n data-sidebar=\"group\"\n className={cn('relative flex w-full min-w-0 flex-col p-2', className)}\n {...props}\n />\n );\n}\n\n// Label for a sidebar group, hides when collapsed to icon mode\nfunction SidebarGroupLabel({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'div'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'div';\n\n return (\n <Comp\n data-slot=\"sidebar-group-label\"\n data-sidebar=\"group-label\"\n className={cn(\n 'text-sidebar-foreground/70 ring-sidebar-ring flex h-8 shrink-0 items-center rounded-md px-2 text-xs font-medium outline-hidden transition-[margin,opacity] duration-200 ease-linear focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Action button positioned in the top-right of a sidebar group\nfunction SidebarGroupAction({\n className,\n asChild = false,\n ...props\n}: React.ComponentProps<'button'> & { asChild?: boolean }) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-group-action\"\n data-sidebar=\"group-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Content wrapper within a sidebar group\nfunction SidebarGroupContent({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-group-content\"\n data-sidebar=\"group-content\"\n className={cn('w-full text-sm', className)}\n {...props}\n />\n );\n}\n\n// Unordered list container for sidebar menu items\nfunction SidebarMenu({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu\"\n data-sidebar=\"menu\"\n className={cn('flex w-full min-w-0 flex-col gap-1', className)}\n {...props}\n />\n );\n}\n\n// List item wrapper for a single menu entry\nfunction SidebarMenuItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-item\"\n data-sidebar=\"menu-item\"\n className={cn('group/menu-item relative', className)}\n {...props}\n />\n );\n}\n\nconst sidebarMenuButtonVariants = cva(\n 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding,background-color,color] duration-200 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n);\n\n// Interactive menu button with tooltip support in collapsed icon mode\nfunction SidebarMenuButton({\n asChild = false,\n isActive = false,\n variant = 'default',\n size = 'default',\n tooltip,\n className,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n isActive?: boolean;\n tooltip?: string | React.ComponentProps<typeof TooltipContent>;\n} & VariantProps<typeof sidebarMenuButtonVariants>) {\n const Comp = asChild ? Slot : 'button';\n const { isMobile, state } = useSidebar();\n\n const button = (\n <Comp\n data-slot=\"sidebar-menu-button\"\n data-sidebar=\"menu-button\"\n data-size={size}\n data-active={isActive}\n className={cn(sidebarMenuButtonVariants({ variant, size }), className)}\n {...props}\n />\n );\n\n if (!tooltip) {\n return button;\n }\n\n const tooltipProps = typeof tooltip === 'string' ? { children: tooltip } : tooltip;\n\n return (\n <Tooltip>\n <TooltipTrigger asChild>{button}</TooltipTrigger>\n <TooltipContent side=\"right\" align=\"center\" hidden={state !== 'collapsed' || isMobile} {...tooltipProps} />\n </Tooltip>\n );\n}\n\n// Action button overlaid on a menu item (e.g., \"more\" or \"add\" buttons)\nfunction SidebarMenuAction({\n className,\n asChild = false,\n showOnHover = false,\n ...props\n}: React.ComponentProps<'button'> & {\n asChild?: boolean;\n showOnHover?: boolean;\n}) {\n const Comp = asChild ? Slot : 'button';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-action\"\n data-sidebar=\"menu-action\"\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 flex aspect-square w-5 items-center justify-center rounded-md p-0 outline-hidden transition-transform focus-visible:ring-2 [&>svg]:size-4 [&>svg]:shrink-0',\n 'after:absolute after:-inset-2 md:after:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover &&\n 'peer-data-[active=true]/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 md:opacity-0',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Badge positioned on a menu item (e.g., unread count)\nfunction SidebarMenuBadge({ className, ...props }: React.ComponentProps<'div'>) {\n return (\n <div\n data-slot=\"sidebar-menu-badge\"\n data-sidebar=\"menu-badge\"\n className={cn(\n 'text-sidebar-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1 text-xs font-medium tabular-nums select-none',\n 'peer-hover/menu-button:text-sidebar-accent-foreground peer-data-[active=true]/menu-button:text-sidebar-accent-foreground',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// Skeleton loading placeholder for a menu item\nfunction SidebarMenuSkeleton({\n className,\n showIcon = false,\n ...props\n}: React.ComponentProps<'div'> & {\n showIcon?: boolean;\n}) {\n const width = useMemo(() => {\n return `${Math.floor(Math.random() * 40) + 50}%`;\n }, []);\n\n return (\n <div\n data-slot=\"sidebar-menu-skeleton\"\n data-sidebar=\"menu-skeleton\"\n className={cn('flex h-8 items-center gap-2 rounded-md px-2', className)}\n {...props}\n >\n {showIcon && <Skeleton className=\"size-4 rounded-md\" data-sidebar=\"menu-skeleton-icon\" />}\n <Skeleton\n className=\"h-4 max-w-(--skeleton-width) flex-1\"\n data-sidebar=\"menu-skeleton-text\"\n style={\n {\n '--skeleton-width': width,\n } as React.CSSProperties\n }\n />\n </div>\n );\n}\n\n// Nested submenu list container\nfunction SidebarMenuSub({ className, ...props }: React.ComponentProps<'ul'>) {\n return (\n <ul\n data-slot=\"sidebar-menu-sub\"\n data-sidebar=\"menu-sub\"\n className={cn(\n 'border-sidebar-border mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 border-l px-2.5 py-0.5',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\n// List item wrapper within a submenu\nfunction SidebarMenuSubItem({ className, ...props }: React.ComponentProps<'li'>) {\n return (\n <li\n data-slot=\"sidebar-menu-sub-item\"\n data-sidebar=\"menu-sub-item\"\n className={cn('group/menu-sub-item relative', className)}\n {...props}\n />\n );\n}\n\n// Link/button within a submenu item\nfunction SidebarMenuSubButton({\n asChild = false,\n size = 'md',\n isActive = false,\n className,\n ...props\n}: React.ComponentProps<'a'> & {\n asChild?: boolean;\n size?: 'sm' | 'md';\n isActive?: boolean;\n}) {\n const Comp = asChild ? Slot : 'a';\n\n return (\n <Comp\n data-slot=\"sidebar-menu-sub-button\"\n data-sidebar=\"menu-sub-button\"\n data-size={size}\n data-active={isActive}\n className={cn(\n 'text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground flex h-7 min-w-0 -translate-x-px items-center gap-2 overflow-hidden rounded-md px-2 outline-hidden focus-visible:ring-2 disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n className,\n )}\n {...props}\n />\n );\n}\n\ntype SidebarMode = 'expanded' | 'collapsed' | 'hover';\n\nconst SIDEBAR_MODE_OPTIONS: { value: SidebarMode; label: string }[] = [\n { value: 'expanded', label: 'Expanded' },\n { value: 'collapsed', label: 'Collapsed' },\n { value: 'hover', label: 'Expand on hover' },\n];\n\n// Manages sidebar mode state with localStorage persistence and hover behavior\nfunction useSidebarMode(storageKey = 'sidebar-mode') {\n const { setOpen } = useSidebar();\n\n const [sidebarMode, setSidebarMode] = useState<SidebarMode>(() => {\n const stored = localStorage.getItem(storageKey);\n if (stored === 'expanded' || stored === 'collapsed' || stored === 'hover') return stored;\n return 'expanded';\n });\n\n // Stable ref to avoid re-triggering effect when setOpen identity changes\n const setOpenRef = useRef(setOpen);\n setOpenRef.current = setOpen;\n\n // Sync sidebar open/close when mode changes\n useEffect(() => {\n if (sidebarMode === 'expanded') {\n setOpenRef.current(true);\n } else {\n setOpenRef.current(false);\n }\n }, [sidebarMode]);\n\n function handleModeChange(mode: SidebarMode) {\n setSidebarMode(mode);\n localStorage.setItem(storageKey, mode);\n }\n\n function handleMouseEnter() {\n if (sidebarMode === 'hover') setOpen(true);\n }\n\n function handleMouseLeave() {\n if (sidebarMode === 'hover') setOpen(false);\n }\n\n return {\n sidebarMode,\n setSidebarMode: handleModeChange,\n sidebarProps: {\n overlay: sidebarMode === 'hover',\n onMouseEnter: handleMouseEnter,\n onMouseLeave: handleMouseLeave,\n },\n controlProps: {\n sidebarMode,\n onSidebarModeChange: handleModeChange,\n },\n };\n}\n\n// Renders a dropdown menu for selecting the sidebar display mode\nconst SidebarControl = ({\n sidebarMode,\n onSidebarModeChange,\n}: {\n sidebarMode: SidebarMode;\n onSidebarModeChange: (mode: SidebarMode) => void;\n}) => {\n return (\n <DropdownMenu>\n <DropdownMenuTrigger asChild>\n <SidebarMenuButton tooltip=\"Sidebar control\">\n <PanelLeftIcon />\n <span>Sidebar control</span>\n </SidebarMenuButton>\n </DropdownMenuTrigger>\n <DropdownMenuContent side=\"top\" align=\"start\" sideOffset={8} className=\"w-48\">\n <DropdownMenuLabel className=\"text-xs font-normal text-muted-foreground\">Sidebar control</DropdownMenuLabel>\n {SIDEBAR_MODE_OPTIONS.map((option) => (\n <DropdownMenuItem key={option.value} onClick={() => onSidebarModeChange(option.value)} className=\"gap-2\">\n <span className=\"flex size-3.5 items-center justify-center\">\n {sidebarMode === option.value && <span className=\"size-1.5 rounded-full bg-foreground\" />}\n </span>\n {option.label}\n </DropdownMenuItem>\n ))}\n </DropdownMenuContent>\n </DropdownMenu>\n );\n};\n\nexport {\n Sidebar,\n SidebarContent,\n SidebarControl,\n SidebarFooter,\n SidebarGroup,\n SidebarGroupAction,\n SidebarGroupContent,\n SidebarGroupLabel,\n SidebarHeader,\n SidebarInset,\n SidebarMenu,\n SidebarMenuAction,\n SidebarMenuBadge,\n SidebarMenuButton,\n sidebarMenuButtonVariants,\n SidebarMenuItem,\n SidebarMenuSkeleton,\n SidebarMenuSub,\n SidebarMenuSubButton,\n SidebarMenuSubItem,\n SidebarProvider,\n SidebarRail,\n SidebarTrigger,\n useSidebar,\n useSidebarMode,\n};\n\nexport type { SidebarMode };\n","import { ChevronRight } from 'lucide-react';\nimport type * as React from 'react';\nimport { useLocation, useNavigate } from 'react-router-dom';\nimport {\n Collapsible as ShadcnCollapsible,\n CollapsibleContent as ShadcnCollapsibleContent,\n CollapsibleTrigger as ShadcnCollapsibleTrigger,\n} from '../../../shadcn/shadcnCollapsible';\nimport {\n Sidebar as ShadcnSidebar,\n SidebarContent as ShadcnSidebarContent,\n SidebarControl as ShadcnSidebarControl,\n SidebarFooter as ShadcnSidebarFooter,\n SidebarGroup as ShadcnSidebarGroup,\n SidebarGroupContent as ShadcnSidebarGroupContent,\n SidebarGroupLabel as ShadcnSidebarGroupLabel,\n SidebarMenu as ShadcnSidebarMenu,\n SidebarMenuButton as ShadcnSidebarMenuButton,\n SidebarMenuItem as ShadcnSidebarMenuItem,\n SidebarMenuSub as ShadcnSidebarMenuSub,\n SidebarMenuSubButton as ShadcnSidebarMenuSubButton,\n SidebarMenuSubItem as ShadcnSidebarMenuSubItem,\n SidebarRail as ShadcnSidebarRail,\n useSidebarMode as shadcnUseSidebarMode,\n} from '../../../shadcn/shadcnSidebar';\n\nexport interface SidebarNavChild {\n title: string;\n path: string;\n}\n\nexport interface SidebarNavItem {\n title: string;\n icon: React.ComponentType<{ className?: string }>;\n path: string;\n children?: SidebarNavChild[];\n // Optional trailing element (e.g. a lock chip), right-aligned after the title\n endAdornment?: React.ReactNode;\n // When true the row is greyed and non-navigating (still visible)\n disabled?: boolean;\n}\n\nexport interface SidebarNavGroup {\n label: string;\n items: SidebarNavItem[];\n}\n\nexport interface SidebarProps {\n groups: SidebarNavGroup[];\n topOffset?: number;\n}\n\n// Renders a collapsible menu item with a submenu\nconst CollapsibleItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnCollapsible\n defaultOpen={item.children?.some((child) => pathname === child.path)}\n className=\"group/collapsible\"\n >\n <ShadcnSidebarMenuItem>\n <ShadcnCollapsibleTrigger asChild>\n <ShadcnSidebarMenuButton tooltip={item.title} isActive={pathname.startsWith(item.path)}>\n <item.icon />\n <span>{item.title}</span>\n <ChevronRight className=\"ml-auto size-4 transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\" />\n </ShadcnSidebarMenuButton>\n </ShadcnCollapsibleTrigger>\n <ShadcnCollapsibleContent>\n <ShadcnSidebarMenuSub>\n {item.children?.map((child) => (\n <ShadcnSidebarMenuSubItem key={child.path}>\n <ShadcnSidebarMenuSubButton isActive={pathname === child.path} onClick={() => navigate(child.path)}>\n <span>{child.title}</span>\n </ShadcnSidebarMenuSubButton>\n </ShadcnSidebarMenuSubItem>\n ))}\n </ShadcnSidebarMenuSub>\n </ShadcnCollapsibleContent>\n </ShadcnSidebarMenuItem>\n </ShadcnCollapsible>\n);\n\n// Renders a flat menu item without children\nconst FlatItem: React.FC<{\n item: SidebarNavItem;\n pathname: string;\n navigate: (path: string) => void;\n}> = ({ item, pathname, navigate }) => (\n <ShadcnSidebarMenuItem>\n <ShadcnSidebarMenuButton\n tooltip={item.title}\n isActive={pathname === item.path || pathname.startsWith(`${item.path}/`)}\n onClick={() => (item.disabled ? undefined : navigate(item.path))}\n aria-disabled={item.disabled}\n className={item.disabled ? 'opacity-60' : undefined}\n >\n <item.icon />\n <span>{item.title}</span>\n {item.endAdornment && <span className=\"ml-auto flex items-center\">{item.endAdornment}</span>}\n </ShadcnSidebarMenuButton>\n </ShadcnSidebarMenuItem>\n);\n\n// Data-driven sidebar that renders grouped nav items with collapsible support\nexport const Sidebar: React.FC<SidebarProps> = ({ groups, topOffset = 14 }) => {\n const location = useLocation();\n const navigate = useNavigate();\n const { sidebarProps, controlProps } = shadcnUseSidebarMode();\n\n return (\n <ShadcnSidebar\n {...sidebarProps}\n collapsible=\"icon\"\n style={{\n top: `calc(var(--spacing) * ${topOffset})`,\n height: `calc(100svh - calc(var(--spacing) * ${topOffset}))`,\n }}\n >\n <ShadcnSidebarContent>\n {groups.map((group) => (\n <ShadcnSidebarGroup key={group.label}>\n <ShadcnSidebarGroupLabel className=\"group-data-[collapsible=icon]:mt-0\">\n {group.label}\n </ShadcnSidebarGroupLabel>\n <ShadcnSidebarGroupContent>\n <ShadcnSidebarMenu>\n {group.items.map((item) =>\n item.children ? (\n <CollapsibleItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ) : (\n <FlatItem key={item.title} item={item} pathname={location.pathname} navigate={navigate} />\n ),\n )}\n </ShadcnSidebarMenu>\n </ShadcnSidebarGroupContent>\n </ShadcnSidebarGroup>\n ))}\n </ShadcnSidebarContent>\n\n <ShadcnSidebarFooter>\n <ShadcnSidebarControl {...controlProps} />\n </ShadcnSidebarFooter>\n\n <ShadcnSidebarRail />\n </ShadcnSidebar>\n );\n};\n\nSidebar.displayName = 'Sidebar';\n\n// Re-export layout primitives consumers need alongside the sidebar\nexport {\n SidebarInset,\n SidebarProvider,\n} from '../../../shadcn/shadcnSidebar';\n"],"names":["DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogPrimitive.Title","DialogPrimitive.Description","open","Sidebar","PanelLeftIcon","ShadcnCollapsible","ShadcnSidebarMenuItem","ShadcnCollapsibleTrigger","ShadcnSidebarMenuButton","ShadcnCollapsibleContent","ShadcnSidebarMenuSub","ShadcnSidebarMenuSubItem","ShadcnSidebarMenuSubButton","shadcnUseSidebarMode","ShadcnSidebar","ShadcnSidebarContent","ShadcnSidebarGroup","ShadcnSidebarGroupLabel","ShadcnSidebarGroupContent","ShadcnSidebarMenu","ShadcnSidebarFooter","ShadcnSidebarControl","ShadcnSidebarRail"],"mappings":"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"}
package/dist/Sonner.js CHANGED
@@ -1,28 +1,13 @@
1
1
  import { jsx } from 'react/jsx-runtime';
2
2
  import { useEffect } from 'react';
3
- import { T as Toaster$2, t as toast } from './index24.js';
3
+ import { T as Toaster$2, t as toast } from './index25.js';
4
4
  import { T as TOAST_EVENT } from './toast.js';
5
5
  import { u as useTheme } from './useTheme.js';
6
6
  import { L as LoaderCircle } from './loader-circle.js';
7
7
  import { I as Info, T as TriangleAlert } from './triangle-alert.js';
8
- import { c as createLucideIcon } from './createLucideIcon.js';
8
+ import { C as CircleX } from './circle-x.js';
9
9
  import { C as CircleCheckBig } from './circle-check-big.js';
10
10
 
11
- /**
12
- * @license lucide-react v0.562.0 - ISC
13
- *
14
- * This source code is licensed under the ISC license.
15
- * See the LICENSE file in the root directory of this source tree.
16
- */
17
-
18
-
19
- const __iconNode = [
20
- ["circle", { cx: "12", cy: "12", r: "10", key: "1mglay" }],
21
- ["path", { d: "m15 9-6 6", key: "1uzhvr" }],
22
- ["path", { d: "m9 9 6 6", key: "z0biqf" }]
23
- ];
24
- const CircleX = createLucideIcon("circle-x", __iconNode);
25
-
26
11
  const Toaster$1 = ({ theme, ...props }) => {
27
12
  const { theme: activeTheme } = useTheme();
28
13
  return /* @__PURE__ */ jsx(
@@ -1 +1 @@
1
- {"version":3,"file":"Sonner.js","sources":["../node_modules/.pnpm/lucide-react@0.562.0_react@19.2.3/node_modules/lucide-react/dist/esm/icons/circle-x.js","../shadcn/shadcnSonner/sonner.tsx","../lib/components/Sonner/Sonner.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"circle\", { cx: \"12\", cy: \"12\", r: \"10\", key: \"1mglay\" }],\n [\"path\", { d: \"m15 9-6 6\", key: \"1uzhvr\" }],\n [\"path\", { d: \"m9 9 6 6\", key: \"z0biqf\" }]\n];\nconst CircleX = createLucideIcon(\"circle-x\", __iconNode);\n\nexport { __iconNode, CircleX as default };\n//# sourceMappingURL=circle-x.js.map\n","import { AlertTriangleIcon, CheckCircleIcon, InfoIcon, Loader2Icon, XCircleIcon } from 'lucide-react';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\nimport { useTheme } from '../../lib/hooks/useTheme';\n\nconst Toaster = ({ theme, ...props }: ToasterProps) => {\n const { theme: activeTheme } = useTheme();\n return (\n <Sonner\n theme={(theme ?? activeTheme) as ToasterProps['theme']}\n className=\"toaster group\"\n icons={{\n success: <CheckCircleIcon className=\"size-4 text-success\" />,\n error: <XCircleIcon className=\"size-4 text-destructive\" />,\n warning: <AlertTriangleIcon className=\"size-4 text-warning\" />,\n info: <InfoIcon className=\"size-4 text-info\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin text-primary\" />,\n }}\n toastOptions={{\n classNames: {\n toast: '!group toast shadow-lg',\n description: '!text-muted-foreground',\n actionButton: '!bg-primary text-primary-foreground',\n cancelButton: '!bg-muted text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useEffect } from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport { Toaster as ShadcnToaster } from '../../../shadcn/shadcnSonner';\nimport { TOAST_EVENT, type ToastEventDetail } from './toast';\n\ntype ToasterProps = React.ComponentProps<typeof ShadcnToaster>;\n\n/**\n * Toaster component that listens for global toast events.\n *\n * This component should be mounted once in the host application.\n * It listens for toast events emitted from any micro-frontend\n * and displays them using sonner.\n */\nexport const Toaster: React.FC<ToasterProps> = (props) => {\n useEffect(() => {\n const handleToast = (event: Event) => {\n const { type, message, options } = (event as CustomEvent<ToastEventDetail>).detail;\n\n switch (type) {\n case 'success':\n sonnerToast.success(message, options);\n break;\n case 'error':\n sonnerToast.error(message, options);\n break;\n case 'warning':\n sonnerToast.warning(message, options);\n break;\n case 'info':\n sonnerToast.info(message, options);\n break;\n case 'loading':\n sonnerToast.loading(message, options);\n break;\n default:\n sonnerToast(message, options);\n break;\n }\n };\n\n window.addEventListener(TOAST_EVENT, handleToast);\n return () => window.removeEventListener(TOAST_EVENT, handleToast);\n }, []);\n\n return <ShadcnToaster {...props} />;\n};\n"],"names":["Toaster","Sonner","CheckCircleIcon","XCircleIcon","AlertTriangleIcon","InfoIcon","Loader2Icon","sonnerToast","ShadcnToaster"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Sonner.js","sources":["../shadcn/shadcnSonner/sonner.tsx","../lib/components/Sonner/Sonner.tsx"],"sourcesContent":["import { AlertTriangleIcon, CheckCircleIcon, InfoIcon, Loader2Icon, XCircleIcon } from 'lucide-react';\nimport { Toaster as Sonner, type ToasterProps } from 'sonner';\nimport { useTheme } from '../../lib/hooks/useTheme';\n\nconst Toaster = ({ theme, ...props }: ToasterProps) => {\n const { theme: activeTheme } = useTheme();\n return (\n <Sonner\n theme={(theme ?? activeTheme) as ToasterProps['theme']}\n className=\"toaster group\"\n icons={{\n success: <CheckCircleIcon className=\"size-4 text-success\" />,\n error: <XCircleIcon className=\"size-4 text-destructive\" />,\n warning: <AlertTriangleIcon className=\"size-4 text-warning\" />,\n info: <InfoIcon className=\"size-4 text-info\" />,\n loading: <Loader2Icon className=\"size-4 animate-spin text-primary\" />,\n }}\n toastOptions={{\n classNames: {\n toast: '!group toast shadow-lg',\n description: '!text-muted-foreground',\n actionButton: '!bg-primary text-primary-foreground',\n cancelButton: '!bg-muted text-muted-foreground',\n },\n }}\n {...props}\n />\n );\n};\n\nexport { Toaster };\n","import { useEffect } from 'react';\nimport { toast as sonnerToast } from 'sonner';\nimport { Toaster as ShadcnToaster } from '../../../shadcn/shadcnSonner';\nimport { TOAST_EVENT, type ToastEventDetail } from './toast';\n\ntype ToasterProps = React.ComponentProps<typeof ShadcnToaster>;\n\n/**\n * Toaster component that listens for global toast events.\n *\n * This component should be mounted once in the host application.\n * It listens for toast events emitted from any micro-frontend\n * and displays them using sonner.\n */\nexport const Toaster: React.FC<ToasterProps> = (props) => {\n useEffect(() => {\n const handleToast = (event: Event) => {\n const { type, message, options } = (event as CustomEvent<ToastEventDetail>).detail;\n\n switch (type) {\n case 'success':\n sonnerToast.success(message, options);\n break;\n case 'error':\n sonnerToast.error(message, options);\n break;\n case 'warning':\n sonnerToast.warning(message, options);\n break;\n case 'info':\n sonnerToast.info(message, options);\n break;\n case 'loading':\n sonnerToast.loading(message, options);\n break;\n default:\n sonnerToast(message, options);\n break;\n }\n };\n\n window.addEventListener(TOAST_EVENT, handleToast);\n return () => window.removeEventListener(TOAST_EVENT, handleToast);\n }, []);\n\n return <ShadcnToaster {...props} />;\n};\n"],"names":["Toaster","Sonner","CheckCircleIcon","XCircleIcon","AlertTriangleIcon","InfoIcon","Loader2Icon","sonnerToast","ShadcnToaster"],"mappings":";;;;;;;;;;AAIA,MAAMA,YAAU,CAAC,EAAE,KAAA,EAAO,GAAG,OAAM,KAAoB;AACrD,EAAA,MAAM,EAAE,KAAA,EAAO,WAAA,EAAY,GAAI,QAAA,EAAS;AACxC,EAAA,uBACE,GAAA;AAAA,IAACC,SAAA;AAAA,IAAA;AAAA,MACC,OAAQ,KAAA,IAAS,WAAA;AAAA,MACjB,SAAA,EAAU,eAAA;AAAA,MACV,KAAA,EAAO;AAAA,QACL,OAAA,kBAAS,GAAA,CAACC,cAAA,EAAA,EAAgB,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,QAC1D,KAAA,kBAAO,GAAA,CAACC,OAAA,EAAA,EAAY,SAAA,EAAU,yBAAA,EAA0B,CAAA;AAAA,QACxD,OAAA,kBAAS,GAAA,CAACC,aAAA,EAAA,EAAkB,SAAA,EAAU,qBAAA,EAAsB,CAAA;AAAA,QAC5D,IAAA,kBAAM,GAAA,CAACC,IAAA,EAAA,EAAS,SAAA,EAAU,kBAAA,EAAmB,CAAA;AAAA,QAC7C,OAAA,kBAAS,GAAA,CAACC,YAAA,EAAA,EAAY,SAAA,EAAU,kCAAA,EAAmC;AAAA,OACrE;AAAA,MACA,YAAA,EAAc;AAAA,QACZ,UAAA,EAAY;AAAA,UACV,KAAA,EAAO,wBAAA;AAAA,UACP,WAAA,EAAa,wBAAA;AAAA,UACb,YAAA,EAAc,qCAAA;AAAA,UACd,YAAA,EAAc;AAAA;AAChB,OACF;AAAA,MACC,GAAG;AAAA;AAAA,GACN;AAEJ,CAAA;;ACdO,MAAM,OAAA,GAAkC,CAAC,KAAA,KAAU;AACxD,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAiB;AACpC,MAAA,MAAM,EAAE,IAAA,EAAM,OAAA,EAAS,OAAA,KAAa,KAAA,CAAwC,MAAA;AAE5E,MAAA,QAAQ,IAAA;AAAM,QACZ,KAAK,SAAA;AACH,UAAAC,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF,KAAK,OAAA;AACH,UAAAA,KAAA,CAAY,KAAA,CAAM,SAAS,OAAO,CAAA;AAClC,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAAA,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF,KAAK,MAAA;AACH,UAAAA,KAAA,CAAY,IAAA,CAAK,SAAS,OAAO,CAAA;AACjC,UAAA;AAAA,QACF,KAAK,SAAA;AACH,UAAAA,KAAA,CAAY,OAAA,CAAQ,SAAS,OAAO,CAAA;AACpC,UAAA;AAAA,QACF;AACE,UAAAA,KAAA,CAAY,SAAS,OAAO,CAAA;AAC5B,UAAA;AAAA;AACJ,IACF,CAAA;AAEA,IAAA,MAAA,CAAO,gBAAA,CAAiB,aAAa,WAAW,CAAA;AAChD,IAAA,OAAO,MAAM,MAAA,CAAO,mBAAA,CAAoB,WAAA,EAAa,WAAW,CAAA;AAAA,EAClE,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,uBAAO,GAAA,CAACC,SAAA,EAAA,EAAe,GAAG,KAAA,EAAO,CAAA;AACnC;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SupplierItemSelector.js","sources":["../lib/selects/supplier-item/SupplierItemFilter.tsx","../lib/selects/supplier-item/SupplierItemSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport type { SupplierItemSelectorParams } from './SupplierItemSelector';\n\nexport type SupplierItemFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured SelectFilter for supplier-item filtering. Shares the params shape with\n// SupplierItemSelector so the same scoping rules (supplierId / purchaseOrderId / excludeOn*)\n// apply identically in tables and forms.\nexport const SupplierItemFilter = Object.assign(\n forwardRef<HTMLButtonElement, SupplierItemFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"supplierItemId\"\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n optionsEndpoint=\"commerce-api/supplier-items/select\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', groupIdKey: 'categoryId' }}\n {...props}\n />\n )),\n { displayName: 'SupplierItemFilter', defaultLabel: 'Supplier Item', defaultName: 'supplierItemId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\nimport type { SelectOption } from '../../components/Select/types';\nimport { formatCurrency } from '../../utils/money';\n\nexport type SupplierItemSelectorParams = {\n supplierId?: string;\n // Excludes supplier items whose (inventoryItemId, uomId) is already on this PO. Used by the PO add-line dialog.\n excludeOnPurchaseOrderId?: string;\n // Excludes supplier items whose (inventoryItemId, uomId) is already on this goods receipt.\n // Used by the GR add-item dialog when the receipt has no linked PO.\n excludeOnGoodsReceiptId?: string;\n};\n\nexport type SupplierItemSelectorProps = Omit<SelectProps, 'optionsEndpoint' | 'params'> & {\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured Select for inventory items offered by suppliers.\n// Hits GET /commerce-api/supplier-items/select.\n// Pass supplierId via `params` to scope results to a single supplier; otherwise\n// results span all suppliers and each option includes a `description` with the\n// supplier name.\nconst DEFAULT_FIELD_KEYS = {\n valueKey: 'id',\n labelKey: 'name',\n descriptionKey: 'tracking',\n groupIdKey: 'categoryId',\n additionalKeys: 'symbol,unitPrice,currencyCode,allowDecimal,inventoryItemId,uomId',\n} as const;\n\nfunction defaultTransformLabel(label: string, option: SelectOption): string {\n const baseLabel = label.replace(/\\s-\\s[^-]+$/, '');\n const uom = typeof option.additionals?.symbol === 'string' ? option.additionals.symbol.trim() : '';\n const rawPrice = option.additionals?.unitPrice;\n const currencyCode =\n typeof option.additionals?.currencyCode === 'string' ? option.additionals.currencyCode : null;\n const unitPrice =\n rawPrice != null && currencyCode != null ? formatCurrency(String(rawPrice), currencyCode) : null;\n if (unitPrice && uom) return `${baseLabel} - ${unitPrice}/${uom}`;\n if (unitPrice) return `${baseLabel} - ${unitPrice}`;\n if (uom) return `${baseLabel} (${uom})`;\n return baseLabel;\n}\n\n// Humanises the `inventory_items.tracking` enum (`quantity` / `lot` / `serial` / `lot_serial`)\n// that the backend serves as the option description.\nfunction defaultTransformDescription(value: string): string {\n switch (value) {\n case 'quantity':\n return 'Quantity';\n case 'lot':\n return 'Lot';\n case 'serial':\n return 'Serial';\n case 'lot_serial':\n return 'Lot + Serial';\n default:\n return value.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n }\n}\n\nexport const SupplierItemSelector = forwardRef<HTMLButtonElement, SupplierItemSelectorProps>(\n ({ fieldKeys, params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n searchable\n optionsEndpoint=\"commerce-api/supplier-items/select\"\n params={params}\n transformLabel={defaultTransformLabel}\n transformDescription={defaultTransformDescription}\n {...props}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n ),\n);\nSupplierItemSelector.displayName = 'SupplierItemSelector';\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SupplierItemSelector.js","sources":["../lib/selects/supplier-item/SupplierItemFilter.tsx","../lib/selects/supplier-item/SupplierItemSelector.tsx"],"sourcesContent":["import { forwardRef } from 'react';\nimport { SelectFilter, type SelectFilterProps } from '../../components/Select/SelectFilter';\nimport type { SupplierItemSelectorParams } from './SupplierItemSelector';\n\nexport type SupplierItemFilterProps = Omit<SelectFilterProps, 'optionsEndpoint' | 'name' | 'params'> & {\n name?: string;\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured SelectFilter for supplier-item filtering. Shares the params shape with\n// SupplierItemSelector so the same scoping rules (supplierId / purchaseOrderId / excludeOn*)\n// apply identically in tables and forms.\nexport const SupplierItemFilter = Object.assign(\n forwardRef<HTMLButtonElement, SupplierItemFilterProps>((props, ref) => (\n <SelectFilter\n ref={ref}\n name=\"supplierItemId\"\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n optionsEndpoint=\"commerce-api/supplier-items/select\"\n fieldKeys={{ valueKey: 'id', labelKey: 'name', groupIdKey: 'categoryId' }}\n {...props}\n />\n )),\n { displayName: 'SupplierItemFilter', defaultLabel: 'Supplier Item', defaultName: 'supplierItemId' },\n);\n","import { forwardRef } from 'react';\nimport { Select, type SelectProps } from '../../components/Select/Select';\nimport type { SelectOption } from '../../components/Select/types';\nimport { formatCurrency } from '../../utils/money';\n\nexport type SupplierItemSelectorParams = {\n supplierId?: string;\n // Excludes supplier items whose (inventoryItemId, uomId) is already on this PO. Used by the PO add-line dialog.\n excludeOnPurchaseOrderId?: string;\n // Excludes supplier items whose (inventoryItemId, uomId) is already on this goods receipt.\n // Used by the GR add-item dialog when the receipt has no linked PO.\n excludeOnGoodsReceiptId?: string;\n};\n\nexport type SupplierItemSelectorProps = Omit<SelectProps, 'optionsEndpoint' | 'params'> & {\n params?: SupplierItemSelectorParams;\n};\n\n// Pre-configured Select for inventory items offered by suppliers.\n// Hits GET /commerce-api/supplier-items/select.\n// Pass supplierId via `params` to scope results to a single supplier; otherwise\n// results span all suppliers and each option includes a `description` with the\n// supplier name.\nconst DEFAULT_FIELD_KEYS = {\n valueKey: 'id',\n labelKey: 'name',\n descriptionKey: 'tracking',\n groupIdKey: 'categoryId',\n additionalKeys: 'symbol,unitPrice,currencyCode,allowDecimal,inventoryItemId,uomId',\n} as const;\n\nfunction defaultTransformLabel(label: string, option: SelectOption): string {\n const baseLabel = label.replace(/\\s-\\s[^-]+$/, '');\n const uom = typeof option.additionals?.symbol === 'string' ? option.additionals.symbol.trim() : '';\n const rawPrice = option.additionals?.unitPrice;\n const currencyCode = typeof option.additionals?.currencyCode === 'string' ? option.additionals.currencyCode : null;\n const unitPrice = rawPrice != null && currencyCode != null ? formatCurrency(String(rawPrice), currencyCode) : null;\n if (unitPrice && uom) return `${baseLabel} - ${unitPrice}/${uom}`;\n if (unitPrice) return `${baseLabel} - ${unitPrice}`;\n if (uom) return `${baseLabel} (${uom})`;\n return baseLabel;\n}\n\n// Humanises the `inventory_items.tracking` enum (`quantity` / `lot` / `serial` / `lot_serial`)\n// that the backend serves as the option description.\nfunction defaultTransformDescription(value: string): string {\n switch (value) {\n case 'quantity':\n return 'Quantity';\n case 'lot':\n return 'Lot';\n case 'serial':\n return 'Serial';\n case 'lot_serial':\n return 'Lot + Serial';\n default:\n return value.replace(/_/g, ' ').replace(/\\b\\w/g, (c) => c.toUpperCase());\n }\n}\n\nexport const SupplierItemSelector = forwardRef<HTMLButtonElement, SupplierItemSelectorProps>(\n ({ fieldKeys, params, ...props }, ref) => (\n <Select\n ref={ref}\n label=\"Supplier Item\"\n placeholder=\"Select supplier item\"\n searchable\n optionsEndpoint=\"commerce-api/supplier-items/select\"\n params={params}\n transformLabel={defaultTransformLabel}\n transformDescription={defaultTransformDescription}\n {...props}\n fieldKeys={{ ...DEFAULT_FIELD_KEYS, ...fieldKeys }}\n />\n ),\n);\nSupplierItemSelector.displayName = 'SupplierItemSelector';\n"],"names":[],"mappings":"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"}
package/dist/Switch.js CHANGED
@@ -2,11 +2,11 @@ import { jsxs, jsx } from 'react/jsx-runtime';
2
2
  import * as React from 'react';
3
3
  import React__default from 'react';
4
4
  import { F as Field, e as FieldLabel, c as FieldError } from './field.js';
5
- import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index18.js';
5
+ import { u as useControllableState, P as Primitive, c as composeEventHandlers } from './index19.js';
6
6
  import { u as useComposedRefs } from './index11.js';
7
- import { c as createContextScope } from './index19.js';
8
- import { u as usePrevious } from './index35.js';
9
- import { u as useSize } from './index36.js';
7
+ import { c as createContextScope } from './index20.js';
8
+ import { u as usePrevious } from './index36.js';
9
+ import { u as useSize } from './index37.js';
10
10
  import { c as cn } from './utils.js';
11
11
 
12
12
  var SWITCH_NAME = "Switch";
@@ -212,6 +212,8 @@ const Switch = React__default.forwardRef(
212
212
  }
213
213
  );
214
214
  Switch.displayName = "Switch";
215
+ const CompactSwitch = ({ size = "sm", ...props }) => /* @__PURE__ */ jsx(Switch$1, { size, ...props });
216
+ CompactSwitch.displayName = "CompactSwitch";
215
217
 
216
- export { Switch as S, Switch$1 as a };
218
+ export { CompactSwitch as C, Switch as S, Switch$1 as a };
217
219
  //# sourceMappingURL=Switch.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n /**\n * Label for the switch\n */\n label?: React.ReactNode;\n\n /**\n * Helper text or description displayed beside the toggle — required for field layout\n */\n description: React.ReactNode;\n\n /**\n * Error message to display below the switch\n */\n error?: string;\n}\n\n/**\n * Switch component for toggling between two states (on/off).\n *\n * Description is required. The label and description stack vertically on the\n * left, with the toggle pinned to the right of the row.\n *\n * @example\n * ```tsx\n * // With Field system (form usage)\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email updates about your account\"\n * />\n *\n * // In a Form component\n * <Form form={form} onSubmit={handleSubmit}>\n * <Switch\n * name=\"marketing\"\n * label=\"Marketing emails\"\n * description=\"Receive promotional content\"\n * />\n * </Form>\n * ```\n */\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n return (\n <Field data-disabled={props.disabled} data-invalid={hasError}>\n <div className=\"flex min-h-9 items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"font-normal cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"text-sm text-muted-foreground leading-normal cursor-pointer\"\n >\n {description}\n </label>\n </div>\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />\n </div>\n\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"Switch.js","sources":["../node_modules/.pnpm/@radix-ui+react-switch@1.2.6_@types+react-dom@19.2.3_@types+react@19.2.14__@types+react_c3445f43106be928beab9f2bef095c25/node_modules/@radix-ui/react-switch/dist/index.mjs","../shadcn/shadcnSwitch/Switch.tsx","../lib/components/Switch/Switch.tsx"],"sourcesContent":["\"use client\";\n\n// src/switch.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar SWITCH_NAME = \"Switch\";\nvar [createSwitchContext, createSwitchScope] = createContextScope(SWITCH_NAME);\nvar [SwitchProvider, useSwitchContext] = createSwitchContext(SWITCH_NAME);\nvar Switch = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSwitch,\n name,\n checked: checkedProp,\n defaultChecked,\n required,\n disabled,\n value = \"on\",\n onCheckedChange,\n form,\n ...switchProps\n } = props;\n const [button, setButton] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setButton(node));\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = button ? form || !!button.closest(\"form\") : true;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: SWITCH_NAME\n });\n return /* @__PURE__ */ jsxs(SwitchProvider, { scope: __scopeSwitch, checked, disabled, children: [\n /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"switch\",\n \"aria-checked\": checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...switchProps,\n ref: composedRefs,\n onClick: composeEventHandlers(props.onClick, (event) => {\n setChecked((prevChecked) => !prevChecked);\n if (isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n SwitchBubbleInput,\n {\n control: button,\n bubbles: !hasConsumerStoppedPropagationRef.current,\n name,\n value,\n checked,\n required,\n disabled,\n form,\n style: { transform: \"translateX(-100%)\" }\n }\n )\n ] });\n }\n);\nSwitch.displayName = SWITCH_NAME;\nvar THUMB_NAME = \"SwitchThumb\";\nvar SwitchThumb = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSwitch, ...thumbProps } = props;\n const context = useSwitchContext(THUMB_NAME, __scopeSwitch);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...thumbProps,\n ref: forwardedRef\n }\n );\n }\n);\nSwitchThumb.displayName = THUMB_NAME;\nvar BUBBLE_INPUT_NAME = \"SwitchBubbleInput\";\nvar SwitchBubbleInput = React.forwardRef(\n ({\n __scopeSwitch,\n control,\n checked,\n bubbles = true,\n ...props\n }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(ref, forwardedRef);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = ref.current;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n setChecked.call(input, checked);\n input.dispatchEvent(event);\n }\n }, [prevChecked, checked, bubbles]);\n return /* @__PURE__ */ jsx(\n \"input\",\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: checked,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0\n }\n }\n );\n }\n);\nSwitchBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction getState(checked) {\n return checked ? \"checked\" : \"unchecked\";\n}\nvar Root = Switch;\nvar Thumb = SwitchThumb;\nexport {\n Root,\n Switch,\n SwitchThumb,\n Thumb,\n createSwitchScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as SwitchPrimitive from '@radix-ui/react-switch';\nimport type * as React from 'react';\n\nimport { cn } from '../utils';\n\nfunction Switch({\n className,\n size = 'default',\n ...props\n}: React.ComponentProps<typeof SwitchPrimitive.Root> & {\n size?: 'sm' | 'default' | 'lg';\n}) {\n return (\n <SwitchPrimitive.Root\n data-slot=\"switch\"\n data-size={size}\n className={cn(\n 'peer group/switch relative inline-flex shrink-0 items-center rounded-full border border-transparent outline-none transition-all focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] data-[size=lg]:h-[24px] data-[size=lg]:w-[40px]',\n className,\n )}\n {...props}\n >\n <SwitchPrimitive.Thumb\n data-slot=\"switch-thumb\"\n className=\"bg-primary-foreground shadow-sm pointer-events-none block rounded-full ring-0 transition-transform group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=lg]/switch:size-5 data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0\"\n />\n </SwitchPrimitive.Root>\n );\n}\n\nexport { Switch };\n","import React from 'react';\nimport { Field, FieldError, FieldLabel } from '../../../shadcn/shadcnField';\nimport { Switch as ShadcnSwitch } from '../../../shadcn/shadcnSwitch';\n\nexport interface SwitchProps extends React.ComponentPropsWithoutRef<typeof ShadcnSwitch> {\n /**\n * Label for the switch\n */\n label?: React.ReactNode;\n\n /**\n * Helper text or description displayed beside the toggle — required for field layout\n */\n description: React.ReactNode;\n\n /**\n * Error message to display below the switch\n */\n error?: string;\n}\n\n/**\n * Switch component for toggling between two states (on/off).\n *\n * Description is required. The label and description stack vertically on the\n * left, with the toggle pinned to the right of the row.\n *\n * @example\n * ```tsx\n * // With Field system (form usage)\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email updates about your account\"\n * />\n *\n * // In a Form component\n * <Form form={form} onSubmit={handleSubmit}>\n * <Switch\n * name=\"marketing\"\n * label=\"Marketing emails\"\n * description=\"Receive promotional content\"\n * />\n * </Form>\n * ```\n */\nexport const Switch = React.forwardRef<React.ElementRef<typeof ShadcnSwitch>, SwitchProps>(\n ({ label, description, error, id, size = 'lg', ...props }, ref) => {\n const generatedId = React.useId();\n const fieldId = id || generatedId;\n const hasError = !!error;\n\n return (\n <Field data-disabled={props.disabled} data-invalid={hasError}>\n <div className=\"flex min-h-9 items-center justify-between gap-4\">\n <div className=\"flex flex-col gap-0.5\">\n {label && (\n <FieldLabel htmlFor={fieldId} className=\"font-normal cursor-pointer\">\n {label}\n </FieldLabel>\n )}\n <label\n htmlFor={fieldId}\n id={`${fieldId}-description`}\n className=\"text-sm text-muted-foreground leading-normal cursor-pointer\"\n >\n {description}\n </label>\n </div>\n <ShadcnSwitch\n {...props}\n ref={ref}\n id={fieldId}\n size={size}\n aria-describedby={description || error ? `${fieldId}-description ${fieldId}-error` : undefined}\n aria-invalid={hasError}\n />\n </div>\n\n {error && <FieldError id={`${fieldId}-error`}>{error}</FieldError>}\n </Field>\n );\n },\n);\n\nSwitch.displayName = 'Switch';\n\nexport type CompactSwitchProps = React.ComponentProps<typeof ShadcnSwitch>;\n\n/**\n * A bare, compact switch — the native shadcn switch with no Field wrapper, label, or description.\n * Defaults to the `sm` size; intended for dense layouts like table/matrix cells. Use `Switch` for\n * form-field usage (label + description + error).\n *\n * @example\n * ```tsx\n * <CompactSwitch checked={on} onCheckedChange={setOn} />\n * ```\n */\nexport const CompactSwitch: React.FC<CompactSwitchProps> = ({ size = 'sm', ...props }) => (\n <ShadcnSwitch size={size} {...props} />\n);\n\nCompactSwitch.displayName = 'CompactSwitch';\n"],"names":["Switch","SwitchPrimitive.Root","SwitchPrimitive.Thumb","React","ShadcnSwitch"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,9 +1,9 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { C as Content, L as List, T as Trigger, R as Root2 } from './index17.js';
2
+ import { C as Content, L as List, T as Trigger, R as Root2 } from './index18.js';
3
3
  import { useState, useId } from 'react';
4
4
  import { useParams, useNavigate, useLocation } from 'react-router-dom';
5
5
  import { c as cn } from './utils.js';
6
- import { L as LayoutGroup } from './index38.js';
6
+ import { L as LayoutGroup } from './index39.js';
7
7
  import { m as motion, A as AnimatePresence } from './proxy.js';
8
8
  import { S as Skeleton } from './Skeleton.js';
9
9