pixelize-design-library 2.4.2-beta.64 → 2.4.2-beta.66

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 (517) hide show
  1. package/CHANGELOG.md +520 -21
  2. package/COMPONENT-GOTCHAS.md +187 -95
  3. package/DESIGN-GUIDE.md +54 -10
  4. package/README.md +37 -3
  5. package/dist/Components/Accordion/Accordion.js +11 -8
  6. package/dist/Components/Accordion/AccordionProps.d.ts +4 -0
  7. package/dist/Components/Accordion/accordionColors.js +1 -2
  8. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
  9. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChartProps.d.ts +2 -2
  10. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts +1 -1
  11. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
  12. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChartProps.d.ts +3 -1
  13. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.d.ts +2 -0
  14. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.js +13 -0
  15. package/dist/Components/AppSwitcher/AppSwitcher.js +6 -3
  16. package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +3 -1
  17. package/dist/Components/AppSwitcher/AppSwitcherProps.js +18 -11
  18. package/dist/Components/AppSwitcher/pixelizeSuite.d.ts +24 -0
  19. package/dist/Components/AppSwitcher/pixelizeSuite.js +71 -0
  20. package/dist/Components/AppearanceSettings/AppearanceSettings.js +3 -3
  21. package/dist/Components/AppearanceSettings/AppearanceSettingsProps.d.ts +2 -2
  22. package/dist/Components/Avatar/avatarColorway.d.ts +2 -2
  23. package/dist/Components/Avatar/avatarColorway.js +7 -6
  24. package/dist/Components/Breadcrumbs/BreadcrumbsProps.d.ts +1 -1
  25. package/dist/Components/Button/Button.styles.js +5 -2
  26. package/dist/Components/Button/ButtonProps.d.ts +2 -4
  27. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
  28. package/dist/Components/CalendarGrid/CalendarGrid.js +5 -3
  29. package/dist/Components/CalendarGrid/CalendarGridProps.d.ts +1 -1
  30. package/dist/Components/Card/Card.d.ts +1 -0
  31. package/dist/Components/Card/Card.js +1 -0
  32. package/dist/Components/Checkbox/Checkbox.styles.js +3 -1
  33. package/dist/Components/CheckoutKit/selectable.d.ts +3 -1
  34. package/dist/Components/CheckoutKit/selectable.js +10 -7
  35. package/dist/Components/CheckoutKit/tonalHover.d.ts +2 -0
  36. package/dist/Components/CheckoutKit/tonalHover.js +6 -0
  37. package/dist/Components/ChoiceCard/ChoiceCard.d.ts +1 -1
  38. package/dist/Components/ChoiceCard/ChoiceCard.js +2 -1
  39. package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +6 -0
  40. package/dist/Components/Common/FieldMessage.d.ts +1 -0
  41. package/dist/Components/Common/FormLabel.d.ts +1 -1
  42. package/dist/Components/Common/FormLabel.js +4 -3
  43. package/dist/Components/Common/HelperText.d.ts +2 -2
  44. package/dist/Components/Common/HelperText.js +1 -2
  45. package/dist/Components/Common/activationKey.d.ts +5 -0
  46. package/dist/Components/Common/activationKey.js +12 -0
  47. package/dist/Components/Common/dataAttributes.d.ts +4 -0
  48. package/dist/Components/Common/fieldMessageStyles.js +2 -1
  49. package/dist/Components/Common/findSlot.d.ts +2 -0
  50. package/dist/Components/Common/findSlot.js +24 -0
  51. package/dist/Components/Common/surfaceFocusRing.d.ts +1 -0
  52. package/dist/Components/Common/surfaceFocusRing.js +7 -0
  53. package/dist/Components/ConfirmDialog/ConfirmDialog.js +17 -5
  54. package/dist/Components/ConfirmDialog/ConfirmDialogProps.d.ts +38 -10
  55. package/dist/Components/CopyButton/CopyButton.d.ts +4 -1
  56. package/dist/Components/CopyButton/CopyButton.js +5 -8
  57. package/dist/Components/CouponField/CouponField.js +5 -2
  58. package/dist/Components/CustomModulesTable/CustomModulesTable.js +3 -1
  59. package/dist/Components/DatePicker/CalendarPanel.d.ts +1 -0
  60. package/dist/Components/DatePicker/CalendarPanel.js +3 -1
  61. package/dist/Components/DatePicker/DatePicker.js +24 -26
  62. package/dist/Components/DatePicker/DatePickerProps.d.ts +8 -0
  63. package/dist/Components/DatePicker/PickerPortal.js +1 -1
  64. package/dist/Components/DatePicker/RangeDatePicker.d.ts +7 -0
  65. package/dist/Components/DatePicker/RangeDatePicker.js +10 -29
  66. package/dist/Components/DatePicker/SingleDatePicker.js +5 -21
  67. package/dist/Components/DatePicker/TimeOnlyPicker.js +2 -20
  68. package/dist/Components/DescriptionList/DescriptionList.js +1 -1
  69. package/dist/Components/DetailSections/DetailSections.js +2 -1
  70. package/dist/Components/Divider/Divider.d.ts +3 -3
  71. package/dist/Components/Divider/Divider.js +3 -3
  72. package/dist/Components/Drawer/Drawer.d.ts +3 -1
  73. package/dist/Components/Drawer/Drawer.js +28 -26
  74. package/dist/Components/Drawer/DrawerProps.d.ts +4 -0
  75. package/dist/Components/Dropdown/DropDown.js +6 -21
  76. package/dist/Components/Editor/Editor.js +6 -2
  77. package/dist/Components/Editor/EditorProps.d.ts +17 -1
  78. package/dist/Components/Editor/editorLabels.js +1 -0
  79. package/dist/Components/Editor/editorTokenStyles.d.ts +8 -0
  80. package/dist/Components/Editor/editorTokenStyles.js +9 -1
  81. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +1 -1
  82. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +9 -2
  83. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +15 -1
  84. package/dist/Components/EmptyState/EmptyStateProps.d.ts +21 -0
  85. package/dist/Components/EmptyState/FilteredEmptyState.d.ts +5 -0
  86. package/dist/Components/EmptyState/FilteredEmptyState.js +23 -0
  87. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +1 -0
  88. package/dist/Components/FilePreview/FilePreview.js +7 -3
  89. package/dist/Components/FilePreview/FilePreviewProps.d.ts +2 -1
  90. package/dist/Components/FileUpload/FileUpload.js +8 -9
  91. package/dist/Components/FileUpload/FileUploadProps.d.ts +2 -2
  92. package/dist/Components/FileUploader/FileUploader.js +5 -6
  93. package/dist/Components/FilterSidebar/FilterSidebar.d.ts +7 -9
  94. package/dist/Components/FilterSidebar/FilterSidebar.js +90 -233
  95. package/dist/Components/FilterSidebar/OptionsSection.d.ts +14 -0
  96. package/dist/Components/FilterSidebar/OptionsSection.js +46 -0
  97. package/dist/Components/FilterSidebar/RangeSection.d.ts +17 -0
  98. package/dist/Components/FilterSidebar/RangeSection.js +80 -0
  99. package/dist/Components/FilterSidebar/SectionHeader.d.ts +13 -0
  100. package/dist/Components/FilterSidebar/SectionHeader.js +29 -0
  101. package/dist/Components/FilterSidebar/useStableCallback.d.ts +1 -0
  102. package/dist/Components/FilterSidebar/useStableCallback.js +12 -0
  103. package/dist/Components/Form/FormWrapper.d.ts +7 -7
  104. package/dist/Components/Form/FormWrapper.js +5 -3
  105. package/dist/Components/FormDrawer/FormDrawer.d.ts +1 -1
  106. package/dist/Components/FormDrawer/FormDrawer.js +3 -3
  107. package/dist/Components/FormDrawer/FormDrawerProps.d.ts +2 -0
  108. package/dist/Components/FormField/FormField.js +1 -1
  109. package/dist/Components/Header/Header.js +1 -1
  110. package/dist/Components/Header/HeaderActions.js +4 -2
  111. package/dist/Components/IconButton/IconButtonProps.d.ts +2 -1
  112. package/dist/Components/Input/TextInput.js +2 -2
  113. package/dist/Components/Input/TextInputProps.d.ts +3 -1
  114. package/dist/Components/KanbanBoard/AccountCard.js +1 -1
  115. package/dist/Components/KanbanBoard/KanbanBoard.d.ts +1 -1
  116. package/dist/Components/KanbanBoard/KanbanBoard.js +11 -7
  117. package/dist/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  118. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +2 -1
  119. package/dist/Components/LazyWrapper/LazyWrapper.js +1 -1
  120. package/dist/Components/MediaViewer/MediaViewer.js +4 -3
  121. package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  122. package/dist/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  123. package/dist/Components/MediaViewer/components/MediaScrubber.js +7 -2
  124. package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  125. package/dist/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  126. package/dist/Components/MediaViewer/hooks/useFileViewer.d.ts +1 -0
  127. package/dist/Components/MediaViewer/mediaItems.d.ts +1 -0
  128. package/dist/Components/MediaViewer/mediaItems.js +5 -0
  129. package/dist/Components/Modal/Modal.d.ts +1 -0
  130. package/dist/Components/Modal/Modal.js +7 -25
  131. package/dist/Components/Modal/dialogNaming.d.ts +8 -0
  132. package/dist/Components/Modal/dialogNaming.js +21 -0
  133. package/dist/Components/Modal/warnDroppedSlotChildren.d.ts +1 -1
  134. package/dist/Components/Modal/warnDroppedSlotChildren.js +7 -3
  135. package/dist/Components/NavLauncher/LauncherTabs.js +4 -3
  136. package/dist/Components/NavLauncher/NavLauncher.d.ts +1 -1
  137. package/dist/Components/NavLauncher/NavLauncher.js +288 -56
  138. package/dist/Components/NavLauncher/NavLauncherProps.d.ts +83 -5
  139. package/dist/Components/NavLauncher/ScopeBar.d.ts +14 -0
  140. package/dist/Components/NavLauncher/ScopeBar.js +139 -0
  141. package/dist/Components/NavLauncher/engine/distance.d.ts +4 -0
  142. package/dist/Components/NavLauncher/engine/distance.js +41 -0
  143. package/dist/Components/NavLauncher/engine/engine.d.ts +84 -0
  144. package/dist/Components/NavLauncher/engine/engine.js +472 -0
  145. package/dist/Components/NavLauncher/engine/fold.d.ts +15 -0
  146. package/dist/Components/NavLauncher/engine/fold.js +84 -0
  147. package/dist/Components/NavLauncher/engine/index.d.ts +21 -0
  148. package/dist/Components/NavLauncher/engine/index.js +17 -0
  149. package/dist/Components/NavLauncher/launcherParts.d.ts +14 -0
  150. package/dist/Components/NavLauncher/launcherParts.js +51 -13
  151. package/dist/Components/NavLauncher/match.d.ts +13 -2
  152. package/dist/Components/NavLauncher/match.js +26 -12
  153. package/dist/Components/NavLauncher/searchLayout.d.ts +61 -0
  154. package/dist/Components/NavLauncher/searchLayout.js +110 -0
  155. package/dist/Components/NavLauncher/spotlight.d.ts +39 -0
  156. package/dist/Components/NavLauncher/spotlight.js +202 -0
  157. package/dist/Components/NavLauncher/spotlightParts.d.ts +53 -0
  158. package/dist/Components/NavLauncher/spotlightParts.js +121 -0
  159. package/dist/Components/NavLauncher/useCopiedFlash.d.ts +6 -0
  160. package/dist/Components/NavLauncher/useCopiedFlash.js +21 -0
  161. package/dist/Components/NavigationBar/NavigationBar.js +6 -5
  162. package/dist/Components/NoteTextArea/NoteTextArea.js +12 -17
  163. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +5 -3
  164. package/dist/Components/Notification/Notification.js +19 -21
  165. package/dist/Components/Notification/NotificationProps.d.ts +1 -1
  166. package/dist/Components/NotificationBell/notificationHelpers.d.ts +16 -1
  167. package/dist/Components/NotificationBell/notificationHelpers.js +13 -7
  168. package/dist/Components/OffersList/OffersList.js +4 -2
  169. package/dist/Components/OptionChip/OptionChip.js +3 -2
  170. package/dist/Components/OptionChip/optionInk.js +4 -2
  171. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  172. package/dist/Components/OrgSwitcher/OrgSwitcher.js +13 -6
  173. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +1 -1
  174. package/dist/Components/OrganizationDetails/OrganizationDetails.js +4 -7
  175. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +4 -2
  176. package/dist/Components/PdfViewer/PdfViewer.d.ts +1 -0
  177. package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +1 -1
  178. package/dist/Components/PlanPill/PlanPill.js +4 -2
  179. package/dist/Components/PlanPill/PlanPillProps.d.ts +1 -1
  180. package/dist/Components/ProductCard/ProductCardAction.js +2 -1
  181. package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
  182. package/dist/Components/ProductDetails/ProductDetails.js +2 -1
  183. package/dist/Components/ProfileCard/ProfileCard.d.ts +1 -0
  184. package/dist/Components/ProfileCard/ProfileCard.js +12 -26
  185. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  186. package/dist/Components/ProgressBar/ProgressBar.js +2 -1
  187. package/dist/Components/QuantityStepper/QuantityStepper.js +5 -2
  188. package/dist/Components/QueryState/QueryStateBoundary.d.ts +1 -1
  189. package/dist/Components/QueryState/QueryStateBoundary.js +5 -1
  190. package/dist/Components/QueryState/QueryStateProps.d.ts +6 -2
  191. package/dist/Components/RadioButton/RadioButton.js +2 -3
  192. package/dist/Components/RolesPermission/RolesPermission.js +12 -8
  193. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +1 -0
  194. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +4 -1
  195. package/dist/Components/ScrollbarBox/ScrollbarBox.js +10 -4
  196. package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -1
  197. package/dist/Components/SearchSelect/SearchSelect.js +8 -5
  198. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +3 -3
  199. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  200. package/dist/Components/SegmentedControl/SegmentedControl.js +1 -1
  201. package/dist/Components/Select/Select.js +6 -0
  202. package/dist/Components/Select/SelectNative.d.ts +16 -0
  203. package/dist/Components/Select/SelectPopup.js +170 -63
  204. package/dist/Components/Select/SelectProps.d.ts +30 -2
  205. package/dist/Components/Select/groupedWindow.d.ts +21 -0
  206. package/dist/Components/Select/groupedWindow.js +50 -0
  207. package/dist/Components/SelectSearch/SelectSearch.d.ts +1 -1
  208. package/dist/Components/SelectSearch/SelectSearch.js +48 -38
  209. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +3 -3
  210. package/dist/Components/SelectV2/SelectV2.d.ts +1 -1
  211. package/dist/Components/SelectV2/SelectV2.js +1 -1
  212. package/dist/Components/SelectV2/SelectV2Props.d.ts +3 -3
  213. package/dist/Components/SideBar/SecondaryBar.js +3 -2
  214. package/dist/Components/SideBar/components/MenuItemBox.js +3 -2
  215. package/dist/Components/SideBar/components/MenuItems.js +1 -1
  216. package/dist/Components/SideBar/components/OtherApps.js +2 -2
  217. package/dist/Components/SideBar/components/PinnedSection.js +1 -1
  218. package/dist/Components/SideBar/sidebarScale.d.ts +2 -2
  219. package/dist/Components/SideBar/sidebarScale.js +2 -2
  220. package/dist/Components/SignInActivityTable/SignInActivityTable.js +7 -2
  221. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +1 -1
  222. package/dist/Components/SignInActivityTable/scrollRegionRing.d.ts +10 -0
  223. package/dist/Components/SignInActivityTable/scrollRegionRing.js +14 -0
  224. package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -1
  225. package/dist/Components/Slider/Slider.d.ts +2 -0
  226. package/dist/Components/Slider/Slider.js +5 -4
  227. package/dist/Components/StageProgress/StageItem.js +2 -1
  228. package/dist/Components/StageProgress/StageProgress.js +8 -2
  229. package/dist/Components/StageProgress/StageProgressProps.d.ts +2 -0
  230. package/dist/Components/StageProgress/StepperStage.js +2 -1
  231. package/dist/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  232. package/dist/Components/Table/Table.js +5 -3
  233. package/dist/Components/Table/components/HeaderActions.js +5 -3
  234. package/dist/Components/Table/components/TableBody.js +13 -8
  235. package/dist/Components/Table/components/TableGroupRow.js +2 -1
  236. package/dist/Components/Table/components/TableHeader.js +17 -21
  237. package/dist/Components/Table/components/TableLoading.js +8 -2
  238. package/dist/Components/Table/components/rowDetail.js +3 -2
  239. package/dist/Components/Table/filters/ActiveFilters.js +6 -3
  240. package/dist/Components/Table/filters/CompactSelect.js +2 -1
  241. package/dist/Components/Table/filters/FilterDatePicker.d.ts +6 -0
  242. package/dist/Components/Table/filters/FilterDatePicker.js +61 -0
  243. package/dist/Components/Table/filters/LeftFilterPane.d.ts +1 -0
  244. package/dist/Components/Table/filters/LeftFilterPane.js +14 -6
  245. package/dist/Components/Table/hooks/useTable.js +11 -7
  246. package/dist/Components/Table/settings/ManageColumns.js +4 -3
  247. package/dist/Components/Table/settings/TableSettings.js +4 -4
  248. package/dist/Components/Tabs/Tabs.d.ts +1 -0
  249. package/dist/Components/Tabs/Tabs.js +1 -0
  250. package/dist/Components/Tabs/components/CountBadge.d.ts +1 -0
  251. package/dist/Components/Tabs/components/TabList.d.ts +1 -0
  252. package/dist/Components/Tabs/components/TabList.js +1 -0
  253. package/dist/Components/Tabs/components/TabPanel.d.ts +1 -0
  254. package/dist/Components/Tabs/components/TabPanel.js +1 -0
  255. package/dist/Components/Tabs/tabStyles.js +4 -2
  256. package/dist/Components/Tag/Tag.js +5 -4
  257. package/dist/Components/Tag/Tag.styles.js +5 -4
  258. package/dist/Components/Tag/TagProps.d.ts +4 -1
  259. package/dist/Components/Tag/tagDot.js +10 -3
  260. package/dist/Components/TagInput/TagInput.js +6 -5
  261. package/dist/Components/TagInput/TagInputProps.d.ts +15 -0
  262. package/dist/Components/TagInput/tagEntries.d.ts +7 -1
  263. package/dist/Components/TagInput/tagEntries.js +18 -5
  264. package/dist/Components/TimePicker/TimePicker.js +7 -3
  265. package/dist/Components/TimePicker/TimePickerProps.d.ts +2 -0
  266. package/dist/Components/Timeline/Timeline.js +13 -9
  267. package/dist/Components/Toaster/Toaster.js +2 -1
  268. package/dist/Components/Toggle/TableToggle.d.ts +1 -1
  269. package/dist/Components/Toggle/TableToggle.js +1 -1
  270. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -2
  271. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +1 -1
  272. package/dist/Components/UserDetails/UserDetails.js +5 -7
  273. package/dist/Components/WishlistToggle/WishlistToggle.js +2 -1
  274. package/dist/Components/WizardDialog/WizardDialog.d.ts +1 -1
  275. package/dist/Components/WizardDialog/WizardDialog.js +15 -3
  276. package/dist/Components/WizardDialog/WizardDialogProps.d.ts +5 -3
  277. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +11 -1
  278. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +6 -3
  279. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +16 -15
  280. package/dist/Hooks/useOutsideMouseDown.d.ts +11 -0
  281. package/dist/Hooks/useOutsideMouseDown.js +30 -0
  282. package/dist/Hooks/usePreferences.js +30 -12
  283. package/dist/Hooks/useScrollableRegion.d.ts +17 -0
  284. package/dist/Hooks/useScrollableRegion.js +36 -0
  285. package/dist/Hooks/useSidebarPrefs.d.ts +1 -0
  286. package/dist/Theme/chakra/Menu.styles.d.ts +4 -0
  287. package/dist/Theme/chakra/Menu.styles.js +6 -0
  288. package/dist/Theme/chakra/componentStyles.d.ts +4 -0
  289. package/dist/Theme/chakra/componentStyles.js +1 -1
  290. package/dist/Theme/chakra/createBrandTheme.d.ts +1 -0
  291. package/dist/Theme/chakra/focusRing.styles.d.ts +1 -1
  292. package/dist/Theme/chakra/focusRing.styles.js +3 -3
  293. package/dist/Theme/chakra/paletteFromTheme.d.ts +2 -1
  294. package/dist/Theme/chakra/paletteFromTheme.js +18 -4
  295. package/dist/Theme/chakra/ringShadow.d.ts +3 -0
  296. package/dist/Theme/chakra/ringShadow.js +7 -0
  297. package/dist/Theme/provider/PixelizeThemeProvider.d.ts +1 -0
  298. package/dist/Theme/provider/ThemeSwitcher.d.ts +1 -0
  299. package/dist/Theme/provider/ThemeSwitcher.js +1 -1
  300. package/dist/Theme/testing/testPalette.d.ts +1 -0
  301. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +2 -1
  302. package/dist/Theme/tokens/builders/buildDarkPalette.js +5 -5
  303. package/dist/Theme/tokens/builders/filledSurface.js +3 -2
  304. package/dist/Theme/tokens/builders/focusRing.js +4 -1
  305. package/dist/Theme/tokens/builders/paletteScale.d.ts +2 -0
  306. package/dist/Theme/tokens/builders/paletteScale.js +10 -0
  307. package/dist/Theme/tokens/types.d.ts +1 -0
  308. package/dist/Utils/accountHandoff.d.ts +3 -0
  309. package/dist/Utils/price.d.ts +1 -0
  310. package/dist/Utils/tabular.d.ts +30 -0
  311. package/dist/Utils/tabular.js +61 -0
  312. package/dist/esm/Components/Accordion/Accordion.js +11 -8
  313. package/dist/esm/Components/Accordion/accordionColors.js +2 -3
  314. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +2 -1
  315. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
  316. package/dist/esm/Components/Apexcharts/ApexPieChart/pieImageTexture.js +10 -0
  317. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +6 -3
  318. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +18 -11
  319. package/dist/esm/Components/AppSwitcher/pixelizeSuite.js +67 -0
  320. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +3 -3
  321. package/dist/esm/Components/Avatar/avatarColorway.js +4 -4
  322. package/dist/esm/Components/Button/Button.styles.js +5 -2
  323. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
  324. package/dist/esm/Components/CalendarGrid/CalendarGrid.js +5 -3
  325. package/dist/esm/Components/Card/Card.js +1 -0
  326. package/dist/esm/Components/Checkbox/Checkbox.styles.js +3 -1
  327. package/dist/esm/Components/CheckoutKit/selectable.js +10 -7
  328. package/dist/esm/Components/CheckoutKit/tonalHover.js +2 -0
  329. package/dist/esm/Components/ChoiceCard/ChoiceCard.js +2 -1
  330. package/dist/esm/Components/Common/FormLabel.js +4 -3
  331. package/dist/esm/Components/Common/HelperText.js +1 -2
  332. package/dist/esm/Components/Common/activationKey.js +7 -0
  333. package/dist/esm/Components/Common/fieldMessageStyles.js +2 -1
  334. package/dist/esm/Components/Common/findSlot.js +17 -0
  335. package/dist/esm/Components/Common/surfaceFocusRing.js +3 -0
  336. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +18 -6
  337. package/dist/esm/Components/CopyButton/CopyButton.js +5 -8
  338. package/dist/esm/Components/CouponField/CouponField.js +5 -2
  339. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +3 -1
  340. package/dist/esm/Components/DatePicker/CalendarPanel.js +3 -1
  341. package/dist/esm/Components/DatePicker/DatePicker.js +25 -27
  342. package/dist/esm/Components/DatePicker/PickerPortal.js +2 -2
  343. package/dist/esm/Components/DatePicker/RangeDatePicker.js +10 -29
  344. package/dist/esm/Components/DatePicker/SingleDatePicker.js +5 -21
  345. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -20
  346. package/dist/esm/Components/DescriptionList/DescriptionList.js +1 -1
  347. package/dist/esm/Components/DetailSections/DetailSections.js +2 -1
  348. package/dist/esm/Components/Divider/Divider.js +3 -3
  349. package/dist/esm/Components/Drawer/Drawer.js +24 -19
  350. package/dist/esm/Components/Dropdown/DropDown.js +7 -22
  351. package/dist/esm/Components/Editor/Editor.js +7 -3
  352. package/dist/esm/Components/Editor/editorLabels.js +1 -0
  353. package/dist/esm/Components/Editor/editorTokenStyles.js +7 -0
  354. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +8 -4
  355. package/dist/esm/Components/EmptyState/FilteredEmptyState.js +18 -0
  356. package/dist/esm/Components/FilePreview/FilePreview.js +8 -4
  357. package/dist/esm/Components/FileUpload/FileUpload.js +8 -9
  358. package/dist/esm/Components/FileUploader/FileUploader.js +6 -7
  359. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +94 -237
  360. package/dist/esm/Components/FilterSidebar/OptionsSection.js +41 -0
  361. package/dist/esm/Components/FilterSidebar/RangeSection.js +78 -0
  362. package/dist/esm/Components/FilterSidebar/SectionHeader.js +23 -0
  363. package/dist/esm/Components/FilterSidebar/useStableCallback.js +8 -0
  364. package/dist/esm/Components/Form/FormWrapper.js +5 -3
  365. package/dist/esm/Components/FormDrawer/FormDrawer.js +3 -3
  366. package/dist/esm/Components/FormField/FormField.js +1 -1
  367. package/dist/esm/Components/Header/Header.js +1 -1
  368. package/dist/esm/Components/Header/HeaderActions.js +6 -4
  369. package/dist/esm/Components/Input/TextInput.js +2 -2
  370. package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -1
  371. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  372. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +11 -7
  373. package/dist/esm/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  374. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -1
  375. package/dist/esm/Components/MediaViewer/MediaViewer.js +5 -4
  376. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  377. package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  378. package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +7 -2
  379. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  380. package/dist/esm/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  381. package/dist/esm/Components/MediaViewer/mediaItems.js +4 -0
  382. package/dist/esm/Components/Modal/Modal.js +2 -17
  383. package/dist/esm/Components/Modal/dialogNaming.js +18 -0
  384. package/dist/esm/Components/Modal/warnDroppedSlotChildren.js +7 -3
  385. package/dist/esm/Components/NavLauncher/LauncherTabs.js +4 -3
  386. package/dist/esm/Components/NavLauncher/NavLauncher.js +291 -59
  387. package/dist/esm/Components/NavLauncher/ScopeBar.js +136 -0
  388. package/dist/esm/Components/NavLauncher/engine/distance.js +37 -0
  389. package/dist/esm/Components/NavLauncher/engine/engine.js +459 -0
  390. package/dist/esm/Components/NavLauncher/engine/fold.js +75 -0
  391. package/dist/esm/Components/NavLauncher/engine/index.js +14 -0
  392. package/dist/esm/Components/NavLauncher/launcherParts.js +46 -10
  393. package/dist/esm/Components/NavLauncher/match.js +25 -12
  394. package/dist/esm/Components/NavLauncher/searchLayout.js +101 -0
  395. package/dist/esm/Components/NavLauncher/spotlight.js +194 -0
  396. package/dist/esm/Components/NavLauncher/spotlightParts.js +108 -0
  397. package/dist/esm/Components/NavLauncher/useCopiedFlash.js +17 -0
  398. package/dist/esm/Components/NavigationBar/NavigationBar.js +6 -5
  399. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +12 -17
  400. package/dist/esm/Components/Notification/Notification.js +20 -22
  401. package/dist/esm/Components/NotificationBell/notificationHelpers.js +12 -6
  402. package/dist/esm/Components/OffersList/OffersList.js +4 -2
  403. package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
  404. package/dist/esm/Components/OptionChip/optionInk.js +4 -2
  405. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  406. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -7
  407. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -8
  408. package/dist/esm/Components/PlanPill/PlanPill.js +4 -2
  409. package/dist/esm/Components/ProductCard/ProductCardAction.js +2 -1
  410. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
  411. package/dist/esm/Components/ProductDetails/ProductDetails.js +2 -1
  412. package/dist/esm/Components/ProfileCard/ProfileCard.js +6 -17
  413. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  414. package/dist/esm/Components/ProgressBar/ProgressBar.js +2 -1
  415. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +5 -2
  416. package/dist/esm/Components/QueryState/QueryStateBoundary.js +5 -1
  417. package/dist/esm/Components/RadioButton/RadioButton.js +2 -3
  418. package/dist/esm/Components/RolesPermission/RolesPermission.js +12 -8
  419. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -3
  420. package/dist/esm/Components/SearchSelect/SearchSelect.js +8 -5
  421. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +1 -1
  422. package/dist/esm/Components/Select/Select.js +6 -0
  423. package/dist/esm/Components/Select/SelectPopup.js +171 -64
  424. package/dist/esm/Components/Select/groupedWindow.js +44 -0
  425. package/dist/esm/Components/SelectSearch/SelectSearch.js +49 -39
  426. package/dist/esm/Components/SelectV2/SelectV2.js +1 -1
  427. package/dist/esm/Components/SideBar/SecondaryBar.js +3 -2
  428. package/dist/esm/Components/SideBar/components/MenuItemBox.js +3 -2
  429. package/dist/esm/Components/SideBar/components/MenuItems.js +1 -1
  430. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -2
  431. package/dist/esm/Components/SideBar/components/PinnedSection.js +1 -1
  432. package/dist/esm/Components/SideBar/sidebarScale.js +2 -2
  433. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +8 -3
  434. package/dist/esm/Components/SignInActivityTable/scrollRegionRing.js +9 -0
  435. package/dist/esm/Components/Slider/Slider.js +6 -5
  436. package/dist/esm/Components/StageProgress/StageItem.js +2 -1
  437. package/dist/esm/Components/StageProgress/StageProgress.js +8 -2
  438. package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
  439. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  440. package/dist/esm/Components/Table/Table.js +8 -6
  441. package/dist/esm/Components/Table/components/HeaderActions.js +7 -5
  442. package/dist/esm/Components/Table/components/TableBody.js +13 -8
  443. package/dist/esm/Components/Table/components/TableGroupRow.js +2 -1
  444. package/dist/esm/Components/Table/components/TableHeader.js +19 -23
  445. package/dist/esm/Components/Table/components/TableLoading.js +6 -3
  446. package/dist/esm/Components/Table/components/rowDetail.js +3 -2
  447. package/dist/esm/Components/Table/filters/ActiveFilters.js +8 -5
  448. package/dist/esm/Components/Table/filters/CompactSelect.js +2 -1
  449. package/dist/esm/Components/Table/filters/FilterDatePicker.js +20 -0
  450. package/dist/esm/Components/Table/filters/LeftFilterPane.js +14 -6
  451. package/dist/esm/Components/Table/hooks/useTable.js +11 -7
  452. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
  453. package/dist/esm/Components/Table/settings/TableSettings.js +4 -4
  454. package/dist/esm/Components/Tabs/Tabs.js +1 -0
  455. package/dist/esm/Components/Tabs/components/TabList.js +1 -0
  456. package/dist/esm/Components/Tabs/components/TabPanel.js +1 -0
  457. package/dist/esm/Components/Tabs/tabStyles.js +5 -3
  458. package/dist/esm/Components/Tag/Tag.js +5 -4
  459. package/dist/esm/Components/Tag/Tag.styles.js +5 -4
  460. package/dist/esm/Components/Tag/tagDot.js +10 -3
  461. package/dist/esm/Components/TagInput/TagInput.js +8 -7
  462. package/dist/esm/Components/TagInput/tagEntries.js +16 -4
  463. package/dist/esm/Components/TimePicker/TimePicker.js +7 -3
  464. package/dist/esm/Components/Timeline/Timeline.js +14 -10
  465. package/dist/esm/Components/Toaster/Toaster.js +2 -1
  466. package/dist/esm/Components/Toggle/TableToggle.js +1 -1
  467. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -2
  468. package/dist/esm/Components/UserDetails/UserDetails.js +5 -7
  469. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +2 -1
  470. package/dist/esm/Components/WizardDialog/WizardDialog.js +15 -3
  471. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +12 -2
  472. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +7 -4
  473. package/dist/esm/Hooks/useOutsideMouseDown.js +26 -0
  474. package/dist/esm/Hooks/usePreferences.js +30 -12
  475. package/dist/esm/Hooks/useScrollableRegion.js +33 -0
  476. package/dist/esm/Theme/chakra/Menu.styles.js +6 -0
  477. package/dist/esm/Theme/chakra/componentStyles.js +1 -1
  478. package/dist/esm/Theme/chakra/focusRing.styles.js +3 -3
  479. package/dist/esm/Theme/chakra/paletteFromTheme.js +16 -3
  480. package/dist/esm/Theme/chakra/ringShadow.js +3 -0
  481. package/dist/esm/Theme/provider/ThemeSwitcher.js +1 -1
  482. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +5 -5
  483. package/dist/esm/Theme/tokens/builders/filledSurface.js +3 -2
  484. package/dist/esm/Theme/tokens/builders/focusRing.js +4 -1
  485. package/dist/esm/Theme/tokens/builders/paletteScale.js +6 -0
  486. package/dist/esm/Utils/tabular.js +56 -0
  487. package/dist/esm/index.js +18 -25
  488. package/dist/index.d.ts +59 -5
  489. package/dist/index.js +36 -29
  490. package/package.json +3 -1
  491. package/dist/Components/Buttons/Buttons.d.ts +0 -3
  492. package/dist/Components/Buttons/Buttons.js +0 -9
  493. package/dist/Components/Buttons/ButtonsProps.d.ts +0 -12
  494. package/dist/Components/Common/ErrorComponent.d.ts +0 -7
  495. package/dist/Components/Common/ErrorComponent.js +0 -16
  496. package/dist/Components/Common/FormattedDescription.d.ts +0 -7
  497. package/dist/Components/Common/FormattedDescription.js +0 -62
  498. package/dist/Components/Common/Label.d.ts +0 -9
  499. package/dist/Components/Common/Label.js +0 -12
  500. package/dist/Components/Input/Input/Input.d.ts +0 -4
  501. package/dist/Components/Input/Input/Input.js +0 -75
  502. package/dist/Components/Input/Input/InputProps.d.ts +0 -24
  503. package/dist/Components/Input/Input/InputProps.js +0 -2
  504. package/dist/Components/ProductCard/productCardFixtures.d.ts +0 -7
  505. package/dist/Components/ProductCard/productCardFixtures.js +0 -61
  506. package/dist/esm/Components/Buttons/Buttons.js +0 -4
  507. package/dist/esm/Components/Common/ErrorComponent.js +0 -14
  508. package/dist/esm/Components/Common/FormattedDescription.js +0 -60
  509. package/dist/esm/Components/Common/Label.js +0 -10
  510. package/dist/esm/Components/Input/Input/Input.js +0 -37
  511. package/dist/esm/Components/Input/Input/InputProps.js +0 -1
  512. package/dist/esm/Components/ProductCard/productCardFixtures.js +0 -58
  513. package/dist/esm/services/feedback.js +0 -15
  514. package/dist/services/feedback.d.ts +0 -12
  515. package/dist/services/feedback.js +0 -18
  516. /package/dist/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
  517. /package/dist/esm/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useOutsideMouseDown = void 0;
