pixelize-design-library 2.4.2-beta.65 → 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 (482) hide show
  1. package/CHANGELOG.md +437 -13
  2. package/COMPONENT-GOTCHAS.md +150 -91
  3. package/DESIGN-GUIDE.md +47 -7
  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 +1 -0
  56. package/dist/Components/CopyButton/CopyButton.js +3 -6
  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 +2 -0
  73. package/dist/Components/Drawer/Drawer.js +23 -25
  74. package/dist/Components/Dropdown/DropDown.js +6 -21
  75. package/dist/Components/Editor/Editor.js +6 -2
  76. package/dist/Components/Editor/EditorProps.d.ts +17 -1
  77. package/dist/Components/Editor/editorLabels.js +1 -0
  78. package/dist/Components/Editor/editorTokenStyles.d.ts +8 -0
  79. package/dist/Components/Editor/editorTokenStyles.js +9 -1
  80. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +1 -1
  81. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +9 -2
  82. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +15 -1
  83. package/dist/Components/EmptyState/EmptyStateProps.d.ts +21 -0
  84. package/dist/Components/EmptyState/FilteredEmptyState.d.ts +5 -0
  85. package/dist/Components/EmptyState/FilteredEmptyState.js +23 -0
  86. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +1 -0
  87. package/dist/Components/FilePreview/FilePreview.js +7 -3
  88. package/dist/Components/FilePreview/FilePreviewProps.d.ts +2 -1
  89. package/dist/Components/FileUpload/FileUpload.js +8 -9
  90. package/dist/Components/FileUpload/FileUploadProps.d.ts +2 -2
  91. package/dist/Components/FileUploader/FileUploader.js +5 -6
  92. package/dist/Components/FilterSidebar/FilterSidebar.d.ts +7 -9
  93. package/dist/Components/FilterSidebar/FilterSidebar.js +90 -233
  94. package/dist/Components/FilterSidebar/OptionsSection.d.ts +14 -0
  95. package/dist/Components/FilterSidebar/OptionsSection.js +46 -0
  96. package/dist/Components/FilterSidebar/RangeSection.d.ts +17 -0
  97. package/dist/Components/FilterSidebar/RangeSection.js +80 -0
  98. package/dist/Components/FilterSidebar/SectionHeader.d.ts +13 -0
  99. package/dist/Components/FilterSidebar/SectionHeader.js +29 -0
  100. package/dist/Components/FilterSidebar/useStableCallback.d.ts +1 -0
  101. package/dist/Components/FilterSidebar/useStableCallback.js +12 -0
  102. package/dist/Components/Form/FormWrapper.d.ts +7 -7
  103. package/dist/Components/Form/FormWrapper.js +5 -3
  104. package/dist/Components/FormField/FormField.js +1 -1
  105. package/dist/Components/Header/Header.js +1 -1
  106. package/dist/Components/Header/HeaderActions.js +4 -2
  107. package/dist/Components/IconButton/IconButtonProps.d.ts +2 -1
  108. package/dist/Components/Input/TextInput.js +2 -2
  109. package/dist/Components/Input/TextInputProps.d.ts +3 -1
  110. package/dist/Components/KanbanBoard/AccountCard.js +1 -1
  111. package/dist/Components/KanbanBoard/KanbanBoard.d.ts +1 -1
  112. package/dist/Components/KanbanBoard/KanbanBoard.js +11 -7
  113. package/dist/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  114. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +2 -1
  115. package/dist/Components/LazyWrapper/LazyWrapper.js +1 -1
  116. package/dist/Components/MediaViewer/MediaViewer.js +4 -3
  117. package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  118. package/dist/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  119. package/dist/Components/MediaViewer/components/MediaScrubber.js +7 -2
  120. package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  121. package/dist/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  122. package/dist/Components/MediaViewer/hooks/useFileViewer.d.ts +1 -0
  123. package/dist/Components/MediaViewer/mediaItems.d.ts +1 -0
  124. package/dist/Components/MediaViewer/mediaItems.js +5 -0
  125. package/dist/Components/Modal/Modal.d.ts +1 -0
  126. package/dist/Components/Modal/Modal.js +7 -25
  127. package/dist/Components/Modal/warnDroppedSlotChildren.d.ts +1 -1
  128. package/dist/Components/Modal/warnDroppedSlotChildren.js +7 -3
  129. package/dist/Components/NavLauncher/LauncherTabs.js +2 -1
  130. package/dist/Components/NavLauncher/NavLauncher.js +44 -22
  131. package/dist/Components/NavLauncher/NavLauncherProps.d.ts +6 -4
  132. package/dist/Components/NavLauncher/ScopeBar.js +4 -2
  133. package/dist/Components/NavLauncher/engine/engine.js +2 -1
  134. package/dist/Components/NavLauncher/engine/fold.js +2 -1
  135. package/dist/Components/NavLauncher/launcherParts.d.ts +12 -0
  136. package/dist/Components/NavLauncher/launcherParts.js +45 -11
  137. package/dist/Components/NavLauncher/searchLayout.d.ts +1 -0
  138. package/dist/Components/NavLauncher/searchLayout.js +3 -1
  139. package/dist/Components/NavLauncher/spotlightParts.d.ts +6 -2
  140. package/dist/Components/NavLauncher/spotlightParts.js +22 -9
  141. package/dist/Components/NavLauncher/useCopiedFlash.d.ts +6 -0
  142. package/dist/Components/NavLauncher/useCopiedFlash.js +21 -0
  143. package/dist/Components/NavigationBar/NavigationBar.js +6 -5
  144. package/dist/Components/NoteTextArea/NoteTextArea.js +12 -17
  145. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +5 -3
  146. package/dist/Components/Notification/Notification.js +19 -21
  147. package/dist/Components/Notification/NotificationProps.d.ts +1 -1
  148. package/dist/Components/NotificationBell/notificationHelpers.d.ts +16 -1
  149. package/dist/Components/NotificationBell/notificationHelpers.js +13 -7
  150. package/dist/Components/OffersList/OffersList.js +4 -2
  151. package/dist/Components/OptionChip/OptionChip.js +3 -2
  152. package/dist/Components/OptionChip/optionInk.js +4 -2
  153. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  154. package/dist/Components/OrgSwitcher/OrgSwitcher.js +13 -6
  155. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +1 -1
  156. package/dist/Components/OrganizationDetails/OrganizationDetails.js +4 -7
  157. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +4 -2
  158. package/dist/Components/PdfViewer/PdfViewer.d.ts +1 -0
  159. package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +1 -1
  160. package/dist/Components/PlanPill/PlanPill.js +4 -2
  161. package/dist/Components/PlanPill/PlanPillProps.d.ts +1 -1
  162. package/dist/Components/ProductCard/ProductCardAction.js +2 -1
  163. package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
  164. package/dist/Components/ProductDetails/ProductDetails.js +2 -1
  165. package/dist/Components/ProfileCard/ProfileCard.d.ts +1 -0
  166. package/dist/Components/ProfileCard/ProfileCard.js +12 -26
  167. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  168. package/dist/Components/ProgressBar/ProgressBar.js +2 -1
  169. package/dist/Components/QuantityStepper/QuantityStepper.js +5 -2
  170. package/dist/Components/QueryState/QueryStateBoundary.d.ts +1 -1
  171. package/dist/Components/QueryState/QueryStateBoundary.js +5 -1
  172. package/dist/Components/QueryState/QueryStateProps.d.ts +6 -2
  173. package/dist/Components/RadioButton/RadioButton.js +2 -3
  174. package/dist/Components/RolesPermission/RolesPermission.js +12 -8
  175. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +1 -0
  176. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +4 -1
  177. package/dist/Components/ScrollbarBox/ScrollbarBox.js +10 -4
  178. package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -1
  179. package/dist/Components/SearchSelect/SearchSelect.js +8 -5
  180. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +3 -3
  181. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  182. package/dist/Components/SegmentedControl/SegmentedControl.js +1 -1
  183. package/dist/Components/Select/Select.js +6 -0
  184. package/dist/Components/Select/SelectNative.d.ts +16 -0
  185. package/dist/Components/Select/SelectPopup.js +170 -63
  186. package/dist/Components/Select/SelectProps.d.ts +30 -2
  187. package/dist/Components/Select/groupedWindow.d.ts +21 -0
  188. package/dist/Components/Select/groupedWindow.js +50 -0
  189. package/dist/Components/SelectSearch/SelectSearch.d.ts +1 -1
  190. package/dist/Components/SelectSearch/SelectSearch.js +48 -38
  191. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +3 -3
  192. package/dist/Components/SelectV2/SelectV2.d.ts +1 -1
  193. package/dist/Components/SelectV2/SelectV2.js +1 -1
  194. package/dist/Components/SelectV2/SelectV2Props.d.ts +3 -3
  195. package/dist/Components/SideBar/SecondaryBar.js +3 -2
  196. package/dist/Components/SideBar/components/MenuItemBox.js +3 -2
  197. package/dist/Components/SideBar/components/MenuItems.js +1 -1
  198. package/dist/Components/SideBar/components/OtherApps.js +2 -2
  199. package/dist/Components/SideBar/components/PinnedSection.js +1 -1
  200. package/dist/Components/SideBar/sidebarScale.d.ts +2 -2
  201. package/dist/Components/SideBar/sidebarScale.js +2 -2
  202. package/dist/Components/SignInActivityTable/SignInActivityTable.js +7 -2
  203. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +1 -1
  204. package/dist/Components/SignInActivityTable/scrollRegionRing.d.ts +10 -0
  205. package/dist/Components/SignInActivityTable/scrollRegionRing.js +14 -0
  206. package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -1
  207. package/dist/Components/Slider/Slider.d.ts +2 -0
  208. package/dist/Components/Slider/Slider.js +5 -4
  209. package/dist/Components/StageProgress/StageItem.js +2 -1
  210. package/dist/Components/StageProgress/StageProgress.js +8 -2
  211. package/dist/Components/StageProgress/StageProgressProps.d.ts +2 -0
  212. package/dist/Components/StageProgress/StepperStage.js +2 -1
  213. package/dist/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  214. package/dist/Components/Table/Table.js +5 -3
  215. package/dist/Components/Table/components/HeaderActions.js +5 -3
  216. package/dist/Components/Table/components/TableBody.js +13 -8
  217. package/dist/Components/Table/components/TableGroupRow.js +2 -1
  218. package/dist/Components/Table/components/TableHeader.js +14 -20
  219. package/dist/Components/Table/components/rowDetail.js +3 -2
  220. package/dist/Components/Table/filters/ActiveFilters.js +6 -3
  221. package/dist/Components/Table/filters/CompactSelect.js +2 -1
  222. package/dist/Components/Table/filters/FilterDatePicker.d.ts +6 -0
  223. package/dist/Components/Table/filters/FilterDatePicker.js +61 -0
  224. package/dist/Components/Table/filters/LeftFilterPane.d.ts +1 -0
  225. package/dist/Components/Table/filters/LeftFilterPane.js +14 -6
  226. package/dist/Components/Table/hooks/useTable.js +11 -7
  227. package/dist/Components/Table/settings/ManageColumns.js +4 -3
  228. package/dist/Components/Table/settings/TableSettings.js +4 -4
  229. package/dist/Components/Tabs/Tabs.d.ts +1 -0
  230. package/dist/Components/Tabs/Tabs.js +1 -0
  231. package/dist/Components/Tabs/components/CountBadge.d.ts +1 -0
  232. package/dist/Components/Tabs/components/TabList.d.ts +1 -0
  233. package/dist/Components/Tabs/components/TabList.js +1 -0
  234. package/dist/Components/Tabs/components/TabPanel.d.ts +1 -0
  235. package/dist/Components/Tabs/components/TabPanel.js +1 -0
  236. package/dist/Components/Tabs/tabStyles.js +4 -2
  237. package/dist/Components/Tag/Tag.js +5 -4
  238. package/dist/Components/Tag/Tag.styles.js +5 -4
  239. package/dist/Components/Tag/TagProps.d.ts +4 -1
  240. package/dist/Components/Tag/tagDot.js +10 -3
  241. package/dist/Components/TagInput/TagInput.js +6 -5
  242. package/dist/Components/TagInput/TagInputProps.d.ts +15 -0
  243. package/dist/Components/TagInput/tagEntries.d.ts +7 -1
  244. package/dist/Components/TagInput/tagEntries.js +18 -5
  245. package/dist/Components/TimePicker/TimePicker.js +7 -3
  246. package/dist/Components/TimePicker/TimePickerProps.d.ts +2 -0
  247. package/dist/Components/Timeline/Timeline.js +13 -9
  248. package/dist/Components/Toaster/Toaster.js +2 -1
  249. package/dist/Components/Toggle/TableToggle.d.ts +1 -1
  250. package/dist/Components/Toggle/TableToggle.js +1 -1
  251. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -2
  252. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +1 -1
  253. package/dist/Components/UserDetails/UserDetails.js +5 -7
  254. package/dist/Components/WishlistToggle/WishlistToggle.js +2 -1
  255. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +11 -1
  256. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +3 -1
  257. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +14 -7
  258. package/dist/Hooks/useOutsideMouseDown.d.ts +11 -0
  259. package/dist/Hooks/useOutsideMouseDown.js +30 -0
  260. package/dist/Hooks/usePreferences.js +30 -12
  261. package/dist/Hooks/useScrollableRegion.d.ts +17 -0
  262. package/dist/Hooks/useScrollableRegion.js +36 -0
  263. package/dist/Hooks/useSidebarPrefs.d.ts +1 -0
  264. package/dist/Theme/chakra/Menu.styles.d.ts +4 -0
  265. package/dist/Theme/chakra/Menu.styles.js +6 -0
  266. package/dist/Theme/chakra/componentStyles.d.ts +4 -0
  267. package/dist/Theme/chakra/componentStyles.js +1 -1
  268. package/dist/Theme/chakra/createBrandTheme.d.ts +1 -0
  269. package/dist/Theme/chakra/focusRing.styles.d.ts +1 -1
  270. package/dist/Theme/chakra/focusRing.styles.js +3 -3
  271. package/dist/Theme/chakra/paletteFromTheme.d.ts +2 -1
  272. package/dist/Theme/chakra/paletteFromTheme.js +18 -4
  273. package/dist/Theme/provider/PixelizeThemeProvider.d.ts +1 -0
  274. package/dist/Theme/provider/ThemeSwitcher.d.ts +1 -0
  275. package/dist/Theme/provider/ThemeSwitcher.js +1 -1
  276. package/dist/Theme/testing/testPalette.d.ts +1 -0
  277. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +1 -0
  278. package/dist/Theme/tokens/builders/filledSurface.js +3 -2
  279. package/dist/Theme/tokens/builders/focusRing.js +4 -1
  280. package/dist/Theme/tokens/builders/paletteScale.d.ts +2 -0
  281. package/dist/Theme/tokens/builders/paletteScale.js +10 -0
  282. package/dist/Theme/tokens/types.d.ts +1 -0
  283. package/dist/Utils/accountHandoff.d.ts +3 -0
  284. package/dist/Utils/price.d.ts +1 -0
  285. package/dist/Utils/tabular.d.ts +30 -0
  286. package/dist/Utils/tabular.js +61 -0
  287. package/dist/esm/Components/Accordion/Accordion.js +11 -8
  288. package/dist/esm/Components/Accordion/accordionColors.js +2 -3
  289. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +2 -1
  290. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
  291. package/dist/esm/Components/Apexcharts/ApexPieChart/pieImageTexture.js +10 -0
  292. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +6 -3
  293. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +18 -11
  294. package/dist/esm/Components/AppSwitcher/pixelizeSuite.js +67 -0
  295. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +3 -3
  296. package/dist/esm/Components/Avatar/avatarColorway.js +4 -4
  297. package/dist/esm/Components/Button/Button.styles.js +5 -2
  298. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
  299. package/dist/esm/Components/CalendarGrid/CalendarGrid.js +5 -3
  300. package/dist/esm/Components/Card/Card.js +1 -0
  301. package/dist/esm/Components/Checkbox/Checkbox.styles.js +3 -1
  302. package/dist/esm/Components/CheckoutKit/selectable.js +10 -7
  303. package/dist/esm/Components/CheckoutKit/tonalHover.js +2 -0
  304. package/dist/esm/Components/ChoiceCard/ChoiceCard.js +2 -1
  305. package/dist/esm/Components/Common/FormLabel.js +4 -3
  306. package/dist/esm/Components/Common/HelperText.js +1 -2
  307. package/dist/esm/Components/Common/activationKey.js +7 -0
  308. package/dist/esm/Components/Common/fieldMessageStyles.js +2 -1
  309. package/dist/esm/Components/Common/findSlot.js +17 -0
  310. package/dist/esm/Components/Common/surfaceFocusRing.js +3 -0
  311. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +18 -6
  312. package/dist/esm/Components/CopyButton/CopyButton.js +3 -6
  313. package/dist/esm/Components/CouponField/CouponField.js +5 -2
  314. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +3 -1
  315. package/dist/esm/Components/DatePicker/CalendarPanel.js +3 -1
  316. package/dist/esm/Components/DatePicker/DatePicker.js +25 -27
  317. package/dist/esm/Components/DatePicker/PickerPortal.js +2 -2
  318. package/dist/esm/Components/DatePicker/RangeDatePicker.js +10 -29
  319. package/dist/esm/Components/DatePicker/SingleDatePicker.js +5 -21
  320. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -20
  321. package/dist/esm/Components/DescriptionList/DescriptionList.js +1 -1
  322. package/dist/esm/Components/DetailSections/DetailSections.js +2 -1
  323. package/dist/esm/Components/Divider/Divider.js +3 -3
  324. package/dist/esm/Components/Drawer/Drawer.js +19 -18
  325. package/dist/esm/Components/Dropdown/DropDown.js +7 -22
  326. package/dist/esm/Components/Editor/Editor.js +7 -3
  327. package/dist/esm/Components/Editor/editorLabels.js +1 -0
  328. package/dist/esm/Components/Editor/editorTokenStyles.js +7 -0
  329. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +8 -4
  330. package/dist/esm/Components/EmptyState/FilteredEmptyState.js +18 -0
  331. package/dist/esm/Components/FilePreview/FilePreview.js +8 -4
  332. package/dist/esm/Components/FileUpload/FileUpload.js +8 -9
  333. package/dist/esm/Components/FileUploader/FileUploader.js +6 -7
  334. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +94 -237
  335. package/dist/esm/Components/FilterSidebar/OptionsSection.js +41 -0
  336. package/dist/esm/Components/FilterSidebar/RangeSection.js +78 -0
  337. package/dist/esm/Components/FilterSidebar/SectionHeader.js +23 -0
  338. package/dist/esm/Components/FilterSidebar/useStableCallback.js +8 -0
  339. package/dist/esm/Components/Form/FormWrapper.js +5 -3
  340. package/dist/esm/Components/FormField/FormField.js +1 -1
  341. package/dist/esm/Components/Header/Header.js +1 -1
  342. package/dist/esm/Components/Header/HeaderActions.js +6 -4
  343. package/dist/esm/Components/Input/TextInput.js +2 -2
  344. package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -1
  345. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  346. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +11 -7
  347. package/dist/esm/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  348. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -1
  349. package/dist/esm/Components/MediaViewer/MediaViewer.js +5 -4
  350. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  351. package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  352. package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +7 -2
  353. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  354. package/dist/esm/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  355. package/dist/esm/Components/MediaViewer/mediaItems.js +4 -0
  356. package/dist/esm/Components/Modal/Modal.js +2 -17
  357. package/dist/esm/Components/Modal/warnDroppedSlotChildren.js +7 -3
  358. package/dist/esm/Components/NavLauncher/LauncherTabs.js +2 -1
  359. package/dist/esm/Components/NavLauncher/NavLauncher.js +47 -25
  360. package/dist/esm/Components/NavLauncher/ScopeBar.js +4 -2
  361. package/dist/esm/Components/NavLauncher/engine/engine.js +2 -1
  362. package/dist/esm/Components/NavLauncher/engine/fold.js +2 -1
  363. package/dist/esm/Components/NavLauncher/launcherParts.js +40 -8
  364. package/dist/esm/Components/NavLauncher/searchLayout.js +1 -0
  365. package/dist/esm/Components/NavLauncher/spotlightParts.js +23 -10
  366. package/dist/esm/Components/NavLauncher/useCopiedFlash.js +17 -0
  367. package/dist/esm/Components/NavigationBar/NavigationBar.js +6 -5
  368. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +12 -17
  369. package/dist/esm/Components/Notification/Notification.js +20 -22
  370. package/dist/esm/Components/NotificationBell/notificationHelpers.js +12 -6
  371. package/dist/esm/Components/OffersList/OffersList.js +4 -2
  372. package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
  373. package/dist/esm/Components/OptionChip/optionInk.js +4 -2
  374. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  375. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -7
  376. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -8
  377. package/dist/esm/Components/PlanPill/PlanPill.js +4 -2
  378. package/dist/esm/Components/ProductCard/ProductCardAction.js +2 -1
  379. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
  380. package/dist/esm/Components/ProductDetails/ProductDetails.js +2 -1
  381. package/dist/esm/Components/ProfileCard/ProfileCard.js +6 -17
  382. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  383. package/dist/esm/Components/ProgressBar/ProgressBar.js +2 -1
  384. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +5 -2
  385. package/dist/esm/Components/QueryState/QueryStateBoundary.js +5 -1
  386. package/dist/esm/Components/RadioButton/RadioButton.js +2 -3
  387. package/dist/esm/Components/RolesPermission/RolesPermission.js +12 -8
  388. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -3
  389. package/dist/esm/Components/SearchSelect/SearchSelect.js +8 -5
  390. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +1 -1
  391. package/dist/esm/Components/Select/Select.js +6 -0
  392. package/dist/esm/Components/Select/SelectPopup.js +171 -64
  393. package/dist/esm/Components/Select/groupedWindow.js +44 -0
  394. package/dist/esm/Components/SelectSearch/SelectSearch.js +49 -39
  395. package/dist/esm/Components/SelectV2/SelectV2.js +1 -1
  396. package/dist/esm/Components/SideBar/SecondaryBar.js +3 -2
  397. package/dist/esm/Components/SideBar/components/MenuItemBox.js +3 -2
  398. package/dist/esm/Components/SideBar/components/MenuItems.js +1 -1
  399. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -2
  400. package/dist/esm/Components/SideBar/components/PinnedSection.js +1 -1
  401. package/dist/esm/Components/SideBar/sidebarScale.js +2 -2
  402. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +8 -3
  403. package/dist/esm/Components/SignInActivityTable/scrollRegionRing.js +9 -0
  404. package/dist/esm/Components/Slider/Slider.js +6 -5
  405. package/dist/esm/Components/StageProgress/StageItem.js +2 -1
  406. package/dist/esm/Components/StageProgress/StageProgress.js +8 -2
  407. package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
  408. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  409. package/dist/esm/Components/Table/Table.js +8 -6
  410. package/dist/esm/Components/Table/components/HeaderActions.js +7 -5
  411. package/dist/esm/Components/Table/components/TableBody.js +13 -8
  412. package/dist/esm/Components/Table/components/TableGroupRow.js +2 -1
  413. package/dist/esm/Components/Table/components/TableHeader.js +15 -21
  414. package/dist/esm/Components/Table/components/rowDetail.js +3 -2
  415. package/dist/esm/Components/Table/filters/ActiveFilters.js +8 -5
  416. package/dist/esm/Components/Table/filters/CompactSelect.js +2 -1
  417. package/dist/esm/Components/Table/filters/FilterDatePicker.js +20 -0
  418. package/dist/esm/Components/Table/filters/LeftFilterPane.js +14 -6
  419. package/dist/esm/Components/Table/hooks/useTable.js +11 -7
  420. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
  421. package/dist/esm/Components/Table/settings/TableSettings.js +4 -4
  422. package/dist/esm/Components/Tabs/Tabs.js +1 -0
  423. package/dist/esm/Components/Tabs/components/TabList.js +1 -0
  424. package/dist/esm/Components/Tabs/components/TabPanel.js +1 -0
  425. package/dist/esm/Components/Tabs/tabStyles.js +5 -3
  426. package/dist/esm/Components/Tag/Tag.js +5 -4
  427. package/dist/esm/Components/Tag/Tag.styles.js +5 -4
  428. package/dist/esm/Components/Tag/tagDot.js +10 -3
  429. package/dist/esm/Components/TagInput/TagInput.js +8 -7
  430. package/dist/esm/Components/TagInput/tagEntries.js +16 -4
  431. package/dist/esm/Components/TimePicker/TimePicker.js +7 -3
  432. package/dist/esm/Components/Timeline/Timeline.js +14 -10
  433. package/dist/esm/Components/Toaster/Toaster.js +2 -1
  434. package/dist/esm/Components/Toggle/TableToggle.js +1 -1
  435. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -2
  436. package/dist/esm/Components/UserDetails/UserDetails.js +5 -7
  437. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +2 -1
  438. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +12 -2
  439. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +3 -1
  440. package/dist/esm/Hooks/useOutsideMouseDown.js +26 -0
  441. package/dist/esm/Hooks/usePreferences.js +30 -12
  442. package/dist/esm/Hooks/useScrollableRegion.js +33 -0
  443. package/dist/esm/Theme/chakra/Menu.styles.js +6 -0
  444. package/dist/esm/Theme/chakra/componentStyles.js +1 -1
  445. package/dist/esm/Theme/chakra/focusRing.styles.js +3 -3
  446. package/dist/esm/Theme/chakra/paletteFromTheme.js +16 -3
  447. package/dist/esm/Theme/provider/ThemeSwitcher.js +1 -1
  448. package/dist/esm/Theme/tokens/builders/filledSurface.js +3 -2
  449. package/dist/esm/Theme/tokens/builders/focusRing.js +4 -1
  450. package/dist/esm/Theme/tokens/builders/paletteScale.js +6 -0
  451. package/dist/esm/Utils/tabular.js +56 -0
  452. package/dist/esm/index.js +16 -24
  453. package/dist/index.d.ts +54 -2
  454. package/dist/index.js +33 -29
  455. package/package.json +3 -1
  456. package/dist/Components/Buttons/Buttons.d.ts +0 -3
  457. package/dist/Components/Buttons/Buttons.js +0 -9
  458. package/dist/Components/Buttons/ButtonsProps.d.ts +0 -12
  459. package/dist/Components/Common/ErrorComponent.d.ts +0 -7
  460. package/dist/Components/Common/ErrorComponent.js +0 -16
  461. package/dist/Components/Common/FormattedDescription.d.ts +0 -7
  462. package/dist/Components/Common/FormattedDescription.js +0 -62
  463. package/dist/Components/Common/Label.d.ts +0 -9
  464. package/dist/Components/Common/Label.js +0 -12
  465. package/dist/Components/Input/Input/Input.d.ts +0 -4
  466. package/dist/Components/Input/Input/Input.js +0 -75
  467. package/dist/Components/Input/Input/InputProps.d.ts +0 -24
  468. package/dist/Components/Input/Input/InputProps.js +0 -2
  469. package/dist/Components/ProductCard/productCardFixtures.d.ts +0 -7
  470. package/dist/Components/ProductCard/productCardFixtures.js +0 -61
  471. package/dist/esm/Components/Buttons/Buttons.js +0 -4
  472. package/dist/esm/Components/Common/ErrorComponent.js +0 -14
  473. package/dist/esm/Components/Common/FormattedDescription.js +0 -60
  474. package/dist/esm/Components/Common/Label.js +0 -10
  475. package/dist/esm/Components/Input/Input/Input.js +0 -37
  476. package/dist/esm/Components/Input/Input/InputProps.js +0 -1
  477. package/dist/esm/Components/ProductCard/productCardFixtures.js +0 -58
  478. package/dist/esm/services/feedback.js +0 -15
  479. package/dist/services/feedback.d.ts +0 -12
  480. package/dist/services/feedback.js +0 -18
  481. /package/dist/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
  482. /package/dist/esm/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