4
+ const react_1 = require("react");
5
+ /** Calls `onOutside` for a document `mousedown` outside every ref; a null ref contains nothing. Unlike Chakra's `useOutsideClick` it never waits for `mouseup`. */
6
+ const useOutsideMouseDown = (refs, onOutside, { enabled = true, capture = false, includeClick = false } = {}) => {
7
+ const latest = (0, react_1.useRef)({ refs, onOutside });
8
+ (0, react_1.useEffect)(() => {
9
+ latest.current = { refs, onOutside };
10
+ });
11
+ (0, react_1.useEffect)(() => {
12
+ if (!enabled)
13
+ return;
14
+ const handle = (event) => {
15
+ const target = event.target;
16
+ if (latest.current.refs.some((ref) => { var _a; return (_a = ref.current) === null || _a === void 0 ? void 0 : _a.contains(target); }))
17
+ return;
18
+ latest.current.onOutside(event);
19
+ };
20
+ document.addEventListener("mousedown", handle, capture);
21
+ if (includeClick)
22
+ document.addEventListener("click", handle, capture);
23
+ return () => {
24
+ document.removeEventListener("mousedown", handle, capture);
25
+ if (includeClick)
26
+ document.removeEventListener("click", handle, capture);
27
+ };
28
+ }, [enabled, capture, includeClick]);
29
+ };
30
+ exports.useOutsideMouseDown = useOutsideMouseDown;
@@ -19,28 +19,45 @@ const constructUrl = ({ baseUrl, key, page, name, orgId }) => {
19
19
  const queryString = params.toString();
20
20
  return `${baseUrl}${queryString ? `?${queryString}` : ""}`;
21
21
  };
22
+ const NO_PREFERENCES = [];
22
23
  const useGetPreferences = ({ baseUrl = "", key = "", page = "", name = "", authToken = "", orgId = "", }) => {
23
- const [preferences, setPreferences] = (0, react_1.useState)([]);
24
- // NOTE: must start true — KanbanBoard's hydration effect reads this before this hook's mount effect runs.
25
- const [loading, setLoading] = (0, react_1.useState)(() => Boolean(baseUrl));
24
+ const url = baseUrl ? constructUrl({ baseUrl, key, page, name, orgId }) : "";
25
+ const requestKey = url ? JSON.stringify([url, authToken]) : "";
26
+ const [settled, setSettled] = (0, react_1.useState)({
27
+ requestKey: "",
28
+ preferences: NO_PREFERENCES,
29
+ });
26
30
  (0, react_1.useEffect)(() => {
27
- if (!baseUrl) {
31
+ if (!url) {
28
32
  return;
29
33
  }
30
- setLoading(true);
31
- const url = constructUrl({ baseUrl, key, page, name, orgId });
34
+ let cancelled = false;
32
35
  fetch(url, {
33
36
  headers: {
34
37
  Authorization: authToken,
35
38
  },
36
39
  })
37
40
  .then((response) => response.json())
38
- .then((data) => setPreferences(data))
39
- .catch((error) => console.error(error))
40
- .finally(() => setLoading(false));
41
- /* eslint-disable */
42
- }, [baseUrl]);
43
- return { preferences, loading };
41
+ .then((data) => {
42
+ if (!cancelled)
43
+ setSettled({ requestKey, preferences: data });
44
+ })
45
+ .catch((error) => {
46
+ if (cancelled)
47
+ return;
48
+ console.error(error);
49
+ setSettled({ requestKey, preferences: NO_PREFERENCES });
50
+ });
51
+ return () => {
52
+ cancelled = true;
53
+ };
54
+ }, [url, authToken, requestKey]);
55
+ const isSettled = settled.requestKey === requestKey;
56
+ return {
57
+ preferences: isSettled ? settled.preferences : NO_PREFERENCES,
58
+ // NOTE: derived so KanbanBoard never reads a stale loading=false, on mount or re-key.
59
+ loading: Boolean(baseUrl) && !isSettled,
60
+ };
44
61
  };