@@ -34,6 +34,7 @@ const ReviewList_1 = __importDefault(require("../ReviewList/ReviewList"));
34
34
  const commerceVariants_1 = require("../Commerce/commerceVariants");
35
35
  const productDetailsModel_1 = require("./productDetailsModel");
36
36
  const useInViewport_1 = require("./useInViewport");
37
+ const tonalHover_1 = require("../CheckoutKit/tonalHover");
37
38
  const DESKTOP_QUERY = "(min-width: 1024px)";
38
39
  const DESKTOP_MIN_WIDTH = 960;
39
40
  const DEFAULT_ADDED_MS = 1600;
@@ -211,7 +212,7 @@ const ProductDetails = ({ product, selection: selectionProp, defaultSelection, o
211
212
  const badgeSlot = product.badges && product.badges.length > 0 ? (0, jsx_runtime_1.jsx)(ProductBadges_1.default, { badges: product.badges, max: 2, variant: "glass", size: "md" }) : undefined;
212
213
  const gallery = mediaSlot !== null && mediaSlot !== void 0 ? mediaSlot : ((0, jsx_runtime_1.jsx)(MediaGallery_1.default, { media: product.media, layout: desktop ? "thumbs-left" : "swipe", aspectRatio: "4/5", activeMediaIds: activeIds, sticky: desktop, stickyTop: 24, badges: badgeSlot, actions: desktop ? undefined : wishlist, isLoading: isLoading, "aria-label": product.title }));
213
214
  const primaryButton = ((0, jsx_runtime_1.jsx)(Button_1.default, { size: controlSize, width: "100%", variant: notifyMode ? "outline" : "solid", label: primaryLabel, leftIcon: bag === "added" ? (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 18, "aria-hidden": true }) : notifyMode ? (0, jsx_runtime_1.jsx)(lucide_react_1.BellRing, { size: 18, "aria-hidden": true }) : undefined, isLoading: bag === "adding", onClick: notifyMode ? handleNotify : handleAdd, fontWeight: 600 }));
214
- const buyPanel = isLoading ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 4, "aria-busy": "true", children: [(0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "1rem", width: "30%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "2rem", width: "90%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "2.5rem", width: "45%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "3rem", width: "100%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "3rem", width: "100%" })] })) : ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 6, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 2, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", gap: 3, minH: product.brand || onShare ? "2.75rem" : undefined, children: [product.brand ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: "sm", fontWeight: 600, color: colors.textMuted, children: product.brand })) : ((0, jsx_runtime_1.jsx)("span", {})), onShare ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": labels.share, onClick: onShare, display: "inline-flex", alignItems: "center", justifyContent: "center", boxSize: "2.75rem", mr: "-0.625rem", borderRadius: "full", color: colors.header[900], transition: (0, motion_1.transitionFor)(["background-color"]), _hover: { bg: colors.background[100] }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Share2, { size: 20, "aria-hidden": true }) })) : null] }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "h1", fontSize: desktop ? "1.75rem" : "1.375rem", lineHeight: 1.25, fontWeight: 700, letterSpacing: "-0.02em", color: colors.header[900], children: product.title }), product.rating !== undefined && showReviews ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", onClick: jumpToReviews, "aria-label": labels.jumpToReviews(ratingText), alignSelf: "flex-start", display: "inline-flex", alignItems: "center", minH: "2.75rem", borderRadius: "md", sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors) }, children: (0, jsx_runtime_1.jsx)(Rating_1.default, { value: product.rating, count: product.ratingCount, size: "sm", "aria-label": ratingText, locale: locale }) })) : product.rating !== undefined ? ((0, jsx_runtime_1.jsx)(Rating_1.default, { value: product.rating, count: product.ratingCount, size: "sm", locale: locale })) : null] }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 2, children: [(0, jsx_runtime_1.jsx)(PriceBlock_1.default, { size: "lg", price: price, mrp: mrp, priceRange: showRange ? range : undefined, showSavings: true, taxNote: labels.taxNote, unitPrice: (0, productDetailsModel_1.packUnitPrice)(product, selection, price), ...fmt }), state ? (0, jsx_runtime_1.jsx)(StockStatus_1.default, { status: state, count: variant === null || variant === void 0 ? void 0 : variant.stock }) : null, metaSlot] }), offers && offers.length > 0 ? (0, jsx_runtime_1.jsx)(OffersList_1.default, { offers: offers, ...offersProps }) : null, axes.length > 0 ? ((0, jsx_runtime_1.jsx)(react_2.Box, { ref: selectorRef, children: (0, jsx_runtime_1.jsx)(VariantSelector_1.default, { axes: axes, variants: variants, value: selection, onValueChange: handleSelection, error: showSelectError && !complete ? selectPrompt : undefined, showSelectedLabel: true, showLowStock: true, onGuideClick: onGuideClick }) })) : null, (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 3, ref: ctaRef, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 3, children: [showStepper ? ((0, jsx_runtime_1.jsx)(QuantityStepper_1.default, { size: controlSize, value: quantity, onValueChange: handleQuantity, min: 1, max: ceiling, itemLabel: product.title })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, minW: 0, children: primaryButton }), desktop ? wishlist : null] }), showBuyNow ? (0, jsx_runtime_1.jsx)(Button_1.default, { size: controlSize, width: "100%", variant: "outline", label: labels.buyNow, onClick: handleBuyNow }) : null, addFailed ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { role: "alert", align: "center", gap: 1.5, color: colors.semanticText.error, fontSize: "sm", fontWeight: 600, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleAlert, { size: 14, "aria-hidden": true }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", children: labels.addFailed })] })) : null] }), pincode ? (0, jsx_runtime_1.jsx)(PincodeChecker_1.default, { ...pincode }) : null, trustItems && trustItems.length > 0 ? (0, jsx_runtime_1.jsx)(TrustBadges_1.default, { items: trustItems, layout: desktop ? "grid" : "row" }) : null, infoSlot] }));
215
+ const buyPanel = isLoading ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 4, "aria-busy": "true", children: [(0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "1rem", width: "30%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "2rem", width: "90%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "2.5rem", width: "45%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "3rem", width: "100%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: "3rem", width: "100%" })] })) : ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 6, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 2, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", justify: "space-between", gap: 3, minH: product.brand || onShare ? "2.75rem" : undefined, children: [product.brand ? ((0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", fontSize: "sm", fontWeight: 600, color: colors.textMuted, children: product.brand })) : ((0, jsx_runtime_1.jsx)("span", {})), onShare ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", "aria-label": labels.share, onClick: onShare, display: "inline-flex", alignItems: "center", justifyContent: "center", boxSize: "2.75rem", mr: "-0.625rem", borderRadius: "full", color: colors.header[900], transition: (0, motion_1.transitionFor)(["background-color"]), _hover: { bg: (0, tonalHover_1.tonalHover)(colors, colors.background[50], colors.background[100]) }, sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors), ...(0, motion_2.reducedMotionSx)() }, children: (0, jsx_runtime_1.jsx)(lucide_react_1.Share2, { size: 20, "aria-hidden": true }) })) : null] }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "h1", fontSize: desktop ? "1.75rem" : "1.375rem", lineHeight: 1.25, fontWeight: 700, letterSpacing: "-0.02em", color: colors.header[900], children: product.title }), product.rating !== undefined && showReviews ? ((0, jsx_runtime_1.jsx)(react_2.Box, { as: "button", type: "button", onClick: jumpToReviews, "aria-label": labels.jumpToReviews(ratingText), alignSelf: "flex-start", display: "inline-flex", alignItems: "center", minH: "2.75rem", borderRadius: "md", sx: { ...(0, focusRing_styles_1.focusVisibleStyles)(colors) }, children: (0, jsx_runtime_1.jsx)(Rating_1.default, { value: product.rating, count: product.ratingCount, size: "sm", "aria-label": ratingText, locale: locale }) })) : product.rating !== undefined ? ((0, jsx_runtime_1.jsx)(Rating_1.default, { value: product.rating, count: product.ratingCount, size: "sm", locale: locale })) : null] }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 2, children: [(0, jsx_runtime_1.jsx)(PriceBlock_1.default, { size: "lg", price: price, mrp: mrp, priceRange: showRange ? range : undefined, showSavings: true, taxNote: labels.taxNote, unitPrice: (0, productDetailsModel_1.packUnitPrice)(product, selection, price), ...fmt }), state ? (0, jsx_runtime_1.jsx)(StockStatus_1.default, { status: state, count: variant === null || variant === void 0 ? void 0 : variant.stock }) : null, metaSlot] }), offers && offers.length > 0 ? (0, jsx_runtime_1.jsx)(OffersList_1.default, { offers: offers, ...offersProps }) : null, axes.length > 0 ? ((0, jsx_runtime_1.jsx)(react_2.Box, { ref: selectorRef, children: (0, jsx_runtime_1.jsx)(VariantSelector_1.default, { axes: axes, variants: variants, value: selection, onValueChange: handleSelection, error: showSelectError && !complete ? selectPrompt : undefined, showSelectedLabel: true, showLowStock: true, onGuideClick: onGuideClick }) })) : null, (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: 3, ref: ctaRef, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { align: "center", gap: 3, children: [showStepper ? ((0, jsx_runtime_1.jsx)(QuantityStepper_1.default, { size: controlSize, value: quantity, onValueChange: handleQuantity, min: 1, max: ceiling, itemLabel: product.title })) : null, (0, jsx_runtime_1.jsx)(react_2.Box, { flex: 1, minW: 0, children: primaryButton }), desktop ? wishlist : null] }), showBuyNow ? (0, jsx_runtime_1.jsx)(Button_1.default, { size: controlSize, width: "100%", variant: "outline", label: labels.buyNow, onClick: handleBuyNow }) : null, addFailed ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { role: "alert", align: "center", gap: 1.5, color: colors.semanticText.error, fontSize: "sm", fontWeight: 600, children: [(0, jsx_runtime_1.jsx)(lucide_react_1.CircleAlert, { size: 14, "aria-hidden": true }), (0, jsx_runtime_1.jsx)(react_2.Text, { as: "span", children: labels.addFailed })] })) : null] }), pincode ? (0, jsx_runtime_1.jsx)(PincodeChecker_1.default, { ...pincode }) : null, trustItems && trustItems.length > 0 ? (0, jsx_runtime_1.jsx)(TrustBadges_1.default, { items: trustItems, layout: desktop ? "grid" : "row" }) : null, infoSlot] }));
215
216
  return ((0, jsx_runtime_1.jsxs)(react_2.Box, { ref: rootRef, "data-testid": testId, "data-layout": desktop ? "desktop" : "mobile", w: "100%", maxW: "82rem", mx: "auto", px: desktop ? 6 : 0, children: [(0, jsx_runtime_1.jsx)(react_2.VisuallyHidden, { role: "status", "aria-live": "polite", "aria-atomic": "true", children: announcement }), breadcrumbs ? (0, jsx_runtime_1.jsx)(react_2.Box, { px: desktop ? 0 : gutter, py: 3, children: breadcrumbs }) : null, (0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: desktop ? "row" : "column", align: desktop ? "flex-start" : "stretch", gap: desktop ? 12 : 5, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { flex: desktop ? "1.63 1 0" : undefined, minW: 0, w: desktop ? undefined : "100%", children: gallery }), (0, jsx_runtime_1.jsx)(react_2.Box, { flex: desktop ? "1 1 0" : undefined, minW: 0, px: desktop ? 0 : gutter, children: buyPanel })] }), !isLoading ? ((0, jsx_runtime_1.jsxs)(react_2.Flex, { direction: "column", gap: sectionGap, mt: sectionGap, px: desktop ? 0 : gutter, children: [(0, jsx_runtime_1.jsx)(DetailSections_1.default, { description: product.description, highlights: product.highlights, specs: product.specs, care: care, shipping: product.returnsNote, legal: hasLegal
216
217
  ? {
217
218
  netQuantity: product.netQuantity,
@@ -3,4 +3,5 @@ import { ProfileCardProps, ProfileCardHeaderSlotProps, ProfileCardBodySlotProps,
3
3
  export declare const ProfileCardHeader: React.FC<ProfileCardHeaderSlotProps>;
4
4
  export declare const ProfileCardBody: React.FC<ProfileCardBodySlotProps>;
5
5
  export declare const ProfileCardFooter: React.FC<ProfileCardFooterSlotProps>;
6
+ /** Card built from ProfileCardHeader, Body and Footer slots; other children are dropped. */
6
7
  export default function ProfileCard({ maxW, align, variant, direction, justify, children, size, color, overflow, dividercolor, dividersize, dividervariant, CardStyle, CardHeaderStyle, CardBodyStyle, borderTopColor, borderLeftColor, }: ProfileCardProps): import("react/jsx-runtime").JSX.Element;
@@ -1,14 +1,12 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  exports.ProfileCardFooter = exports.ProfileCardBody = exports.ProfileCardHeader = void 0;
7
4
  exports.default = ProfileCard;
8
5
  const jsx_runtime_1 = require("react/jsx-runtime");
9
- const react_1 = __importDefault(require("react"));
10
- const react_2 = require("@chakra-ui/react");
6
+ const react_1 = require("@chakra-ui/react");
11
7
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
+ const warnDroppedSlotChildren_1 = require("../Modal/warnDroppedSlotChildren");
9
+ const findSlot_1 = require("../Common/findSlot");
12
10
  const ProfileCardHeader = ({ children, }) => {
13
11
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
14
12
  };
@@ -21,39 +19,27 @@ const ProfileCardFooter = ({ children, }) => {
21
19
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: children });
22
20
  };
23
21
  exports.ProfileCardFooter = ProfileCardFooter;
24
- const isReactElement = (child) => child !== null && typeof child === "object" && "type" in child;
25
- // Matches by type one Fragment deep, so `<>{cond && <ProfileCardFooter>...</ProfileCardFooter>}</>` isn't dropped.
26
- const findSlot = (children, slot) => {
27
- for (const child of react_1.default.Children.toArray(children)) {
28
- if (!isReactElement(child))
29
- continue;
30
- if (child.type === slot)
31
- return child;
32
- if (child.type === react_1.default.Fragment) {
33
- const nested = findSlot(child.props.children, slot);
34
- if (nested)
35
- return nested;
36
- }
37
- }
38
- return undefined;
39
- };
22
+ const SLOTS = [exports.ProfileCardHeader, exports.ProfileCardBody, exports.ProfileCardFooter];
23
+ const DROPPED_ADVICE = "Render it outside the card.";
24
+ /** Card built from ProfileCardHeader, Body and Footer slots; other children are dropped. */
40
25
  function ProfileCard({ maxW, align, variant, direction, justify, children, size, color, overflow, dividercolor, dividersize = "1px", dividervariant = "solid", CardStyle, CardHeaderStyle, CardBodyStyle, borderTopColor, borderLeftColor, }) {
41
26
  var _a;
42
27
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
43
28
  const resolvedDividerColor = dividercolor !== null && dividercolor !== void 0 ? dividercolor : colors.boxborder[200];
44
29
  const accentBorder = `2px solid ${colors.primary[500]}`;
45
- const header = findSlot(children, exports.ProfileCardHeader);
46
- const body = findSlot(children, exports.ProfileCardBody);
47
- const footer = findSlot(children, exports.ProfileCardFooter);
30
+ const header = (0, findSlot_1.findSlot)(children, exports.ProfileCardHeader);
31
+ const body = (0, findSlot_1.findSlot)(children, exports.ProfileCardBody);
32
+ const footer = (0, findSlot_1.findSlot)(children, exports.ProfileCardFooter);
33
+ (0, warnDroppedSlotChildren_1.warnDroppedSlotChildren)("ProfileCard", children, SLOTS, DROPPED_ADVICE);
48
34
  const StylesWithBorder = borderLeftColor
49
35
  ? { ...CardStyle, borderLeft: accentBorder }
50
36
  : borderTopColor
51
37
  ? { ...CardStyle, borderTop: accentBorder }
52
38
  : { ...CardStyle };
53
- return ((0, jsx_runtime_1.jsxs)(react_2.Card, { maxW: maxW, align: align, variant: variant === "outlein" ? "outline" : variant, direction: direction, justify: justify, size: size, overflow: overflow, colorScheme: color, style: StylesWithBorder, children: [header && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_2.CardHeader, { sx: CardHeaderStyle, ...header.props, children: header }), (0, jsx_runtime_1.jsx)(react_2.Divider, { opacity: 1, style: {
39
+ return ((0, jsx_runtime_1.jsxs)(react_1.Card, { maxW: maxW, align: align, variant: variant === "outlein" ? "outline" : variant, direction: direction, justify: justify, size: size, overflow: overflow, colorScheme: color, style: StylesWithBorder, children: [header && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_1.CardHeader, { sx: CardHeaderStyle, ...header.props, children: header }), (0, jsx_runtime_1.jsx)(react_1.Divider, { opacity: 1, style: {
54
40
  borderColor: resolvedDividerColor,
55
41
  borderWidth: 0,
56
42
  borderBottomWidth: dividersize,
57
43
  borderStyle: dividervariant,
58
- } })] })), (0, jsx_runtime_1.jsx)(react_2.CardBody, { sx: CardBodyStyle, ...((_a = body === null || body === void 0 ? void 0 : body.props) !== null && _a !== void 0 ? _a : {}), children: body }), footer && (0, jsx_runtime_1.jsx)(react_2.CardFooter, { ...footer.props, children: footer })] }));
44
+ } })] })), (0, jsx_runtime_1.jsx)(react_1.CardBody, { sx: CardBodyStyle, ...((_a = body === null || body === void 0 ? void 0 : body.props) !== null && _a !== void 0 ? _a : {}), children: body }), footer && (0, jsx_runtime_1.jsx)(react_1.CardFooter, { ...footer.props, children: footer })] }));
59
45
  }
@@ -9,6 +9,7 @@ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
9
9
  const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
10
10
  const motion_1 = require("../../Theme/tokens/primitives/motion");
11
11
  const accentText_1 = require("../../Theme/tokens/builders/accentText");
12
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
12
13
  const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
13
14
  const color_1 = require("../../Theme/tokens/builders/color");
14
15
  const RING_TRANSITION = (0, motion_1.transitionFor)(["box-shadow"], "base");
@@ -49,6 +50,7 @@ function ProfilePhotoViewer({ photoUrl, onPhotoChange, imageWidth = "100px", ima
49
50
  (_a = fileInputRef.current) === null || _a === void 0 ? void 0 : _a.click();
50
51
  };
51
52
  const isPdf = photo === null || photo === void 0 ? void 0 : photo.endsWith(".pdf");
53
+ const viewHoverBg = (0, planeStep_1.bandOn)(c.gray[50], c.background[50]);
52
54
  // NOTE: [800] not [300] — the edit IconButton's border is a control boundary, WCAG 1.4.11 needs >=3:1.
53
55
  const border = c.boxborder[500];
54
56
  const hoverScrim = (opacity) => {
@@ -85,8 +87,8 @@ function ProfilePhotoViewer({ photoUrl, onPhotoChange, imageWidth = "100px", ima
85
87
  bg: editFill.activeFill,
86
88
  color: editFill.activeColor,
87
89
  } }) })), isView && ((0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: "View", "aria-label": "View", hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Eye, { size: 14 }), isRound: isRound, size: editIconSize, onClick: handleIsView, "aria-label": "View photo", bg: c.background[50], color: c.text[700], border: `${borderWidths_1.BORDER_WIDTHS.hairline} solid ${border}`, boxShadow: (_d = theme.shadows) === null || _d === void 0 ? void 0 : _d.md, style: style, transition: ACTION_TRANSITION, _hover: {
88
- bg: c.gray[50],
89
- color: (0, accentText_1.accentTextOnCanvas)(c.primary, c.gray[50]),
90
+ bg: viewHoverBg,
91
+ color: (0, accentText_1.accentTextOnCanvas)(c.primary, viewHoverBg),
90
92
  transform: "scale(1.1)",
91
93
  boxShadow: (_e = theme.shadows) === null || _e === void 0 ? void 0 : _e.lg,
92
94
  }, _active: { bg: c.gray[100] } }) }))] }), isEditable && ((0, jsx_runtime_1.jsx)(react_2.Input, { type: "file", accept: "image/*", onChange: handlePhotoChange, hidden: true, ref: fileInputRef }))] }))] }));