45
62
  exports.useGetPreferences = useGetPreferences;
46
63
  const useSavePreferences = ({ baseUrl = "", key = "", page = "", name = "", authToken = "", orgId = "", }) => {
@@ -59,6 +76,7 @@ const useSavePreferences = ({ baseUrl = "", key = "", page = "", name = "", auth
59
76
  body: JSON.stringify({ key, page, name, json: data }),
60
77
  })
61
78
  .then((r) => r.json())
79
+ .then(() => setError(null))
62
80
  .catch((e) => setError(e))
63
81
  .finally(() => setLoading(false));
64
82
  }, [baseUrl, orgId, authToken, key, page, name]);
@@ -0,0 +1,17 @@
1
+ /** `label` or `labelledBy` names the scroller; `keepRole` stops it taking role=region. */
2
+ export type ScrollableRegionOptions = {
3
+ label?: string;
4
+ labelledBy?: string;
5
+ keepRole?: boolean;
6
+ };
7
+ /** Attributes to spread on a scroller; empty unless it overflows with nothing focusable inside. */
8
+ export type ScrollableRegionProps = {
9
+ tabIndex?: 0;
10
+ role?: "region";
11
+ "aria-label"?: string;
12
+ "aria-labelledby"?: string;
13
+ };
14
+ export declare function useScrollableRegion<T extends HTMLElement = HTMLElement>({ label, labelledBy, keepRole, }?: ScrollableRegionOptions): {
15
+ ref: (node: T | null) => void;
16
+ props: ScrollableRegionProps;
17
+ };
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useScrollableRegion = useScrollableRegion;
4
+ const react_1 = require("react");
5
+ const sharedResizeObserver_1 = require("./sharedResizeObserver");
6
+ const FOCUSABLE_CONTENT = 'a[href], area[href], button:not([disabled]), input:not([disabled]):not([type="hidden"]), select:not([disabled]), textarea:not([disabled]), summary, iframe, [contenteditable]:not([contenteditable="false"]), [tabindex]:not([tabindex="-1"])';
7
+ const USER_SCROLLABLE = /auto|scroll/;
8
+ const SLACK_PX = 1;
9
+ const needsFocusStop = (el) => {
10
+ const { overflowX, overflowY } = getComputedStyle(el);
11
+ const scrollsX = USER_SCROLLABLE.test(overflowX) && el.scrollWidth > el.clientWidth + SLACK_PX;
12
+ const scrollsY = USER_SCROLLABLE.test(overflowY) && el.scrollHeight > el.clientHeight + SLACK_PX;
13
+ return (scrollsX || scrollsY) && !el.querySelector(FOCUSABLE_CONTENT);
14
+ };
15
+ function useScrollableRegion({ label, labelledBy, keepRole = false, } = {}) {
16
+ const [element, setElement] = (0, react_1.useState)(null);
17
+ const [isStop, setIsStop] = (0, react_1.useState)(false);
18
+ const measure = (0, react_1.useCallback)(() => setIsStop(element !== null && needsFocusStop(element)), [element]);
19
+ (0, react_1.useEffect)(() => {
20
+ if (!element)
21
+ return undefined;
22
+ return (0, sharedResizeObserver_1.observeResize)(element, measure);
23
+ }, [element, measure]);
24
+ // NOTE: also runs after every commit; an equal state bails out, so no loop.
25
+ (0, react_1.useEffect)(measure);
26
+ const named = Boolean(label || labelledBy);
27
+ const props = isStop
28
+ ? {
29
+ tabIndex: 0,
30
+ role: named && !keepRole ? "region" : undefined,
31
+ "aria-label": label,
32
+ "aria-labelledby": labelledBy,
33
+ }
34
+ : {};
35
+ return { ref: setElement, props };
36
+ }
@@ -3,6 +3,7 @@ export type SidebarPrefs = {
3
3
  collapsed: boolean;
4
4
  mobileOpen: boolean;
5
5
  };
6
+ /** Persistence key and first-visit defaults for sidebar preferences. */
6
7
  export type UseSidebarPrefsOptions = {
7
8
  /** localStorage key. Versioned so a future shape change can bump it. */
8
9
  storageKey?: string;
@@ -14,6 +14,10 @@ export declare const Menu: {
14
14
  borderStyle: string;
15
15
  borderColor: string;
16
16
  };
17
+ divider: {
18
+ opacity?: number | undefined;
19
+ borderColor: string;
20
+ };
17
21
  item: {
18
22
  color: string;
19
23
  minH: string;
@@ -8,6 +8,8 @@ const optionRowInk_1 = require("../../Components/Select/optionRowInk");
8
8
  const optionRowSizes_1 = require("../tokens/primitives/optionRowSizes");
9
9
  const paletteFromTheme_1 = require("./paletteFromTheme");
10
10
  const overlay_styles_1 = require("./overlay.styles");
11
+ const accentText_1 = require("../tokens/builders/accentText");
12
+ const surfaceRaised_1 = require("../tokens/builders/surfaceRaised");
11
13
  const itemRowSpec = optionRowSizes_1.OPTION_ROW_SIZES.sm;
12
14
  const { defineMultiStyleConfig, definePartsStyle } = (0, react_1.createMultiStyleConfigHelpers)(anatomy_1.menuAnatomy.keys);
13
15
  const $bg = (0, react_1.cssVar)("menu-bg");
@@ -28,6 +30,10 @@ const baseStyle = definePartsStyle(({ theme }) => {
28
30
  borderColor: colors.boxborder[200],
29
31
  ...overlay_styles_1.POPUP_SURFACE,
30
32
  },
33
+ divider: {
34
+ borderColor: (0, surfaceRaised_1.raisedRule)(colors),
35
+ ...((0, accentText_1.isDarkCanvas)(colors.surfaceRaised) && { opacity: 1 }),
36
+ },
31
37
  item: {
32
38
  color: (0, optionRowInk_1.optionRowInk)(colors, false),
33
39
  minH: itemRowSpec.minH,
@@ -181,6 +181,10 @@ export declare const componentStyles: {
181
181
  borderStyle: string;
182
182
  borderColor: string;
183
183
  };
184
+ divider: {
185
+ opacity?: number | undefined;
186
+ borderColor: string;
187
+ };
184
188
  item: {
185
189
  color: string;
186
190
  minH: string;
@@ -77,7 +77,7 @@ const Badge = {
77
77
  size: "sm",
78
78
  },
79
79
  };
80
- // NOTE: fixes Chakra's FormErrorMessage/Icon hardcoding red.500 — same AA gap as our ErrorComponent.
80
+ // NOTE: fixes Chakra's FormErrorMessage/Icon hardcoding red.500, which misses AA on the canvas.
81
81
  const FormError = {
82
82
  baseStyle: ({ theme }) => {
83
83
  const palette = (0, paletteFromTheme_1.paletteOf)(theme);
@@ -1,5 +1,6 @@
1
1
  import type { PaletteProps, ResolvedColorMode } from "../tokens/types";
2
2
  import { type ReducedMotionScope } from "./motion";
3
+ /** Colour mode and reduced-motion scope for a built brand theme. */
3
4
  export interface CreateBrandThemeOptions {
4
5
  /** Which palette this theme represents. Defaults to `light`. */
5
6
  colorMode?: ResolvedColorMode;
@@ -10,7 +10,7 @@ type WithBrandGlow = {
10
10
  primary: BrandScale;
11
11
  };
12
12
  export declare const focusRingShadow: (colors: WithFocusRing) => string;
13
- /** For controls whose rounded shell clips overflow: the same halo and ring, drawn inside the border box. */
13
+ /** For controls whose shell clips overflow: ring on the edge, halo inside, so an opaque child leaves the ring. */
14
14
  export declare const insetFocusRingShadow: (colors: WithFocusRing) => string;
15
15
  export declare const FOCUS_VISIBLE_OVER_STATE = "&:hover:focus-visible, &:active:focus-visible, &[data-active]:focus-visible";
16
16
  export declare const focusVisibleRing: (colors: WithFocusRing) => {
@@ -10,9 +10,9 @@ exports.FOCUS_RING_WIDTH = 4;
10
10
  const focusRingShadow = (colors) => `0 0 0 ${exports.FOCUS_HALO_WIDTH}px ${colors.focusRing.halo}, ` +
11
11
  `0 0 0 ${exports.FOCUS_RING_WIDTH}px ${colors.focusRing.ring}`;
12
12
  exports.focusRingShadow = focusRingShadow;
13
- /** For controls whose rounded shell clips overflow: the same halo and ring, drawn inside the border box. */
14
- const insetFocusRingShadow = (colors) => `inset 0 0 0 ${exports.FOCUS_HALO_WIDTH}px ${colors.focusRing.halo}, ` +
15
- `inset 0 0 0 ${exports.FOCUS_RING_WIDTH}px ${colors.focusRing.ring}`;
13
+ /** For controls whose shell clips overflow: ring on the edge, halo inside, so an opaque child leaves the ring. */
14
+ const insetFocusRingShadow = (colors) => `inset 0 0 0 ${exports.FOCUS_RING_WIDTH - exports.FOCUS_HALO_WIDTH}px ${colors.focusRing.ring}, ` +
15
+ `inset 0 0 0 ${exports.FOCUS_RING_WIDTH}px ${colors.focusRing.halo}`;
16
16
  exports.insetFocusRingShadow = insetFocusRingShadow;
17
17
  // NOTE: stacked pseudo-classes raise specificity above Chakra's _hover, so a hovered+focused button keeps its ring.
18
18
  exports.FOCUS_VISIBLE_OVER_STATE = "&:hover:focus-visible, &:active:focus-visible, &[data-active]:focus-visible";
@@ -3,4 +3,5 @@ import type { ColorScale, PaletteProps } from "../tokens/types";
3
3
  export declare const paletteOf: (theme: {
4
4
  colors?: unknown;
5
5
  }) => PaletteProps;
6
- export declare const scaleFor: (palette: PaletteProps, colorScheme: string) => ColorScale;
6
+ export declare const warnUnknownColorScheme: (colorScheme: string) => void;
7
+ export declare const scaleFor: (palette: PaletteProps, colorScheme: string, fallback?: ColorScale) => ColorScale;
@@ -1,11 +1,25 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.scaleFor = exports.paletteOf = void 0;
3
+ exports.scaleFor = exports.warnUnknownColorScheme = exports.paletteOf = void 0;
4
4
  const assertPalette_1 = require("../assertPalette");
5
+ const paletteScale_1 = require("../tokens/builders/paletteScale");
5
6
  /** Chakra hands style functions an untyped theme; this is the boundary that makes it typed. */
6
7
  const paletteOf = (theme) => (0, assertPalette_1.assertPixelizePalette)(theme);
7
8
  exports.paletteOf = paletteOf;
8
- const asScale = (value) => typeof value === "object" && value !== null ? value : undefined;
9
- // NOTE: colorScheme is consumer-supplied and can name a built-in we never themed — unknowns resolve to gray.
10
- const scaleFor = (palette, colorScheme) => { var _a; return (_a = asScale(palette[colorScheme])) !== null && _a !== void 0 ? _a : palette.gray; };
9
+ const warned = new Set();
10
+ const warnUnknownColorScheme = (colorScheme) => {
11
+ if (process.env.NODE_ENV === "production" || warned.has(colorScheme))
12
+ return;
13
+ warned.add(colorScheme);
14
+ console.warn(`[pixelize-design-library] colorScheme "${colorScheme}" is not a themed colour scale; using the fallback scale.`);
15
+ };
16
+ exports.warnUnknownColorScheme = warnUnknownColorScheme;
17
+ // NOTE: colorScheme is consumer-supplied and can name a built-in we never themed — unknowns use the fallback.
18
+ const scaleFor = (palette, colorScheme, fallback = palette.gray) => {
19
+ const scale = (0, paletteScale_1.scaleNamed)(palette, colorScheme);
20
+ if (scale)
21
+ return scale;
22
+ (0, exports.warnUnknownColorScheme)(colorScheme);
23
+ return fallback;
24
+ };
11
25
  exports.scaleFor = scaleFor;
@@ -0,0 +1,3 @@
1
+ import { type BorderWidthRole } from "../tokens/primitives/borderWidths";
2
+ /** A stroke drawn inside the border box as a box-shadow, so it never costs layout. */
3
+ export declare const insetRingShadow: (color: string, width?: BorderWidthRole) => string;
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.insetRingShadow = void 0;
4
+ const borderWidths_1 = require("../tokens/primitives/borderWidths");
5
+ /** A stroke drawn inside the border box as a box-shadow, so it never costs layout. */
6
+ const insetRingShadow = (color, width = "hairline") => `inset 0 0 0 ${borderWidths_1.BORDER_WIDTHS[width]} ${color}`;
7
+ exports.insetRingShadow = insetRingShadow;
@@ -9,6 +9,7 @@ export type ThemeModeContextValue = {
9
9
  brand: ThemeName;
10
10
  setBrand: (brand: ThemeName) => void;
11
11
  };
12
+ /** Brand and mode state, persisted to localStorage unless `disablePersistence` is set. */
12
13
  export type PixelizeThemeProviderProps = {
13
14
  children: React.ReactNode;
14
15
  brand?: ThemeName;
@@ -1,3 +1,4 @@
1
+ /** Control for switching light, dark or system mode, and optionally the brand. */
1
2
  export type ThemeSwitcherProps = {
2
3
  variant?: "icon" | "segmented" | "menu";
3
4
  showBrandPicker?: boolean;
@@ -81,7 +81,7 @@ const SegmentedVariant = ({ size, label, showBrandPicker, }) => {
81
81
  const isSelected = mode === value;
82
82
  return ((0, jsx_runtime_1.jsx)(react_2.Button, { ref: (node) => {
83
83
  optionRefs.current[index] = node;
84
- }, role: "radio", "aria-checked": isSelected, "aria-label": optionLabel, onClick: () => setMode(value), onKeyDown: (event) => handleKeyDown(event, index), size: SIZES[size].control, variant: "ghost", borderRadius: "full", bg: isSelected ? activeBg : "transparent", color: isSelected ? activeColor : mutedColor, boxShadow: isSelected ? "sm" : "none", _hover: { color: activeColor }, _focusVisible: { outline: "2px solid transparent", outlineOffset: "2px" }, children: (0, jsx_runtime_1.jsx)(Icon, { size: SIZES[size].icon, "aria-hidden": true }) }, value));
84
+ }, role: "radio", "aria-checked": isSelected, "aria-label": optionLabel, tabIndex: isSelected ? 0 : -1, onClick: () => setMode(value), onKeyDown: (event) => handleKeyDown(event, index), size: SIZES[size].control, variant: "ghost", borderRadius: "full", bg: isSelected ? activeBg : "transparent", color: isSelected ? activeColor : mutedColor, boxShadow: isSelected ? "sm" : "none", _hover: { color: activeColor }, _focusVisible: { outline: "2px solid transparent", outlineOffset: "2px" }, children: (0, jsx_runtime_1.jsx)(Icon, { size: SIZES[size].icon, "aria-hidden": true }) }, value));
85
85
  }), showBrandPicker && (0, jsx_runtime_1.jsx)(BrandMenu, { size: size })] }));
86
86
  };