@@ -5,13 +5,14 @@ const jsx_runtime_1 = require("react/jsx-runtime");
5
5
  const react_1 = require("@chakra-ui/react");
6
6
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
7
7
  const outlineRung_1 = require("../../Theme/tokens/builders/outlineRung");
8
+ const paletteScale_1 = require("../../Theme/tokens/builders/paletteScale");
8
9
  // whiteAlpha/blackAlpha keep Chakra's own fill; contrast math can't resolve alpha scales.
9
10
  const NAMED_SCALES = new Set([
10
11
  "gray", "red", "orange", "yellow", "green", "teal", "blue", "cyan", "purple", "pink",
11
12
  "primary", "secondary",
12
13
  ]);
13
14
  const scaleFor = (colors, scheme) => NAMED_SCALES.has(scheme)
14
- ? colors[scheme]
15
+ ? (0, paletteScale_1.scaleNamed)(colors, scheme)
15
16
  : undefined;
16
17
  /** Percentage/quantity fill bar (isAnimated needs hasStripe=true or it's a no-op) — for a named pipeline tracker use StageProgress instead. */
17
18
  function ProgressBar({ colorScheme, color, variant, isIndeterminate, ...rest }) {
@@ -8,8 +8,10 @@ const useCustomTheme_1 = require("../../Theme/useCustomTheme");
8
8
  const typography_1 = require("../../Theme/tokens/primitives/typography");
9
9
  const controlSizes_1 = require("../../Theme/tokens/primitives/controlSizes");
10
10
  const motion_1 = require("../../Theme/tokens/primitives/motion");
11
+ const borderWidths_1 = require("../../Theme/tokens/primitives/borderWidths");
11
12
  const motion_2 = require("../../Theme/chakra/motion");
12
13
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
14
+ const tonalHover_1 = require("../CheckoutKit/tonalHover");
13
15
  const MIN_HIT = "2.75rem";
14
16
  const LIMIT_OPACITY = 0.4;
15
17
  const clamp = (n, min, max) => Math.max(min, max === undefined ? n : Math.min(max, n));
@@ -32,8 +34,9 @@ const QuantityStepper = ({ value, defaultValue, onValueChange, min = 1, max, ste
32
34
  onValueChange === null || onValueChange === void 0 ? void 0 : onValueChange(next);
33
35
  };
34
36
  const surface = variant === "outline"
35
- ? { bg: "transparent", boxShadow: `inset 0 0 0 1px ${colors.boxborder[500]}` }
37
+ ? { bg: "transparent", boxShadow: `inset 0 0 0 ${borderWidths_1.BORDER_WIDTHS.hairline} ${colors.boxborder[500]}` }
36
38
  : { bg: colors.background[100], boxShadow: "none" };
39
+ const hoverFill = (0, tonalHover_1.tonalHover)(colors, variant === "outline" ? colors.background[50] : colors.background[100]);
37
40
  const button = (kind) => {
38
41
  const limited = kind === "dec" ? atMin && !trash : atMax;
39
42
  const Icon = kind === "inc" ? lucide_react_1.Plus : trash ? lucide_react_1.Trash2 : lucide_react_1.Minus;
@@ -45,7 +48,7 @@ const QuantityStepper = ({ value, defaultValue, onValueChange, min = 1, max, ste
45
48
  onRemove === null || onRemove === void 0 ? void 0 : onRemove();
46
49
  else
47
50
  change(kind === "inc" ? 1 : -1);
48
- }, position: "relative", display: "inline-flex", alignItems: "center", justifyContent: "center", flexShrink: 0, boxSize: spec.height, borderRadius: "full", color: colors.header[900], opacity: limited || disabled ? LIMIT_OPACITY : 1, cursor: limited || disabled ? "not-allowed" : "pointer", transition: (0, motion_1.transitionFor)(["background-color", "transform", "opacity"]), _hover: limited || disabled ? undefined : { bg: colors.background[200] }, _active: limited || disabled ? undefined : { transform: "scale(0.96)" }, sx: {
51
+ }, position: "relative", display: "inline-flex", alignItems: "center", justifyContent: "center", flexShrink: 0, boxSize: spec.height, borderRadius: "full", color: colors.header[900], opacity: limited || disabled ? LIMIT_OPACITY : 1, cursor: limited || disabled ? "not-allowed" : "pointer", transition: (0, motion_1.transitionFor)(["background-color", "transform", "opacity"]), _hover: limited || disabled ? undefined : { bg: hoverFill }, _active: limited || disabled ? undefined : { transform: "scale(0.96)" }, sx: {
49
52
  ...(0, focusRing_styles_1.focusVisibleStyles)(colors),
50
53
  ...(0, motion_2.reducedMotionSx)({ "&:active": { transform: "none" } }),
51
54
  "&::before": {
@@ -1,4 +1,4 @@
1
1
  import type { QueryStateBoundaryProps } from "./QueryStateProps";
2
2
  /** Renders one of loading / forbidden / error / empty / children for a content region; agnostic of the fetching library. */
3
- declare const QueryStateBoundary: ({ isLoading, isForbidden, forbidden, hasData, error, isEmpty, loadingFallback, emptyFallback, empty, errorTitle, errorDescription, onRetry, isRetrying, minH, children, }: QueryStateBoundaryProps) => import("react/jsx-runtime").JSX.Element;
3
+ declare const QueryStateBoundary: ({ isLoading, isForbidden, forbidden, hasData, error, isEmpty, isFiltered, filteredEmpty, loadingFallback, emptyFallback, empty, errorTitle, errorDescription, onRetry, isRetrying, minH, children, }: QueryStateBoundaryProps) => import("react/jsx-runtime").JSX.Element;
4
4
  export default QueryStateBoundary;
@@ -7,12 +7,13 @@ const jsx_runtime_1 = require("react/jsx-runtime");
7
7
  const react_1 = require("@chakra-ui/react");
8
8
  const lucide_react_1 = require("lucide-react");
9
9
  const EmptyState_1 = __importDefault(require("../EmptyState/EmptyState"));
10
+ const FilteredEmptyState_1 = __importDefault(require("../EmptyState/FilteredEmptyState"));
10
11
  const Skeletons_1 = __importDefault(require("../Skeletons/Skeletons"));
11
12
  const ErrorState_1 = __importDefault(require("./ErrorState"));
12
13
  const DefaultLoading = () => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { role: "status", direction: "column", gap: 4, w: "100%", py: 2, children: [(0, jsx_runtime_1.jsx)(react_1.VisuallyHidden, { children: "Loading" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: 4, width: "40%" }), Array.from({ length: 4 }, (_, i) => ((0, jsx_runtime_1.jsxs)(react_1.Flex, { direction: "column", gap: 2, children: [(0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: 2.5, width: "100%" }), (0, jsx_runtime_1.jsx)(Skeletons_1.default, { type: "skeleton", height: 2.5, width: "70%" })] }, i)))] }));
13
14
  const hasError = (error) => error !== undefined && error !== null && error !== false;
14
15
  /** Renders one of loading / forbidden / error / empty / children for a content region; agnostic of the fetching library. */
15
- const QueryStateBoundary = ({ isLoading = false, isForbidden = false, forbidden, hasData = false, error, isEmpty = false, loadingFallback, emptyFallback, empty, errorTitle, errorDescription, onRetry, isRetrying, minH = "24rem", children, }) => {
16
+ const QueryStateBoundary = ({ isLoading = false, isForbidden = false, forbidden, hasData = false, error, isEmpty = false, isFiltered = false, filteredEmpty, loadingFallback, emptyFallback, empty, errorTitle, errorDescription, onRetry, isRetrying, minH = "24rem", children, }) => {
16
17
  var _a, _b, _c;
17
18
  if (isLoading && !hasData)
18
19
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: loadingFallback !== null && loadingFallback !== void 0 ? loadingFallback : (0, jsx_runtime_1.jsx)(DefaultLoading, {}) });
@@ -24,6 +25,9 @@ const QueryStateBoundary = ({ isLoading = false, isForbidden = false, forbidden,
24
25
  const description = typeof errorDescription === "function" ? errorDescription(error) : errorDescription;
25
26
  return ((0, jsx_runtime_1.jsx)(ErrorState_1.default, { title: errorTitle, description: description, onRetry: onRetry, isRetrying: isRetrying, minH: minH }));
26
27
  }
28
+ if (isEmpty && isFiltered) {
29
+ return ((0, jsx_runtime_1.jsx)(FilteredEmptyState_1.default, { minH: (filteredEmpty === null || filteredEmpty === void 0 ? void 0 : filteredEmpty.scale) === "card" ? undefined : minH, ...filteredEmpty }));
30
+ }
27
31
  if (isEmpty)
28
32
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: emptyFallback !== null && emptyFallback !== void 0 ? emptyFallback : (0, jsx_runtime_1.jsx)(EmptyState_1.default, { minH: minH, ...empty }) });
29
33
  return (0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: typeof children === "function" ? children() : children });
@@ -1,5 +1,5 @@
1
1
  import type { ElementType, ReactNode } from "react";
2
- import type { EmptyStateProps } from "../EmptyState/EmptyStateProps";
2
+ import type { EmptyStateProps, FilteredEmptyStateProps } from "../EmptyState/EmptyStateProps";
3
3
  /** Failed-load panel (`role="alert"`); `onRetry` adds an outline Retry button, `action` adds more. */
4
4
  export interface ErrorStateProps {
5
5
  /** Defaults to "Couldn't load this". */
@@ -45,6 +45,10 @@ export interface QueryStateBoundaryProps {
45
45
  error?: unknown;
46
46
  /** Checked only after loading and error are ruled out. */
47
47
  isEmpty?: boolean;
48
+ /** With `isEmpty`, shows FilteredEmptyState instead of `empty`/`emptyFallback`: the list is empty because of the filters, not first-run. */
49
+ isFiltered?: boolean;
50
+ /** Props for the FilteredEmptyState shown when `isEmpty` and `isFiltered`; `scale="card"` drops the boundary's `minH`. */
51
+ filteredEmpty?: FilteredEmptyStateProps;
48
52
  /** Replaces the default skeleton rows. */
49
53
  loadingFallback?: ReactNode;
50
54
  /** Replaces the default EmptyState entirely; `empty` is then ignored. */
@@ -59,7 +63,7 @@ export interface QueryStateBoundaryProps {
59
63
  onRetry?: () => void;
60
64
  /** Shows the Retry button spinner; no effect without `onRetry`. */
61
65
  isRetrying?: boolean;
62
- /** Min height of the error and default empty states, not loading; defaults to "24rem". */
66
+ /** Min height of the error and empty states, not loading; defaults to "24rem". */
63
67
  minH?: EmptyStateProps["minH"];
64
68
  children: ReactNode | (() => ReactNode);
65
69
  }
@@ -14,12 +14,11 @@ const useFieldIds_1 = require("../Common/useFieldIds");
14
14
  const fieldStyles_1 = require("../Common/fieldStyles");
15
15
  const filledSurface_1 = require("../../Theme/tokens/builders/filledSurface");
16
16
  const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
17
+ const paletteFromTheme_1 = require("../../Theme/chakra/paletteFromTheme");
17
18
  /** One themed radio; `ref` is its native `<input type="radio">`. */
18
19
  const RadioButton = (0, react_1.forwardRef)(function RadioButton({ label, description, content, colorScheme, isChecked, onChange, isDisabled, size, value, defaultChecked, labelFontSize = "0.875rem", labelClampLines = 2, showLabelTooltip = (label || "").length > 18, labelTooltip = label, ...rest }, ref) {
19
20
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
20
- // colorScheme is any Chakra scheme name; only some resolve to a real scale.
21
- const scales = colors;
22
- const palette = (colorScheme && scales[colorScheme]) || colors.primary;
21
+ const palette = colorScheme ? (0, paletteFromTheme_1.scaleFor)(colors, colorScheme, colors.primary) : colors.primary;
23
22
  const filled = (0, filledSurface_1.resolveFilledSurface)(palette, colors);
24
23
  return ((0, jsx_runtime_1.jsx)(react_2.Radio, { ...rest, ref: ref, colorScheme: colorScheme, isChecked: isChecked, onChange: onChange, isDisabled: isDisabled, size: size, value: value, defaultChecked: defaultChecked, borderColor: (0, fieldStyles_1.fieldHoverBorder)(colors), borderWidth: "1px", _hover: {
25
24
  borderColor: filled.fill,
@@ -9,10 +9,13 @@ const react_2 = require("@chakra-ui/react");
9
9
  const lucide_react_1 = require("lucide-react");
10
10
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
11
11
  const rowStates_1 = require("../../Theme/tokens/builders/rowStates");
12
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
12
13
  const Button_1 = __importDefault(require("../Button/Button"));
13
14
  const TextInput_1 = __importDefault(require("../Input/TextInput"));
14
15
  const EmptyState_1 = __importDefault(require("../EmptyState/EmptyState"));
15
16
  const DeleteRoleModal_1 = __importDefault(require("./DeleteRoleModal"));
17
+ const motion_1 = require("../../Theme/tokens/primitives/motion");
18
+ const BACKGROUND_TRANSITION = (0, motion_1.transitionFor)(["background"]);
16
19
  const DEFAULT_LABELS = {
17
20
  title: "Roles & Permissions",
18
21
  totalRoles: "Total Roles",
@@ -66,7 +69,8 @@ const RolesPermission = ({ view, mode = "create", roles, isRolesLoading = false,
66
69
  const muted = colors.textMuted;
67
70
  const heading = colors.text[900];
68
71
  const rowBackgrounds = (0, rowStates_1.listRowBackgrounds)(colors);
69
- const headBg = colors.background[100];
72
+ const headBg = (0, planeStep_1.bandOn)(colors.background[100], surface);
73
+ const innerRule = (0, planeStep_1.cardRule)(colors);
70
74
  const rowHover = rowBackgrounds.active;
71
75
  const isViewMode = mode === "view";
72
76
  const columnLabels = {
@@ -90,33 +94,33 @@ const RolesPermission = ({ view, mode = "create", roles, isRolesLoading = false,
90
94
  px: 4,
91
95
  py: 3,
92
96
  borderBottom: "1px solid",
93
- borderColor: border,
97
+ borderColor: innerRule,
94
98
  };
95
99
  const thStyle = {
96
100
  fontSize: "0.7rem",
97
101
  textTransform: "uppercase",
98
102
  letterSpacing: "0.04em",
99
103
  color: muted,
100
- borderColor: border,
104
+ borderColor: innerRule,
101
105
  py: 3,
102
106
  };
103
107
  const renderGrantedCheck = () => checkIcon !== null && checkIcon !== void 0 ? checkIcon : ((0, jsx_runtime_1.jsx)(react_2.Box, { color: colors.semanticText.success, display: "inline-flex", children: (0, jsx_runtime_1.jsx)(lucide_react_1.Check, { size: 18, strokeWidth: 3 }) }));
104
108
  const renderListView = () => ((0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 4, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { ...cardSx, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { ...cardHeaderSx, alignItems: "center", justifyContent: "space-between", children: [(0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 2, children: [onBack && ((0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Go back", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { size: 16 }), variant: "ghost", size: "xs", color: muted, onClick: onBack })), (0, jsx_runtime_1.jsx)(react_2.Heading, { size: "sm", fontWeight: 600, color: heading, children: labels.title }), !isRolesLoading && ((0, jsx_runtime_1.jsxs)(react_2.Badge, { colorScheme: "blue", variant: "subtle", borderRadius: "full", px: 2, py: 0.5, fontSize: "0.65rem", textTransform: "none", children: [labels.totalRoles, ": ", roles.length] }))] }), (0, jsx_runtime_1.jsx)(Button_1.default, { label: labels.newRole, onClick: onNewRole, size: "sm", sx: { fontSize: "xs" }, colorScheme: "primary", leftIcon: (0, jsx_runtime_1.jsx)(lucide_react_1.Plus, { size: 15 }) })] }), (0, jsx_runtime_1.jsx)(react_2.Box, { overflowX: "auto", children: isRolesLoading ? ((0, jsx_runtime_1.jsx)(react_2.VStack, { spacing: 3, p: 4, align: "stretch", children: Array.from({ length: 6 }).map((_, idx) => ((0, jsx_runtime_1.jsx)(react_2.Skeleton, { height: "18px", borderRadius: "md" }, idx))) })) : roles.length === 0 ? ((0, jsx_runtime_1.jsx)(EmptyState_1.default, { icon: lucide_react_1.ShieldCheck, title: labels.noRoles, size: "sm", minH: "200px" })) : ((0, jsx_runtime_1.jsxs)(react_2.Table, { variant: "simple", size: "sm", children: [(0, jsx_runtime_1.jsx)(react_2.Thead, { bg: headBg, children: (0, jsx_runtime_1.jsxs)(react_2.Tr, { children: [(0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, width: "56px", children: labels.sNo }), (0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, children: labels.roleNameColumn }), (0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, children: labels.createdBy }), (0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, children: labels.createdTime }), (0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, textAlign: "right", children: labels.actions })] }) }), (0, jsx_runtime_1.jsx)(react_2.Tbody, { children: roles.map((role, index) => {
105
109
  var _a;
106
- return ((0, jsx_runtime_1.jsxs)(react_2.Tr, { _hover: { bg: rowHover }, transition: "background 0.15s ease", children: [(0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, color: muted, fontSize: "sm", children: index + 1 }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, maxW: "160px", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", fontSize: "sm", fontWeight: 600, color: heading, children: role.roleName }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, fontSize: "sm", color: muted, children: role.createdBy }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, fontSize: "sm", color: muted, children: role.created_at }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, children: (0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 1, justifyContent: "flex-end", children: [(0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.view, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.SquareArrowOutUpRight, { size: 15 }), "aria-label": labels.view, variant: "ghost", size: "xs", color: muted, onClick: () => onViewRole === null || onViewRole === void 0 ? void 0 : onViewRole(role) }) }), (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.edit, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { size: 15 }), "aria-label": labels.edit, variant: "ghost", size: "xs", color: muted, onClick: () => onEditRole === null || onEditRole === void 0 ? void 0 : onEditRole(role) }) }), (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.delete, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15 }), "aria-label": labels.delete, variant: "ghost", size: "xs", colorScheme: "red", color: colors.semanticText.error, onClick: () => setDeleteId(Number(role.roles_id)) }) })] }) })] }, (_a = role.roles_id) !== null && _a !== void 0 ? _a : role.roleName));
110
+ return ((0, jsx_runtime_1.jsxs)(react_2.Tr, { _hover: { bg: rowHover }, transition: BACKGROUND_TRANSITION, children: [(0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, color: muted, fontSize: "sm", children: index + 1 }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, maxW: "160px", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", fontSize: "sm", fontWeight: 600, color: heading, children: role.roleName }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, fontSize: "sm", color: muted, children: role.createdBy }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, fontSize: "sm", color: muted, children: role.created_at }), (0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, children: (0, jsx_runtime_1.jsxs)(react_2.HStack, { spacing: 1, justifyContent: "flex-end", children: [(0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.view, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.SquareArrowOutUpRight, { size: 15 }), "aria-label": labels.view, variant: "ghost", size: "xs", color: muted, onClick: () => onViewRole === null || onViewRole === void 0 ? void 0 : onViewRole(role) }) }), (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.edit, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Pencil, { size: 15 }), "aria-label": labels.edit, variant: "ghost", size: "xs", color: muted, onClick: () => onEditRole === null || onEditRole === void 0 ? void 0 : onEditRole(role) }) }), (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: labels.delete, hasArrow: true, children: (0, jsx_runtime_1.jsx)(react_2.IconButton, { icon: (0, jsx_runtime_1.jsx)(lucide_react_1.Trash2, { size: 15 }), "aria-label": labels.delete, variant: "ghost", size: "xs", colorScheme: "red", color: colors.semanticText.error, onClick: () => setDeleteId(Number(role.roles_id)) }) })] }) })] }, (_a = role.roles_id) !== null && _a !== void 0 ? _a : role.roleName));
107
111
  }) })] })) })] }), footerSlot] }));
108
- const renderFormView = () => ((0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 4, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { ...cardSx, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { ...cardHeaderSx, alignItems: "center", gap: 2, children: [onCancelForm && ((0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Go back", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { size: 16 }), variant: "ghost", size: "xs", color: muted, onClick: onCancelForm })), (0, jsx_runtime_1.jsx)(react_2.Heading, { size: "sm", fontWeight: 600, color: heading, children: labels.roleInformation })] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { p: 4, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { maxW: "320px", children: (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: isViewMode ? labels.readOnly : "", isDisabled: !isViewMode, children: (0, jsx_runtime_1.jsx)(react_2.Box, { children: (0, jsx_runtime_1.jsx)(TextInput_1.default, { label: labels.roleName, value: roleName, placeholder: labels.roleNamePlaceholder, error: !!roleNameError, errorMessage: roleNameError, onChange: (e) => onRoleNameChange === null || onRoleNameChange === void 0 ? void 0 : onRoleNameChange(e.target.value), isRequired: true, width: "100%", isDisabled: isViewMode }) }) }) }), (0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 3, mt: 4, children: [(0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isSuperAdmin, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleSuperAdmin === null || onToggleSuperAdmin === void 0 ? void 0 : onToggleSuperAdmin(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.enableAllPermissions }) }), (0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isTrackLocation, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleTrackLocation === null || onToggleTrackLocation === void 0 ? void 0 : onToggleTrackLocation(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.trackLocation }) }), (0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isShowRecords, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleShowRecords === null || onToggleShowRecords === void 0 ? void 0 : onToggleShowRecords(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.showAllUserRecords }) })] })] })] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { ...cardSx, children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { ...cardHeaderSx, alignItems: "center", children: (0, jsx_runtime_1.jsx)(react_2.Heading, { size: "sm", fontWeight: 600, color: heading, children: labels.permissionSettings }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { overflowX: "auto", children: (0, jsx_runtime_1.jsxs)(react_2.Table, { variant: "simple", size: "sm", children: [(0, jsx_runtime_1.jsx)(react_2.Thead, { bg: headBg, children: (0, jsx_runtime_1.jsxs)(react_2.Tr, { children: [(0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, children: labels.moduleName }), permissionKeys.map((key) => ((0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, textAlign: "center", children: columnLabels[key] }, key)))] }) }), (0, jsx_runtime_1.jsx)(react_2.Tbody, { children: permissions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Tr, { children: (0, jsx_runtime_1.jsx)(react_2.Td, { colSpan: permissionKeys.length + 1, textAlign: "center", borderColor: border, children: (0, jsx_runtime_1.jsx)(react_2.Text, { color: muted, fontSize: "sm", py: 4, children: labels.noPermissions }) }) })) : (permissions.map((perm) => {
112
+ const renderFormView = () => ((0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 4, children: [(0, jsx_runtime_1.jsxs)(react_2.Box, { ...cardSx, children: [(0, jsx_runtime_1.jsxs)(react_2.Flex, { ...cardHeaderSx, alignItems: "center", gap: 2, children: [onCancelForm && ((0, jsx_runtime_1.jsx)(react_2.IconButton, { "aria-label": "Go back", icon: (0, jsx_runtime_1.jsx)(lucide_react_1.ArrowLeft, { size: 16 }), variant: "ghost", size: "xs", color: muted, onClick: onCancelForm })), (0, jsx_runtime_1.jsx)(react_2.Heading, { size: "sm", fontWeight: 600, color: heading, children: labels.roleInformation })] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { p: 4, children: [(0, jsx_runtime_1.jsx)(react_2.Box, { maxW: "320px", children: (0, jsx_runtime_1.jsx)(react_2.Tooltip, { label: isViewMode ? labels.readOnly : "", isDisabled: !isViewMode, children: (0, jsx_runtime_1.jsx)(react_2.Box, { children: (0, jsx_runtime_1.jsx)(TextInput_1.default, { label: labels.roleName, value: roleName, placeholder: labels.roleNamePlaceholder, error: !!roleNameError, errorMessage: roleNameError, onChange: (e) => onRoleNameChange === null || onRoleNameChange === void 0 ? void 0 : onRoleNameChange(e.target.value), isRequired: true, width: "100%", isDisabled: isViewMode }) }) }) }), (0, jsx_runtime_1.jsxs)(react_2.VStack, { align: "stretch", spacing: 3, mt: 4, children: [(0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isSuperAdmin, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleSuperAdmin === null || onToggleSuperAdmin === void 0 ? void 0 : onToggleSuperAdmin(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.enableAllPermissions }) }), (0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isTrackLocation, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleTrackLocation === null || onToggleTrackLocation === void 0 ? void 0 : onToggleTrackLocation(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.trackLocation }) }), (0, jsx_runtime_1.jsx)(react_2.Checkbox, { isChecked: isShowRecords, isDisabled: isViewMode, size: "sm", onChange: (e) => onToggleShowRecords === null || onToggleShowRecords === void 0 ? void 0 : onToggleShowRecords(e.target.checked), children: (0, jsx_runtime_1.jsx)(react_2.Text, { fontSize: "sm", color: heading, children: labels.showAllUserRecords }) })] })] })] }), (0, jsx_runtime_1.jsxs)(react_2.Box, { ...cardSx, children: [(0, jsx_runtime_1.jsx)(react_2.Flex, { ...cardHeaderSx, alignItems: "center", children: (0, jsx_runtime_1.jsx)(react_2.Heading, { size: "sm", fontWeight: 600, color: heading, children: labels.permissionSettings }) }), (0, jsx_runtime_1.jsx)(react_2.Box, { overflowX: "auto", children: (0, jsx_runtime_1.jsxs)(react_2.Table, { variant: "simple", size: "sm", children: [(0, jsx_runtime_1.jsx)(react_2.Thead, { bg: headBg, children: (0, jsx_runtime_1.jsxs)(react_2.Tr, { children: [(0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, children: labels.moduleName }), permissionKeys.map((key) => ((0, jsx_runtime_1.jsx)(react_2.Th, { ...thStyle, textAlign: "center", children: columnLabels[key] }, key)))] }) }), (0, jsx_runtime_1.jsx)(react_2.Tbody, { children: permissions.length === 0 ? ((0, jsx_runtime_1.jsx)(react_2.Tr, { children: (0, jsx_runtime_1.jsx)(react_2.Td, { colSpan: permissionKeys.length + 1, textAlign: "center", borderColor: innerRule, children: (0, jsx_runtime_1.jsx)(react_2.Text, { color: muted, fontSize: "sm", py: 4, children: labels.noPermissions }) }) })) : (permissions.map((perm) => {
109
113
  var _a;
110
114
  const isAutomationModule = ((_a = perm.module) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === "automation";
111
- return ((0, jsx_runtime_1.jsxs)(react_2.Tr, { _hover: { bg: rowHover }, transition: "background 0.15s ease", children: [(0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: border, color: heading, fontSize: "sm", fontWeight: 500, maxW: "160px", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", children: perm.module }), permissionKeys.map((key) => {
115
+ return ((0, jsx_runtime_1.jsxs)(react_2.Tr, { _hover: { bg: rowHover }, transition: BACKGROUND_TRANSITION, children: [(0, jsx_runtime_1.jsx)(react_2.Td, { borderColor: innerRule, color: heading, fontSize: "sm", fontWeight: 500, maxW: "160px", whiteSpace: "nowrap", overflow: "hidden", textOverflow: "ellipsis", children: perm.module }), permissionKeys.map((key) => {
112
116
  const isRead = key === "read";
113
- return ((0, jsx_runtime_1.jsx)(react_2.Td, { textAlign: "center", borderColor: border, children: (0, jsx_runtime_1.jsx)(react_2.Flex, { justify: "center", children: isViewMode ? (isAutomationModule ? (isRead &&
117
+ return ((0, jsx_runtime_1.jsx)(react_2.Td, { textAlign: "center", borderColor: innerRule, children: (0, jsx_runtime_1.jsx)(react_2.Flex, { justify: "center", children: isViewMode ? (isAutomationModule ? (isRead &&
114
118
  perm.automation &&
115
119
  renderGrantedCheck()) : (perm[key] && renderGrantedCheck())) : isAutomationModule && !isRead ? null : ((0, jsx_runtime_1.jsx)(react_2.Checkbox, { size: "sm", "aria-label": `${perm.module}: ${columnLabels[key]}`, isChecked: isAutomationModule
116
120
  ? perm.automation
117
121
  : perm[key], isDisabled: isAutomationModule && !isRead, onChange: () => onPermissionChange === null || onPermissionChange === void 0 ? void 0 : onPermissionChange(perm.module, isAutomationModule ? "automation" : key) })) }) }, key));
118
122
  })] }, perm.module));
119
- })) })] }) }), !isViewMode && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_2.Divider, { borderColor: border }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { justifyContent: "flex-end", gap: 3, p: 4, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { onClick: onCancelForm, size: "sm", sx: { fontSize: "xs" }, label: labels.cancel, colorScheme: "red", variant: "outline" }), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: onSave, size: "sm", sx: { fontSize: "xs" }, colorScheme: "primary", isLoading: isSaving, label: isEditing ? labels.updateChanges : labels.saveChanges })] })] }))] })] }));
123
+ })) })] }) }), !isViewMode && ((0, jsx_runtime_1.jsxs)(jsx_runtime_1.Fragment, { children: [(0, jsx_runtime_1.jsx)(react_2.Divider, { borderColor: innerRule }), (0, jsx_runtime_1.jsxs)(react_2.Flex, { justifyContent: "flex-end", gap: 3, p: 4, children: [(0, jsx_runtime_1.jsx)(Button_1.default, { onClick: onCancelForm, size: "sm", sx: { fontSize: "xs" }, label: labels.cancel, colorScheme: "red", variant: "outline" }), (0, jsx_runtime_1.jsx)(Button_1.default, { onClick: onSave, size: "sm", sx: { fontSize: "xs" }, colorScheme: "primary", isLoading: isSaving, label: isEditing ? labels.updateChanges : labels.saveChanges })] })] }))] })] }));
120
124
  return ((0, jsx_runtime_1.jsxs)(react_2.Box, { p: padding, backgroundColor: colors.backgroundColor.main, minHeight: "100%", children: [view === "list" ? renderListView() : renderFormView(), (0, jsx_runtime_1.jsx)(DeleteRoleModal_1.default, { isOpen: deleteId !== null, onClose: () => setDeleteId(null), onConfirm: () => {
121
125
  if (deleteId !== null)
122
126
  onDeleteRole === null || onDeleteRole === void 0 ? void 0 : onDeleteRole(deleteId);
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ /** Wraps content and shows a back-to-top button once the parent scrolls. */
2
3
  export interface ScrollToTopProps {
3
4
  /** Content to wrap. Watches this element's direct parentElement only — not a scroll-search up the tree. */
4
5
  children: React.ReactNode;
@@ -1,5 +1,6 @@
1
1
  import React, { ReactNode } from "react";
2
2
  import { ScrollbarVariant } from "../../Theme/tokens/builders/scrollbar";
3
+ /** Scrollable box with themed scrollbars and a keyboard focus stop when it overflows. */
3
4
  export interface ScrollbarBoxProps {
4
5
  children: ReactNode;
5
6
  /** Fixed box height; omit to let content size the box instead of scrolling it. */
@@ -14,7 +15,9 @@ export interface ScrollbarBoxProps {
14
15
  variant?: ScrollbarVariant;
15
16
  /** Forwarded to the underlying Box so a consumer can read/scroll the container from outside. */
16
17
  scrollContainerRef?: React.Ref<HTMLDivElement> | null;
18
+ /** Names the box as a region while it scrolls and takes keyboard focus; without it that focus stop has no name. */
19
+ "aria-label"?: string;
17
20
  }
18
- /** Scrollable Box with themed scrollbar chrome (scrollbarStyles) applied via variant. */
21
+ /** Scrollable Box with themed scrollbar chrome; a keyboard stop, ringed on :focus-visible, while it scrolls with nothing focusable inside. */
19
22
  declare const ScrollbarBox: React.FC<ScrollbarBoxProps>;
20
23
  export default ScrollbarBox;
@@ -1,12 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const jsx_runtime_1 = require("react/jsx-runtime");
4
- const react_1 = require("@chakra-ui/react");
4
+ const react_1 = require("react");
5
+ const react_2 = require("@chakra-ui/react");
5
6
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
7
+ const focusRing_styles_1 = require("../../Theme/chakra/focusRing.styles");
6
8
  const scrollbar_1 = require("../../Theme/tokens/builders/scrollbar");
7
- /** Scrollable Box with themed scrollbar chrome (scrollbarStyles) applied via variant. */
8
- const ScrollbarBox = ({ children, height, maxHeight, overflowX, overflowY = "auto", variant = "default", scrollContainerRef, }) => {
9
+ const useScrollableRegion_1 = require("../../Hooks/useScrollableRegion");
10
+ const mergeRefs_1 = require("../../Utils/mergeRefs");
11
+ /** Scrollable Box with themed scrollbar chrome; a keyboard stop, ringed on :focus-visible, while it scrolls with nothing focusable inside. */
12
+ const ScrollbarBox = ({ children, height, maxHeight, overflowX, overflowY = "auto", variant = "default", scrollContainerRef, "aria-label": ariaLabel, }) => {
9
13
  const { colors } = (0, useCustomTheme_1.useCustomTheme)();
10
- return ((0, jsx_runtime_1.jsx)(react_1.Box, { ref: scrollContainerRef, height: height, maxHeight: maxHeight, position: "relative", sx: { overflowX, overflowY, ...(0, scrollbar_1.scrollbarStyles)(colors, variant) }, children: children }));
14
+ const { ref, props: regionProps } = (0, useScrollableRegion_1.useScrollableRegion)({ label: ariaLabel });
15
+ const mergedRef = (0, react_1.useMemo)(() => (0, mergeRefs_1.mergeRefs)(scrollContainerRef, ref), [scrollContainerRef, ref]);
16
+ return ((0, jsx_runtime_1.jsx)(react_2.Box, { ref: mergedRef, ...regionProps, height: height, maxHeight: maxHeight, position: "relative", sx: { overflowX, overflowY, ...(0, scrollbar_1.scrollbarStyles)(colors, variant), ...(0, focusRing_styles_1.focusVisibleStyles)(colors) }, children: children }));
11
17
  };
12
18
  exports.default = ScrollbarBox;
@@ -1,5 +1,5 @@
1
1
  import { SearchSelectProps } from "./SearchSelectProps";
2
2
  /** Full-featured combobox: search, chips, select-all, paginated infinite scroll — not DOM-virtualized despite the `virtualization` prop. */
3
- /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see select-absorption-spec.md. */
3
+ /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see COMPONENT-GOTCHAS.md ("Which select component"). */
4
4
  declare const SearchSelect: ({ id, label, options, onChange, onSelect, onSearch, isOptionLoading, isLoading, loadingText, placeholder, value, searchQuery, isMultiple, isRequired, error, errorMessage, helperText, width, height, size, isDisabled, chip, information, isInformation, informationMessage, rightIcon, addNew, isSelectAll, pagination, insideSelect, isRemoveAllIcon, "aria-label": ariaLabel, }: SearchSelectProps) => import("react/jsx-runtime").JSX.Element;
5
5
  export default SearchSelect;
@@ -44,6 +44,7 @@ const FormLabel_1 = require("../Common/FormLabel");
44
44
  const Tag_1 = __importDefault(require("../Tag/Tag"));
45
45
  const useCustomTheme_1 = require("../../Theme/useCustomTheme");
46
46
  const surfaceRaised_1 = require("../../Theme/tokens/builders/surfaceRaised");
47
+ const planeStep_1 = require("../../Theme/tokens/builders/planeStep");
47
48
  const rowStates_1 = require("../../Theme/tokens/builders/rowStates");
48
49
  const optionRowSizes_1 = require("../../Theme/tokens/primitives/optionRowSizes");
49
50
  const optionRowInk_1 = require("../Select/optionRowInk");
@@ -62,6 +63,7 @@ const searchSelectSize_1 = require("./searchSelectSize");
62
63
  const Checkbox_1 = __importDefault(require("../Checkbox/Checkbox"));
63
64
  const rafThrottle_1 = require("../../Utils/rafThrottle");
64
65
  const searchSelectNav_1 = require("./searchSelectNav");
66
+ const activationKey_1 = require("../Common/activationKey");
65
67
  const SEGMENT_TRANSITION = (0, motion_1.transitionFor)(["background-color", "box-shadow"]);
66
68
  const CHEVRON_TRANSITION = (0, motion_1.transitionFor)(["transform", "color"], "base");
67
69
  const normalizeSingleValue = (val) => {
@@ -84,7 +86,7 @@ const OptionRow = react_1.default.memo(function OptionRow({ option, index, optio
84
86
  fontSize: spec.fontSize, fontWeight: (0, optionRowInk_1.optionRowWeight)(singleSelected), children: [isMultiple && ((0, jsx_runtime_1.jsx)(Checkbox_1.default, { isChecked: isSelected, sx: DECORATIVE_CHECKBOX_SX, size: checkboxSize })), option.view ? ((0, jsx_runtime_1.jsx)(jsx_runtime_1.Fragment, { children: option.view })) : ((0, jsx_runtime_1.jsx)(react_2.Text, { flex: 1, minW: 0, isTruncated: true, children: option.label })), singleSelected && ((0, jsx_runtime_1.jsx)(react_2.Box, { as: lucide_react_1.Check, size: spec.iconSize, color: colors.accentText, flexShrink: 0 }))] }));
85
87
  });
86
88
  /** Full-featured combobox: search, chips, select-all, paginated infinite scroll — not DOM-virtualized despite the `virtualization` prop. */
87
- /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see select-absorption-spec.md. */
89
+ /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see COMPONENT-GOTCHAS.md ("Which select component"). */
88
90
  const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOptionLoading = false, isLoading = false, loadingText = "Loading...", placeholder = "Select", value, searchQuery = "", isMultiple = false, isRequired = false, error = false, errorMessage, helperText, width = "100%", height, size = "sm", isDisabled = false, chip, information, isInformation, informationMessage, rightIcon, addNew, isSelectAll = false, pagination, insideSelect, isRemoveAllIcon, "aria-label": ariaLabel, }) => {
89
91
  var _a, _b, _c, _d, _e, _f;
90
92
  const s = (0, searchSelectSize_1.getSearchSelectSizeStyles)(size);
@@ -208,7 +210,8 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
208
210
  const updated = selectedValues.filter((v) => v.id !== id);
209
211
  emitChange === null || emitChange === void 0 ? void 0 : emitChange(updated);
210
212
  };
211
- const handleClearAll = () => {
213
+ const handleClearAll = (e) => {
214
+ e.stopPropagation();
212
215
  emitChange === null || emitChange === void 0 ? void 0 : emitChange(isMultiple ? [] : undefined);
213
216
  setInputValue("");
214
217
  };
@@ -483,7 +486,7 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
483
486
  setCustomSelectOpen(false);
484
487
  return;
485
488
  }
486
- if (e.key !== "Enter" && e.key !== " ")
489
+ if (!(0, activationKey_1.isActivationKey)(e))
487
490
  return;
488
491
  e.preventDefault();
489
492
  focusInsideOnOpenRef.current = !customSelectOpen;
@@ -638,10 +641,10 @@ const SearchSelect = ({ id, label, options, onChange, onSelect, onSearch, isOpti
638
641
  var _a, _b, _c;
639
642
  const insideLabel = (_a = insideSelect.value) === null || _a === void 0 ? void 0 : _a.label;
640
643
  const insidePlaceholder = (_b = insideSelect.placeholder) !== null && _b !== void 0 ? _b : "Select";
641
- return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, role: "button", tabIndex: isDisabled ? undefined : 0, "aria-haspopup": "listbox", "aria-expanded": customSelectOpen, "aria-controls": customSelectOpen ? insideSelectPortalId : undefined, "aria-disabled": isDisabled || undefined, onKeyDown: handleInsideTriggerKeyDown, onFocus: stopFocusBubbling, onBlur: stopFocusBubbling, _focusVisible: insideFocusRing, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: theme.colors.boxborder[200], bg: customSelectOpen
644
+ return ((0, jsx_runtime_1.jsxs)(react_2.Box, { position: "relative", ref: customSelectRef, role: "button", tabIndex: isDisabled ? undefined : 0, "aria-haspopup": "listbox", "aria-expanded": customSelectOpen, "aria-controls": customSelectOpen ? insideSelectPortalId : undefined, "aria-disabled": isDisabled || undefined, onKeyDown: handleInsideTriggerKeyDown, onFocus: stopFocusBubbling, onBlur: stopFocusBubbling, _focusVisible: insideFocusRing, flexShrink: 0, ml: s.insideSelectMarginLeft, h: "-webkit-fill-available", borderRight: `${borderWidths_1.BORDER_WIDTHS.hairline} solid`, borderColor: (0, planeStep_1.ruleOn)(theme.colors, theme.colors.background[400]), bg: customSelectOpen
642
645
  ? rowBackgrounds.active
643
646
  : theme.colors.background[400], borderLeftRadius: "md", borderRightRadius: 0, transition: SEGMENT_TRANSITION, boxShadow: customSelectOpen
644
- ? `inset 0 0 0 0.063rem ${theme.colors.primary[500]}`
647
+ ? `inset 0 0 0 ${borderWidths_1.BORDER_WIDTHS.hairline} ${theme.colors.primary[500]}`
645
648
  : "none", onClick: (e) => {
646
649
  e.stopPropagation();
647
650
  toggleCustomSelect();
@@ -1,5 +1,5 @@
1
1
  /** value's shape must match isMultiple (array vs single object) — a mismatch normalizes to no selection, not an error. */
2
- /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see select-absorption-spec.md. */
2
+ /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see COMPONENT-GOTCHAS.md ("Which select component"). */
3
3
  export type SearchSelectProps = {
4
4
  id?: string;
5
5
  label?: string;
@@ -90,7 +90,7 @@ export type SearchSelectProps = {
90
90
  /** Total row count; when set, hasMore is derived as options.length < totalRecords instead of the limit heuristic. */
91
91
  totalRecords?: number;
92
92
  };
93
- /** Not implemented — the option list always renders unvirtualized; use `pagination` to page in large datasets instead. */
93
+ /** @deprecated Not implemented — the option list never virtualizes; page large datasets with `pagination` instead. */
94
94
  virtualization?: boolean;
95
95
  insideSelect?: {
96
96
  /** Fires with the picked nested option; the nested picker is controlled via `insideSelect.value`. */
@@ -106,7 +106,7 @@ export type SearchSelectProps = {
106
106
  };
107
107
  };
108
108
  /** One selectable option; view, when set, fully replaces the default label rendering for that option's row. */
109
- /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see select-absorption-spec.md. */
109
+ /** Prefer `Select` with `native={false}` for new work — not yet a drop-in; see COMPONENT-GOTCHAS.md ("Which select component"). */
110
110
  export type Options = {
111
111
  id: string | number;
112
112
  label: string;
@@ -4,6 +4,6 @@ type SegmentedControlComponent = {
4
4
  <T extends string = string>(props: SegmentedControlProps<T> & RefAttributes<HTMLDivElement>): ReactElement | null;
5
5
  displayName?: string;
6
6
  };
7
- /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle (see MODULE.md); `ref` is the radiogroup. */
7
+ /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle; `ref` is the radiogroup. */
8
8
  declare const SegmentedControl: SegmentedControlComponent;
9
9
  export default SegmentedControl;
@@ -118,7 +118,7 @@ function SegmentedControlInner({ options, value, onChange, size = "sm", isFullWi
118
118
  : restInk, fontSize: control.fontSize, fontWeight: isSelected ? 600 : 500, whiteSpace: "nowrap", opacity: option.isDisabled ? 0.5 : 1, cursor: option.isDisabled ? "not-allowed" : "pointer", transition: (0, motion_1.transitionFor)(["color"]), _hover: option.isDisabled || isSelected ? undefined : { color: hoverInk }, sx: { ...segmentFocus, ...(0, motion_2.reducedMotionSx)() }, children: [option.icon, displayLabel, option.count != null && ((0, jsx_runtime_1.jsx)(Tag_1.default, { label: formatCount(option.count), size: COUNT_TAG_SIZE[size], variant: "subtle", colorScheme: "gray" }))] }, option.value));
119
119
  })] }));
120
120
  }
121
- /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle (see MODULE.md); `ref` is the radiogroup. */
121
+ /** role="radiogroup" of role="radio" buttons with roving tabindex; shares variant with Toggle/TableToggle; `ref` is the radiogroup. */
122
122
  const SegmentedControl = (0, react_1.forwardRef)(SegmentedControlInner);
123
123
  SegmentedControl.displayName = "SegmentedControl";
124
124
  exports.default = SegmentedControl;
@@ -17,6 +17,12 @@ const NATIVE_INERT_PROPS = [
17
17
  "onClear",
18
18
  "isLoading",
19
19
  "loadingText",
20
+ "isFieldLoading",
21
+ "rightIcon",
22
+ "searchFields",
23
+ "filterOption",
24
+ "createWhen",
25
+ "footerAction",
20
26
  "onLoadMore",
21
27
  "renderOption",
22
28
  "renderValue",
@@ -38,11 +38,21 @@ declare const SelectNative: React.ForwardRefExoticComponent<{
38
38
  defaultSearchValue?: string;
39
39
  onSearchChange?: (query: string) => void;
40
40
  searchDebounceMs?: number;
41
+ searchFields?: ("label" | "description")[];
42
+ filterOption?: (option: OptionProp, query: string) => boolean;
41
43
  filterOptions?: boolean;
42
44
  isClearable?: boolean;
43
45
  onClear?: () => void;
44
46
  isLoading?: boolean;
45
47
  loadingText?: string;
48
+ isFieldLoading?: boolean;
49
+ rightIcon?: {
50
+ icon: React.ReactNode;
51
+ } | {
52
+ icon: React.ReactNode;
53
+ onClick: () => void;
54
+ ariaLabel: string;
55
+ };
46
56
  noOptionsMessage?: React.ReactNode;
47
57
  onLoadMore?: () => void;
48
58
  hasMore?: boolean;
@@ -53,6 +63,12 @@ declare const SelectNative: React.ForwardRefExoticComponent<{
53
63
  renderValue?: (selected: OptionProp[]) => React.ReactNode;
54
64
  onCreate?: (label: string) => void;
55
65
  createLabel?: (query: string) => React.ReactNode;
66
+ createWhen?: "no-options" | "no-exact-match";
67
+ footerAction?: {
68
+ label: React.ReactNode;
69
+ onSelect: (query: string) => void;
70
+ icon?: React.ReactNode;
71
+ };
56
72
  maxMenuHeight?: string;
57
73
  defaultOpen?: boolean;
58
74
  virtualizeAfter?: number;