87
87
  const MenuVariant = ({ size, label, showBrandPicker, }) => {
@@ -4,6 +4,7 @@ export type DeepPartial<T> = T extends string ? T : {
4
4
  [K in keyof T]?: DeepPartial<T[K]>;
5
5
  };
6
6
  export type PaletteOverrides = DeepPartial<PaletteProps>;
7
+ /** Brand, mode and group overrides for a test palette. */
7
8
  export type TestPaletteOptions = {
8
9
  brand?: ThemeName;
9
10
  mode?: ResolvedColorMode;
@@ -6,8 +6,9 @@ export declare const shiftLighter: (scale: ColorScale) => ColorScale;
6
6
  export declare const accentLightnessDelta: (accent500: string, white: string) => number;
7
7
  /** Raises every rung by the same lightness delta, preserving the ramp's shape and hue. */
8
8
  export declare const liftScale: (scale: ColorScale, delta: number) => ColorScale;
9
- /** `lifted`: brand-tinted canvas, card a CARD_LIFT step above it. `flat`: the hue-neutral canvas the card shares. */
9
+ /** `lifted`: the card sits a CARD_LIFT step above the canvas. `flat`: the card is the canvas. */
10
10
  export type DarkPlanes = "lifted" | "flat";
11
+ /** Card plane choice; defaults to `lifted`. */
11
12
  export interface DarkPaletteOptions {
12
13
  planes?: DarkPlanes;
13
14
  }
@@ -151,7 +151,8 @@ const NAMED_SURFACE_L = {
151
151
  accent: 17,
152
152
  muted: 18,
153
153
  };
154
- const SURFACE_SAT = { lifted: 14, flat: 0 };
154
+ // NOTE: surfaces are hue-neutral on every brand; brand hue stays on accents, ink and rules.
155
+ const SURFACE_SAT = 0;
155
156
  const TEXT_SAT = 12;
156
157
  const PLACEHOLDER_SAT = 10;
157
158
  const BORDER_SAT = 12;
@@ -182,16 +183,15 @@ const cardPlane = (canvas, white, planes) => {
182
183
  function buildDarkPalette(light, { planes = "lifted" } = {}) {
183
184
  const hueSource = light.primary[500];
184
185
  const { h } = (0, color_1.hexToHsl)(hueSource);
185
- const surfaceSat = SURFACE_SAT[planes];
186
186
  const namedSurfaces = Object.fromEntries(Object.entries(NAMED_SURFACE_L).map(([key, l]) => [
187
187
  key,
188
- (0, color_1.hslToHex)({ h, s: surfaceSat, l }),
188
+ (0, color_1.hslToHex)({ h, s: SURFACE_SAT, l }),
189
189
  ]));
190
190
  const white = light.white;
191
191
  const { card, rise, tableHover } = cardPlane(namedSurfaces.main, white, planes);
192
192
  const primary = liftBrand(light.primary, white);
193
193
  const background = {
194
- ...fromTargets(hueSource, raise(SURFACE_TARGETS, BACKGROUND_FILLS, rise), surfaceSat),
194
+ ...fromTargets(hueSource, raise(SURFACE_TARGETS, BACKGROUND_FILLS, rise), SURFACE_SAT),
195
195
  50: card,
196
196
  };
197
197
  const semantic = {
@@ -231,7 +231,7 @@ function buildDarkPalette(light, { planes = "lifted" } = {}) {
231
231
  border: dividerRamp,
232
232
  boxborder: dividerRamp,
233
233
  table: {
234
- hover: fromTargets(hueSource, tableHover, surfaceSat),
234
+ hover: fromTargets(hueSource, tableHover, SURFACE_SAT),
235
235
  },
236
236
  disabled: fromTargets(hueSource, DISABLED_TARGETS, DISABLED_SAT),
237
237
  accentText: (0, accentText_1.pickAccentText)(primary, namedSurfaces.main),
@@ -41,8 +41,9 @@ const solidFillRung = (scale, white, canvas) => {
41
41
  };
42
42
  exports.solidFillRung = solidFillRung;
43
43
  const steppedRung = (base, canvas, step) => {
44
- const dir = (0, accentText_1.isDarkCanvas)(canvas) ? -100 : 100;
45
- return Math.min(900, Math.max(50, base + dir * step));
44
+ const dir = (0, accentText_1.isDarkCanvas)(canvas) ? -1 : 1;
45
+ const index = RUNGS.indexOf(base) + dir * step;
46
+ return RUNGS[Math.min(RUNGS.length - 1, Math.max(0, index))];
46
47
  };
47
48
  const steppedTowardBase = (from, base) => RUNGS[RUNGS.indexOf(from) + (from > base ? -1 : 1)];
48
49
  /**
@@ -4,6 +4,7 @@ exports.withFocusRing = exports.buildFocusRing = exports.focusRingBackdrops = vo
4
4
  exports.settleBetween = settleBetween;
5
5
  const color_1 = require("./color");
6
6
  const outlineRung_1 = require("./outlineRung");
7
+ const planeStep_1 = require("./planeStep");
7
8
  /** Same lightness granularity `buildDarkPalette` walks its accents at. */
8
9
  const LIGHTNESS_STEP = 0.5;
9
10
  // NOTE: not settleAcross — a ring squeezed between a light canvas and a dark fill needs the closest color that clears both, not a per-surface lift.
@@ -25,10 +26,12 @@ function settleBetween(hex, backdrops, target = outlineRung_1.AA_NON_TEXT) {
25
26
  const worst = (candidate) => Math.min(...backdrops.map((backdrop) => (0, color_1.contrastRatio)(candidate, backdrop)));
26
27
  return worst(ends[0]) >= worst(ends[1]) ? ends[0] : ends[1];
27
28
  }
28
- // NOTE: only canvas + card surface — including the fill or every named surface leaves no solvable hue.
29
+ // NOTE: canvas, card and the table header band — including the fill or every named surface leaves no solvable hue.
29
30
  const focusRingBackdrops = (source) => [
30
31
  source.backgroundColor.main,
31
32
  source.background[50],
33
+ source.backgroundColor.tableHeader,
34
+ (0, planeStep_1.bandOn)(source.backgroundColor.tableHeader, source.background[50]),
32
35
  ];
33
36
  exports.focusRingBackdrops = focusRingBackdrops;
34
37
  // NOTE: replaces Chakra's stock ring (a fixed blue that measured under 2:1 on every brand).
@@ -0,0 +1,2 @@
1
+ import type { ColorScale, PaletteProps } from "../types";
2
+ export declare const scaleNamed: (colors: PaletteProps, name: string) => ColorScale | undefined;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.scaleNamed = void 0;
4
+ const isColorScale = (value) => typeof value === "object" && value !== null && "500" in value;
5
+ const scaleNamed = (colors, name) => {
6
+ const entries = colors;
7
+ const value = entries[name];
8
+ return isColorScale(value) ? value : undefined;
9
+ };
10
+ exports.scaleNamed = scaleNamed;
@@ -74,6 +74,7 @@ export type BoxShadowTokens = {
74
74
  error: string;
75
75
  default: string;
76
76
  };
77
+ /** Full per-brand colour palette, one per brand per colour mode. */
77
78
  export type PaletteProps = {
78
79
  gradient: {
79
80
  from: string;
@@ -1,4 +1,5 @@
1
1
  export declare function isAllowedReturnUrl(url: string): boolean;
2
+ /** Fallback origin used when the return URL param is missing or disallowed. */
2
3
  export type ResolveReturnUrlOptions = {
3
4
  /** App-specific fallback (e.g. its own origin) used when the param is missing/disallowed. */
4
5
  defaultReturnUrl?: string;
@@ -17,12 +18,14 @@ export type AccountHandoffConfig = {
17
18
  /** Where Account returns the user to. Defaults to this app's own origin. */
18
19
  buildReturnUrl?: (orgId?: number | string | null) => string;
19
20
  };
21
+ /** Query values carried to Account: source app, return URL, org and token. */
20
22
  export type AccountHandoffLinkOptions = {
21
23
  sourceApp?: string;
22
24
  returnUrl?: string;
23
25
  orgId?: number | string | null;
24
26
  token?: string | null;
25
27
  };
28
+ /** Link options plus the user to open on the Account users page. */
26
29
  export type AccountHandoffUsersOptions = AccountHandoffLinkOptions & {
27
30
  userId?: number | string | null;
28
31
  };
@@ -1,3 +1,4 @@
1
+ /** Currency and locale override the INR and en-IN defaults. */
1
2
  export type PriceFormatOptions = {
2
3
  currency?: string;
3
4
  locale?: string;
@@ -0,0 +1,30 @@
1
+ /** One spreadsheet cell; `null` and `undefined` write an empty cell. */
2
+ export type TabularCell = string | number | boolean | null | undefined;
3
+ interface TabularColumnBase<Row, K extends keyof Row> {
4
+ /** Row field the cell reads, the same `key` a table column uses. */
5
+ readonly key: K;
6
+ /** Text of the header line. */
7
+ readonly header: string;
8
+ /** Turns the field into a cell; required when the field is not a scalar. */
9
+ readonly format?: (value: Row[K], row: Row) => TabularCell;
10
+ /** Default true: formula-like text gets a leading `'` so it is shown, not run. */
11
+ readonly escapeFormulas?: boolean;
12
+ }
13
+ /** One exported column; `format` is required when the field is not a scalar. */
14
+ export type TabularColumn<Row> = {
15
+ [K in keyof Row & string]: Row[K] extends TabularCell ? TabularColumnBase<Row, K> : TabularColumnBase<Row, K> & {
16
+ readonly format: (value: Row[K], row: Row) => TabularCell;
17
+ };
18
+ }[keyof Row & string];
19
+ /** Options for `toCsv`. */
20
+ export interface ToCsvOptions {
21
+ /** Prepends a UTF-8 byte-order mark so Excel reads non-ASCII. Default false. */
22
+ readonly bom?: boolean;
23
+ }
24
+ /** RFC 4180 CSV: header line, then one CRLF-separated line per row. */
25
+ export declare function toCsv<Row extends object>(rows: readonly Row[], columns: readonly TabularColumn<Row>[], { bom }?: ToCsvOptions): string;
26
+ /** Replaces path and reserved characters with `-`; caps at 80 characters, keeping the extension. */
27
+ export declare function safeFileName(fileName: string): string;
28
+ /** Saves `blob` as `safeFileName(fileName)`, then revokes its object URL. */
29
+ export declare function downloadBlob(blob: Blob, fileName: string): void;
30
+ export {};
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toCsv = toCsv;
4
+ exports.safeFileName = safeFileName;
5
+ exports.downloadBlob = downloadBlob;
6
+ const NEEDS_QUOTES = /[",\r\n]/;
7
+ const FORMULA_TRIGGER = /^[=+\-@\t\r]/;
8
+ const PLAIN_NUMBER = /^[+-]?(?:\d[\d,]*(?:\.\d*)?|\.\d+)%?$/;
9
+ const BOM = "";
10
+ const RESERVED_FILE_CHARS = /[\\/:*?"<>|\p{Cc}]/gu;
11
+ const MAX_FILE_NAME = 80;
12
+ const REVOKE_DELAY_MS = 1000;
13
+ const quote = (text) => (NEEDS_QUOTES.test(text) ? `"${text.replace(/"/g, '""')}"` : text);
14
+ const looksLikeFormula = (text) => FORMULA_TRIGGER.test(text) && !PLAIN_NUMBER.test(text);
15
+ function cellText(value, escapeFormulas) {
16
+ if (value === null || value === undefined)
17
+ return "";
18
+ if (typeof value === "number")
19
+ return Number.isFinite(value) ? String(value) : "";
20
+ const text = String(value);
21
+ if (typeof value !== "string" || !escapeFormulas)
22
+ return text;
23
+ return looksLikeFormula(text) ? `'${text}` : text;
24
+ }
25
+ function readCell(row, column) {
26
+ const field = row[column.key];
27
+ const format = column.format;
28
+ return format === undefined ? field : format(field, row);
29
+ }
30
+ /** RFC 4180 CSV: header line, then one CRLF-separated line per row. */
31
+ function toCsv(rows, columns, { bom = false } = {}) {
32
+ if (columns.length === 0)
33
+ return "";
34
+ const lines = [columns.map((column) => quote(column.header)).join(",")];
35
+ for (const row of rows) {
36
+ lines.push(columns.map((column) => quote(cellText(readCell(row, column), column.escapeFormulas !== false))).join(","));
37
+ }
38
+ return (bom ? BOM : "") + lines.join("\r\n");
39
+ }
40
+ /** Replaces path and reserved characters with `-`; caps at 80 characters, keeping the extension. */
41
+ function safeFileName(fileName) {
42
+ const cleaned = fileName.replace(RESERVED_FILE_CHARS, "-").trim().replace(/^[.\s]+/, "");
43
+ if (cleaned === "")
44
+ return "export";
45
+ if (cleaned.length <= MAX_FILE_NAME)
46
+ return cleaned;
47
+ const dot = cleaned.lastIndexOf(".");
48
+ const extension = dot > 0 && cleaned.length - dot <= 8 ? cleaned.slice(dot) : "";
49
+ return cleaned.slice(0, MAX_FILE_NAME - extension.length).replace(/[\uD800-\uDBFF]$/, "") + extension;
50
+ }
51
+ /** Saves `blob` as `safeFileName(fileName)`, then revokes its object URL. */
52
+ function downloadBlob(blob, fileName) {
53
+ const url = URL.createObjectURL(blob);
54
+ const link = document.createElement("a");
55
+ link.href = url;
56
+ link.download = safeFileName(fileName);
57
+ document.body.appendChild(link);
58
+ link.click();
59
+ link.remove();
60
+ setTimeout(() => URL.revokeObjectURL(url), REVOKE_DELAY_MS);
61
+ }
@@ -7,6 +7,7 @@ import { isDarkCanvas } from "../../Theme/tokens/builders/accentText.js";
7
7
  import { transitionFor } from "../../Theme/tokens/primitives/motion.js";
8
8
  import { reducedMotionSx } from "../../Theme/chakra/motion.js";
9
9
  import { accordionFocusRing, getAccordionHoverColors } from "./accordionColors.js";
10
+ const HEADER_ACTION_RIGHT = "3.25rem";
10
11
  /** Chakra Accordion wrapper for header/content pairs; FilterSidebar composes this directly for its collapsible filter sections. */
11
12
  const Accordion = ({ allowMultiple, allowToggle, index, onChange, reduceMotion, items, ...rest }) => {
12
13
  const { colors } = useCustomTheme();
@@ -19,14 +20,16 @@ const Accordion = ({ allowMultiple, allowToggle, index, onChange, reduceMotion,
19
20
  return (_jsx(ChakraAccordian, { allowMultiple: allowMultiple, allowToggle: allowToggle, index: index, onChange: onChange, reduceMotion: reduceMotion, ...rest, children: items.map((item, idx) => {
20
21
  var _a;
21
22
  return (_jsx(AccordionItem, { border: "1px solid", borderColor: border, borderRadius: "xl", bg: colors.background[50], boxShadow: "none", mb: 3, overflow: "hidden", _last: { mb: 0 }, ...item.itemProps, sx: (_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.itemStyle, children: ({ isExpanded }) => {
22
- var _a, _b, _c;
23
- return (_jsxs(_Fragment, { children: [_jsx("h2", { children: _jsxs(AccordionButton, { px: 4, py: 3, gap: 3, fontSize: "sm", fontWeight: 600, color: headingColor, bg: isExpanded ? expandedBg : "transparent", transition: transitionFor(["background-color"]), _hover: { bg: isExpanded ? expandedBg : softHover }, _focusVisible: focusRing, ...item.buttonProps, sx: {
24
- ...reducedMotionSx(),
25
- ...(_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.buttonStyle,
26
- "&:hover": {
27
- ...(_b = item.customStyles) === null || _b === void 0 ? void 0 : _b.hoverbuttonStyle,
28
- },
29
- }, children: [_jsx(Box, { as: "span", flex: "1", textAlign: "left", children: item.header }), _jsx(Flex, { align: "center", justify: "center", boxSize: "1.5rem", flexShrink: 0, borderRadius: "lg", color: isExpanded ? colors.accentText : colors.textMuted, bg: isExpanded ? colors.primary.opacity[16] : "transparent", transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)", transition: transitionFor(["transform", "color", "background-color"], "base"), sx: reducedMotionSx(), children: _jsx(ChevronDown, { size: 16 }) })] }) }), _jsx(AccordionPanel, { px: 4, pt: 1, pb: 4, fontSize: "sm", lineHeight: "1.5", color: bodyColor, ...item.panelProps, sx: (_c = item.customStyles) === null || _c === void 0 ? void 0 : _c.panelStyle, children: item.content })] }));
23
+ var _a, _b, _c, _d, _e;
24
+ return (_jsxs(_Fragment, { children: [_jsxs(Box, { as: "h2", position: item.headerAction ? "relative" : undefined, sx: item.headerAction
25
+ ? { "&:hover > button": { background: isExpanded ? expandedBg : softHover, ...(_a = item.customStyles) === null || _a === void 0 ? void 0 : _a.hoverbuttonStyle } }
26
+ : undefined, children: [_jsxs(AccordionButton, { px: 4, py: 3, gap: 3, fontSize: "sm", fontWeight: 600, color: headingColor, bg: isExpanded ? expandedBg : "transparent", transition: transitionFor(["background-color"]), _hover: { bg: isExpanded ? expandedBg : softHover }, _focusVisible: focusRing, ...item.buttonProps, sx: {
27
+ ...reducedMotionSx(),
28
+ ...(_b = item.customStyles) === null || _b === void 0 ? void 0 : _b.buttonStyle,
29
+ "&:hover": {
30
+ ...(_c = item.customStyles) === null || _c === void 0 ? void 0 : _c.hoverbuttonStyle,
31
+ },
32
+ }, children: [_jsx(Box, { as: "span", flex: "1", textAlign: "left", children: item.header }), _jsx(Flex, { align: "center", justify: "center", boxSize: "1.5rem", flexShrink: 0, borderRadius: "lg", color: isExpanded ? colors.accentText : colors.textMuted, bg: isExpanded ? colors.primary.opacity[16] : "transparent", transform: isExpanded ? "rotate(180deg)" : "rotate(0deg)", transition: transitionFor(["transform", "color", "background-color"], "base"), sx: reducedMotionSx(), children: _jsx(ChevronDown, { size: 16 }) })] }), item.headerAction && (_jsx(Flex, { position: "absolute", top: "50%", right: HEADER_ACTION_RIGHT, transform: "translateY(-50%)", align: "center", sx: (_d = item.customStyles) === null || _d === void 0 ? void 0 : _d.headerActionStyle, children: item.headerAction }))] }), _jsx(AccordionPanel, { px: 4, pt: 1, pb: 4, fontSize: "sm", lineHeight: "1.5", color: bodyColor, ...item.panelProps, sx: (_e = item.customStyles) === null || _e === void 0 ? void 0 : _e.panelStyle, children: item.content })] }));
30
33
  } }, idx));
31
34
  }) }));
32
35
  };