pixelize-design-library 2.4.2-beta.9 → 3.0.0

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 (1836) hide show
  1. package/CHANGELOG.md +1439 -0
  2. package/COMPONENT-GOTCHAS.md +2057 -0
  3. package/DESIGN-GUIDE.md +339 -0
  4. package/README.md +119 -35
  5. package/dist/Components/Accordion/Accordion.d.ts +1 -0
  6. package/dist/Components/Accordion/Accordion.js +16 -12
  7. package/dist/Components/Accordion/AccordionProps.d.ts +16 -0
  8. package/dist/Components/Accordion/accordionColors.d.ts +6 -0
  9. package/dist/Components/Accordion/accordionColors.js +10 -11
  10. package/dist/Components/AddressCard/AddressCard.d.ts +4 -0
  11. package/dist/Components/AddressCard/AddressCard.js +26 -0
  12. package/dist/Components/AddressCard/AddressCardGroup.d.ts +4 -0
  13. package/dist/Components/AddressCard/AddressCardGroup.js +7 -0
  14. package/dist/Components/AddressCard/AddressCardProps.d.ts +58 -0
  15. package/dist/Components/AlertDialog/AlertDialog.d.ts +2 -1
  16. package/dist/Components/AlertDialog/AlertDialog.js +6 -5
  17. package/dist/Components/AlertDialog/AlertDialogProps.d.ts +27 -2
  18. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChart.d.ts +1 -0
  19. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChart.js +7 -2
  20. package/dist/Components/Apexcharts/ApexAreaChart/ApexAreaChartProps.d.ts +15 -0
  21. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.d.ts +1 -0
  22. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChart.js +8 -4
  23. package/dist/Components/Apexcharts/ApexBarChart/ApexBarChartProps.d.ts +22 -0
  24. package/dist/Components/Apexcharts/ApexChartFallback.d.ts +7 -0
  25. package/dist/Components/Apexcharts/ApexChartFallback.js +10 -0
  26. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.d.ts +1 -0
  27. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +9 -3
  28. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChartProps.d.ts +18 -0
  29. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts +2 -1
  30. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +13 -7
  31. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChartProps.d.ts +22 -0
  32. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.d.ts +2 -0
  33. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.js +13 -0
  34. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.d.ts +1 -0
  35. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +9 -5
  36. package/dist/Components/Apexcharts/ApexPolarCharts/ApexPolarChartsProps.d.ts +12 -0
  37. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChart.d.ts +1 -0
  38. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChart.js +7 -4
  39. package/dist/Components/Apexcharts/ApexRadialChart/ApexRadialChartProps.d.ts +13 -0
  40. package/dist/Components/Apexcharts/LazyReactApexChart.d.ts +2 -0
  41. package/dist/Components/Apexcharts/LazyReactApexChart.js +40 -0
  42. package/dist/Components/AppSwitcher/AppMark.d.ts +14 -0
  43. package/dist/Components/AppSwitcher/AppMark.js +58 -0
  44. package/dist/Components/AppSwitcher/AppSwitcher.d.ts +5 -0
  45. package/dist/Components/AppSwitcher/AppSwitcher.js +281 -0
  46. package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +97 -0
  47. package/dist/Components/AppSwitcher/AppSwitcherProps.js +96 -0
  48. package/dist/Components/AppSwitcher/pixelizeSuite.d.ts +25 -0
  49. package/dist/Components/AppSwitcher/pixelizeSuite.js +71 -0
  50. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.d.ts +3 -0
  51. package/dist/Components/AppSwitcher/useAppSwitcherShortcut.js +31 -0
  52. package/dist/Components/AppearanceSettings/AppearanceSettings.d.ts +1 -0
  53. package/dist/Components/AppearanceSettings/AppearanceSettings.js +7 -5
  54. package/dist/Components/AppearanceSettings/AppearanceSettingsProps.d.ts +15 -2
  55. package/dist/Components/AudioRecorder/AudioRecorder.d.ts +9 -0
  56. package/dist/Components/AudioRecorder/AudioRecorder.js +171 -0
  57. package/dist/Components/AudioRecorder/AudioRecorderProps.d.ts +26 -0
  58. package/dist/Components/Avatar/Avatar.d.ts +4 -0
  59. package/dist/Components/Avatar/Avatar.js +26 -0
  60. package/dist/Components/Avatar/AvatarGroup.d.ts +4 -0
  61. package/dist/Components/Avatar/AvatarGroup.js +25 -0
  62. package/dist/Components/Avatar/AvatarGroupProps.d.ts +21 -0
  63. package/dist/Components/Avatar/AvatarProps.d.ts +22 -0
  64. package/dist/Components/Avatar/AvatarProps.js +2 -0
  65. package/dist/Components/Avatar/avatarColorway.d.ts +12 -0
  66. package/dist/Components/Avatar/avatarColorway.js +32 -0
  67. package/dist/Components/Avatar/avatarSizing.d.ts +5 -0
  68. package/dist/Components/Avatar/avatarSizing.js +15 -0
  69. package/dist/Components/Backdrop/Backdrop.d.ts +3 -0
  70. package/dist/Components/Backdrop/Backdrop.js +34 -0
  71. package/dist/Components/Backdrop/BackdropProps.d.ts +33 -0
  72. package/dist/Components/Backdrop/BackdropProps.js +2 -0
  73. package/dist/Components/BagBar/BagBar.d.ts +4 -0
  74. package/dist/Components/BagBar/BagBar.js +33 -0
  75. package/dist/Components/BagBar/BagBarProps.d.ts +38 -0
  76. package/dist/Components/BagBar/BagBarProps.js +2 -0
  77. package/dist/Components/Breadcrumbs/Breadcrumbs.d.ts +1 -1
  78. package/dist/Components/Breadcrumbs/Breadcrumbs.js +37 -4
  79. package/dist/Components/Breadcrumbs/BreadcrumbsProps.d.ts +18 -1
  80. package/dist/Components/Breadcrumbs/breadcrumbInk.d.ts +9 -0
  81. package/dist/Components/Breadcrumbs/breadcrumbInk.js +11 -0
  82. package/dist/Components/BulkSelectionBar/BulkSelectionBar.d.ts +4 -0
  83. package/dist/Components/BulkSelectionBar/BulkSelectionBar.js +44 -0
  84. package/dist/Components/BulkSelectionBar/BulkSelectionBarProps.d.ts +41 -0
  85. package/dist/Components/BulkSelectionBar/BulkSelectionBarProps.js +2 -0
  86. package/dist/Components/BulkSelectionBar/index.d.ts +2 -0
  87. package/dist/Components/BulkSelectionBar/index.js +8 -0
  88. package/dist/Components/Button/Button.d.ts +2 -2
  89. package/dist/Components/Button/Button.js +5 -3
  90. package/dist/Components/Button/Button.styles.js +105 -94
  91. package/dist/Components/Button/ButtonProps.d.ts +16 -1
  92. package/dist/Components/ButtonGroupIcon/ButtonGoupIconProps.d.ts +2 -35
  93. package/dist/Components/ButtonGroupIcon/ButtonGoupIconProps.js +16 -0
  94. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.d.ts +2 -1
  95. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +9 -15
  96. package/dist/Components/ButtonGroupIcon/ButtonGroupIconProps.d.ts +61 -0
  97. package/dist/Components/ButtonGroupIcon/ButtonGroupIconProps.js +2 -0
  98. package/dist/Components/CalendarGrid/CalendarGrid.d.ts +4 -0
  99. package/dist/Components/CalendarGrid/CalendarGrid.js +176 -0
  100. package/dist/Components/CalendarGrid/CalendarGridProps.d.ts +65 -0
  101. package/dist/Components/CalendarGrid/CalendarGridProps.js +2 -0
  102. package/dist/Components/CalendarGrid/calendarMath.d.ts +62 -0
  103. package/dist/Components/CalendarGrid/calendarMath.js +190 -0
  104. package/dist/Components/Card/Card.d.ts +21 -2
  105. package/dist/Components/Card/Card.js +21 -5
  106. package/dist/Components/Card/CardProps.d.ts +35 -7
  107. package/dist/Components/Card/PaymentCard/PaymentCard.d.ts +1 -0
  108. package/dist/Components/Card/PaymentCard/PaymentCard.js +33 -18
  109. package/dist/Components/Card/PaymentCard/PaymentCardProps.d.ts +25 -0
  110. package/dist/Components/CartItem/CartItem.d.ts +4 -0
  111. package/dist/Components/CartItem/CartItem.js +61 -0
  112. package/dist/Components/CartItem/CartItemProps.d.ts +74 -0
  113. package/dist/Components/CartItem/CartItemProps.js +2 -0
  114. package/dist/Components/CartItem/cartItemOptions.d.ts +3 -0
  115. package/dist/Components/CartItem/cartItemOptions.js +13 -0
  116. package/dist/Components/Checkbox/Checkbox.d.ts +18 -2
  117. package/dist/Components/Checkbox/Checkbox.js +16 -11
  118. package/dist/Components/Checkbox/Checkbox.styles.js +47 -37
  119. package/dist/Components/Checkbox/CheckboxProps.d.ts +14 -0
  120. package/dist/Components/CheckoutKit/selectable.d.ts +60 -0
  121. package/dist/Components/CheckoutKit/selectable.js +123 -0
  122. package/dist/Components/CheckoutKit/tonalHover.d.ts +2 -0
  123. package/dist/Components/CheckoutKit/tonalHover.js +6 -0
  124. package/dist/Components/ChoiceCard/ChoiceCard.d.ts +4 -0
  125. package/dist/Components/ChoiceCard/ChoiceCard.js +18 -0
  126. package/dist/Components/ChoiceCard/ChoiceCardGroup.d.ts +4 -0
  127. package/dist/Components/ChoiceCard/ChoiceCardGroup.js +7 -0
  128. package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +37 -0
  129. package/dist/Components/ChoiceCard/ChoiceCardProps.js +2 -0
  130. package/dist/Components/CircularProgress/CircularProgress.d.ts +4 -0
  131. package/dist/Components/CircularProgress/CircularProgress.js +35 -0
  132. package/dist/Components/CircularProgress/CircularProgressProps.d.ts +24 -0
  133. package/dist/Components/CircularProgress/CircularProgressProps.js +2 -0
  134. package/dist/Components/CircularProgress/arc.d.ts +20 -0
  135. package/dist/Components/CircularProgress/arc.js +30 -0
  136. package/dist/Components/Commerce/commerceTypes.d.ts +57 -0
  137. package/dist/Components/Commerce/commerceTypes.js +2 -0
  138. package/dist/Components/Commerce/commerceVariants.d.ts +13 -0
  139. package/dist/Components/Commerce/commerceVariants.js +51 -0
  140. package/dist/Components/Commerce/index.d.ts +2 -0
  141. package/dist/Components/Commerce/index.js +18 -0
  142. package/dist/Components/Commerce/useContainerWidth.d.ts +3 -0
  143. package/dist/Components/Commerce/useContainerWidth.js +25 -0
  144. package/dist/Components/Common/ErrorMessage.d.ts +1 -1
  145. package/dist/Components/Common/ErrorMessage.js +3 -3
  146. package/dist/Components/Common/FieldMessage.d.ts +10 -0
  147. package/dist/Components/Common/FieldMessage.js +19 -0
  148. package/dist/Components/Common/FormLabel.d.ts +13 -0
  149. package/dist/Components/Common/FormLabel.js +18 -10
  150. package/dist/Components/Common/HelperText.d.ts +5 -2
  151. package/dist/Components/Common/HelperText.js +12 -7
  152. package/dist/Components/Common/activationKey.d.ts +5 -0
  153. package/dist/Components/Common/activationKey.js +12 -0
  154. package/dist/Components/Common/chipTriggerSize.d.ts +10 -0
  155. package/dist/Components/Common/chipTriggerSize.js +15 -0
  156. package/dist/Components/Common/dataAttributes.d.ts +4 -0
  157. package/dist/Components/Common/dataAttributes.js +2 -0
  158. package/dist/Components/Common/fieldMessageStyles.d.ts +19 -0
  159. package/dist/Components/Common/fieldMessageStyles.js +19 -0
  160. package/dist/Components/Common/fieldStyles.d.ts +49 -11
  161. package/dist/Components/Common/fieldStyles.js +75 -31
  162. package/dist/Components/Common/findSlot.d.ts +2 -0
  163. package/dist/Components/Common/findSlot.js +24 -0
  164. package/dist/Components/Common/iconBox.d.ts +3 -0
  165. package/dist/Components/Common/iconBox.js +16 -0
  166. package/dist/Components/Common/surfaceFocusRing.d.ts +1 -0
  167. package/dist/Components/Common/surfaceFocusRing.js +7 -0
  168. package/dist/Components/Common/useFieldIds.d.ts +16 -0
  169. package/dist/Components/Common/useFieldIds.js +27 -0
  170. package/dist/Components/ConfirmDialog/ConfirmDialog.d.ts +5 -0
  171. package/dist/Components/ConfirmDialog/ConfirmDialog.js +37 -0
  172. package/dist/Components/ConfirmDialog/ConfirmDialogProps.d.ts +78 -0
  173. package/dist/Components/ConfirmDialog/ConfirmDialogProps.js +2 -0
  174. package/dist/Components/ContactForm/ContactForm.d.ts +2 -1
  175. package/dist/Components/ContactForm/ContactForm.js +19 -14
  176. package/dist/Components/ContactForm/ContactFormProps.d.ts +31 -0
  177. package/dist/Components/CopyButton/CopyButton.d.ts +6 -1
  178. package/dist/Components/CopyButton/CopyButton.js +19 -10
  179. package/dist/Components/CouponField/CouponField.d.ts +4 -0
  180. package/dist/Components/CouponField/CouponField.js +76 -0
  181. package/dist/Components/CouponField/CouponFieldProps.d.ts +65 -0
  182. package/dist/Components/CouponField/CouponFieldProps.js +2 -0
  183. package/dist/Components/CustomModulesTable/CustomModulesTable.d.ts +1 -0
  184. package/dist/Components/CustomModulesTable/CustomModulesTable.js +9 -4
  185. package/dist/Components/CustomModulesTable/CustomModulesTableProps.d.ts +43 -0
  186. package/dist/Components/CustomModulesTable/DeleteModuleModal.d.ts +1 -0
  187. package/dist/Components/CustomModulesTable/DeleteModuleModal.js +3 -2
  188. package/dist/Components/CustomModulesTable/EditModuleModal.d.ts +1 -0
  189. package/dist/Components/CustomModulesTable/EditModuleModal.js +4 -4
  190. package/dist/Components/DatePicker/CalendarPanel.d.ts +7 -0
  191. package/dist/Components/DatePicker/CalendarPanel.js +44 -24
  192. package/dist/Components/DatePicker/DatePicker.d.ts +5 -2
  193. package/dist/Components/DatePicker/DatePicker.js +40 -73
  194. package/dist/Components/DatePicker/DatePickerProps.d.ts +90 -2
  195. package/dist/Components/DatePicker/DatePickerProps.js +3 -0
  196. package/dist/Components/DatePicker/PickerPortal.d.ts +11 -0
  197. package/dist/Components/DatePicker/PickerPortal.js +26 -0
  198. package/dist/Components/DatePicker/RangeDatePicker.d.ts +16 -2
  199. package/dist/Components/DatePicker/RangeDatePicker.js +109 -70
  200. package/dist/Components/DatePicker/SingleDatePicker.d.ts +10 -3
  201. package/dist/Components/DatePicker/SingleDatePicker.js +133 -91
  202. package/dist/Components/DatePicker/ThemeDatePicker.d.ts +9 -3
  203. package/dist/Components/DatePicker/ThemeDatePicker.js +17 -19
  204. package/dist/Components/DatePicker/TimeOnlyPicker.d.ts +10 -3
  205. package/dist/Components/DatePicker/TimeOnlyPicker.js +83 -40
  206. package/dist/Components/DatePicker/TimePicker.d.ts +1 -0
  207. package/dist/Components/DatePicker/TimePicker.js +9 -12
  208. package/dist/Components/DatePicker/TimePickerInput.d.ts +7 -2
  209. package/dist/Components/DatePicker/TimePickerInput.js +8 -12
  210. package/dist/Components/DatePicker/dayStates.d.ts +33 -0
  211. package/dist/Components/DatePicker/dayStates.js +76 -0
  212. package/dist/Components/DatePicker/pickerField.d.ts +24 -0
  213. package/dist/Components/DatePicker/pickerField.js +31 -0
  214. package/dist/Components/DatePicker/valueFormat.d.ts +4 -0
  215. package/dist/Components/DatePicker/valueFormat.js +21 -0
  216. package/dist/Components/DescriptionList/DescriptionList.d.ts +4 -0
  217. package/dist/Components/DescriptionList/DescriptionList.js +32 -0
  218. package/dist/Components/DescriptionList/DescriptionListProps.d.ts +29 -0
  219. package/dist/Components/DescriptionList/DescriptionListProps.js +2 -0
  220. package/dist/Components/DetailSections/DetailSections.d.ts +4 -0
  221. package/dist/Components/DetailSections/DetailSections.js +113 -0
  222. package/dist/Components/DetailSections/DetailSectionsProps.d.ts +80 -0
  223. package/dist/Components/DetailSections/DetailSectionsProps.js +2 -0
  224. package/dist/Components/Divider/Divider.d.ts +3 -2
  225. package/dist/Components/Divider/Divider.js +3 -2
  226. package/dist/Components/Drawer/Drawer.d.ts +7 -11
  227. package/dist/Components/Drawer/Drawer.js +32 -13
  228. package/dist/Components/Drawer/DrawerProps.d.ts +22 -2
  229. package/dist/Components/Dropdown/DropDown.d.ts +1 -0
  230. package/dist/Components/Dropdown/DropDown.js +73 -58
  231. package/dist/Components/Dropdown/DropdownProps.d.ts +18 -1
  232. package/dist/Components/Editor/Editor.d.ts +1 -0
  233. package/dist/Components/Editor/Editor.js +67 -2
  234. package/dist/Components/Editor/EditorFieldBar.d.ts +15 -0
  235. package/dist/Components/Editor/EditorFieldBar.js +19 -0
  236. package/dist/Components/Editor/EditorProps.d.ts +126 -2
  237. package/dist/Components/Editor/MakeDynamicDialog.d.ts +12 -0
  238. package/dist/Components/Editor/MakeDynamicDialog.js +59 -0
  239. package/dist/Components/Editor/editorLabels.d.ts +4 -0
  240. package/dist/Components/Editor/editorLabels.js +25 -0
  241. package/dist/Components/Editor/editorTokenStyles.d.ts +36 -0
  242. package/dist/Components/Editor/editorTokenStyles.js +38 -0
  243. package/dist/Components/Editor/editorTokens.d.ts +29 -0
  244. package/dist/Components/Editor/editorTokens.js +134 -0
  245. package/dist/Components/Editor/joditAccessibility.d.ts +1 -0
  246. package/dist/Components/Editor/joditAccessibility.js +28 -0
  247. package/dist/Components/Editor/useEditorBridge.d.ts +40 -0
  248. package/dist/Components/Editor/useEditorBridge.js +141 -0
  249. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +2 -1
  250. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +12 -9
  251. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +26 -0
  252. package/dist/Components/EmptyState/EmptyState.d.ts +1 -0
  253. package/dist/Components/EmptyState/EmptyState.js +26 -14
  254. package/dist/Components/EmptyState/EmptyStateProps.d.ts +33 -5
  255. package/dist/Components/EmptyState/FilteredEmptyState.d.ts +5 -0
  256. package/dist/Components/EmptyState/FilteredEmptyState.js +23 -0
  257. package/dist/Components/FeedbackForm/FeedbackForm.d.ts +3 -0
  258. package/dist/Components/FeedbackForm/FeedbackForm.js +19 -5
  259. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +4 -2
  260. package/dist/Components/FieldSelectModal/FieldSelectModal.js +3 -4
  261. package/dist/Components/FilePreview/FilePreview.d.ts +1 -0
  262. package/dist/Components/FilePreview/FilePreview.js +17 -10
  263. package/dist/Components/FilePreview/FilePreviewProps.d.ts +10 -2
  264. package/dist/Components/FileUpload/FileUpload.d.ts +1 -0
  265. package/dist/Components/FileUpload/FileUpload.js +50 -17
  266. package/dist/Components/FileUpload/FileUploadProps.d.ts +29 -1
  267. package/dist/Components/FileUpload/constants.d.ts +1 -0
  268. package/dist/Components/FileUpload/constants.js +3 -1
  269. package/dist/Components/FileUpload/useObjectUrl.d.ts +1 -0
  270. package/dist/Components/FileUpload/useObjectUrl.js +14 -0
  271. package/dist/Components/FileUploader/FileUploader.d.ts +1 -0
  272. package/dist/Components/FileUploader/FileUploader.js +16 -5
  273. package/dist/Components/FileUploader/FileUploaderProps.d.ts +11 -0
  274. package/dist/Components/FilterBar/FilterBar.d.ts +4 -0
  275. package/dist/Components/FilterBar/FilterBar.js +17 -0
  276. package/dist/Components/FilterBar/FilterBarProps.d.ts +27 -0
  277. package/dist/Components/FilterBar/FilterBarProps.js +2 -0
  278. package/dist/Components/FilterSidebar/FilterSidebar.d.ts +8 -7
  279. package/dist/Components/FilterSidebar/FilterSidebar.js +92 -233
  280. package/dist/Components/FilterSidebar/OptionsSection.d.ts +14 -0
  281. package/dist/Components/FilterSidebar/OptionsSection.js +46 -0
  282. package/dist/Components/FilterSidebar/RangeSection.d.ts +17 -0
  283. package/dist/Components/FilterSidebar/RangeSection.js +80 -0
  284. package/dist/Components/FilterSidebar/SectionHeader.d.ts +13 -0
  285. package/dist/Components/FilterSidebar/SectionHeader.js +29 -0
  286. package/dist/Components/FilterSidebar/filterHoverStyle.d.ts +2 -10
  287. package/dist/Components/FilterSidebar/filterHoverStyle.js +3 -10
  288. package/dist/Components/FilterSidebar/useStableCallback.d.ts +1 -0
  289. package/dist/Components/FilterSidebar/useStableCallback.js +12 -0
  290. package/dist/Components/Form/FormWrapper.d.ts +7 -4
  291. package/dist/Components/Form/FormWrapper.js +5 -2
  292. package/dist/Components/FormDrawer/FormDrawer.d.ts +3 -0
  293. package/dist/Components/FormDrawer/FormDrawer.js +98 -0
  294. package/dist/Components/FormDrawer/FormDrawerProps.d.ts +60 -0
  295. package/dist/Components/FormDrawer/FormDrawerProps.js +2 -0
  296. package/dist/Components/FormField/FormField.d.ts +4 -0
  297. package/dist/Components/FormField/FormField.js +58 -0
  298. package/dist/Components/FormField/FormFieldProps.d.ts +37 -0
  299. package/dist/Components/FormField/FormFieldProps.js +2 -0
  300. package/dist/Components/Header/Header.d.ts +1 -15
  301. package/dist/Components/Header/Header.js +3 -16
  302. package/dist/Components/Header/HeaderActions.d.ts +20 -0
  303. package/dist/Components/Header/HeaderActions.js +7 -4
  304. package/dist/Components/Header/HeaderProps.d.ts +41 -1
  305. package/dist/Components/Header/components/desktopMenu.d.ts +2 -1
  306. package/dist/Components/Header/components/desktopMenu.js +11 -11
  307. package/dist/Components/Header/components/mobileMenu.d.ts +2 -1
  308. package/dist/Components/Header/components/mobileMenu.js +27 -14
  309. package/dist/Components/IconButton/IconButton.d.ts +5 -0
  310. package/dist/Components/IconButton/IconButton.js +24 -0
  311. package/dist/Components/IconButton/IconButtonProps.d.ts +11 -0
  312. package/dist/Components/IconButton/IconButtonProps.js +2 -0
  313. package/dist/Components/Input/PhoneNumberInput.d.ts +2 -1
  314. package/dist/Components/Input/PhoneNumberInput.js +21 -3
  315. package/dist/Components/Input/PhoneNumberInputProps.d.ts +8 -1
  316. package/dist/Components/Input/Switch/InputSwitch.d.ts +16 -3
  317. package/dist/Components/Input/Switch/InputSwitch.js +17 -18
  318. package/dist/Components/Input/TextInput.js +80 -6
  319. package/dist/Components/Input/TextInput.styles.d.ts +18 -1
  320. package/dist/Components/Input/TextInput.styles.js +52 -90
  321. package/dist/Components/Input/TextInputProps.d.ts +46 -7
  322. package/dist/Components/Input/textInputIconSize.d.ts +2 -7
  323. package/dist/Components/Input/textInputIconSize.js +6 -32
  324. package/dist/Components/Input/useAriaRequired.d.ts +2 -0
  325. package/dist/Components/Input/useAriaRequired.js +19 -0
  326. package/dist/Components/InputTextArea/InputTextArea.d.ts +2 -1
  327. package/dist/Components/InputTextArea/InputTextArea.js +9 -4
  328. package/dist/Components/InputTextArea/InputTextArea.style.js +14 -70
  329. package/dist/Components/InputTextArea/InputTextAreaProps.d.ts +9 -1
  330. package/dist/Components/KanbanBoard/AccountCard.d.ts +3 -0
  331. package/dist/Components/KanbanBoard/AccountCard.js +15 -8
  332. package/dist/Components/KanbanBoard/AccountRow.d.ts +1 -0
  333. package/dist/Components/KanbanBoard/AccountRow.js +2 -1
  334. package/dist/Components/KanbanBoard/KanbanActions/KanbanActions.d.ts +2 -0
  335. package/dist/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  336. package/dist/Components/KanbanBoard/KanbanBoard.d.ts +2 -1
  337. package/dist/Components/KanbanBoard/KanbanBoard.js +130 -71
  338. package/dist/Components/KanbanBoard/KanbanBoardProps.d.ts +82 -28
  339. package/dist/Components/KanbanBoard/MeasuredItem.d.ts +1 -0
  340. package/dist/Components/KanbanBoard/MeasuredItem.js +7 -14
  341. package/dist/Components/KanbanBoard/boardStore.d.ts +8 -0
  342. package/dist/Components/KanbanBoard/boardStore.js +27 -0
  343. package/dist/Components/KanbanBoard/index.d.ts +2 -0
  344. package/dist/Components/KanbanBoard/index.js +8 -0
  345. package/dist/Components/Kbd/Kbd.d.ts +7 -0
  346. package/dist/Components/Kbd/Kbd.js +34 -0
  347. package/dist/Components/Kbd/KbdProps.d.ts +21 -0
  348. package/dist/Components/Kbd/KbdProps.js +2 -0
  349. package/dist/Components/LauncherTrigger/LauncherTrigger.d.ts +5 -0
  350. package/dist/Components/LauncherTrigger/LauncherTrigger.js +49 -0
  351. package/dist/Components/LauncherTrigger/LauncherTriggerProps.d.ts +19 -0
  352. package/dist/Components/LauncherTrigger/LauncherTriggerProps.js +2 -0
  353. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +4 -2
  354. package/dist/Components/LazyWrapper/LazyWrapper.js +2 -1
  355. package/dist/Components/LimitReachedModal/LimitReachedModal.d.ts +1 -0
  356. package/dist/Components/LimitReachedModal/LimitReachedModal.js +2 -1
  357. package/dist/Components/LimitReachedModal/LimitReachedModalProps.d.ts +11 -1
  358. package/dist/Components/LimitReachedModal/limitReachedCopy.d.ts +2 -0
  359. package/dist/Components/LimitReachedModal/limitReachedCopy.js +3 -3
  360. package/dist/Components/Loading/Loading.d.ts +2 -1
  361. package/dist/Components/Loading/Loading.js +17 -15
  362. package/dist/Components/Loading/LoadingProps.d.ts +9 -1
  363. package/dist/Components/MediaGallery/MediaFrame.d.ts +31 -0
  364. package/dist/Components/MediaGallery/MediaFrame.js +55 -0
  365. package/dist/Components/MediaGallery/MediaGallery.d.ts +4 -0
  366. package/dist/Components/MediaGallery/MediaGallery.js +206 -0
  367. package/dist/Components/MediaGallery/MediaGalleryProps.d.ts +82 -0
  368. package/dist/Components/MediaGallery/MediaGalleryProps.js +20 -0
  369. package/dist/Components/MediaGallery/MediaLightbox.d.ts +4 -0
  370. package/dist/Components/MediaGallery/MediaLightbox.js +117 -0
  371. package/dist/Components/MediaGallery/MediaLightboxProps.d.ts +45 -0
  372. package/dist/Components/MediaGallery/MediaLightboxProps.js +15 -0
  373. package/dist/Components/MediaGallery/MediaThumb.d.ts +18 -0
  374. package/dist/Components/MediaGallery/MediaThumb.js +25 -0
  375. package/dist/Components/MediaGallery/glass.d.ts +31 -0
  376. package/dist/Components/MediaGallery/glass.js +48 -0
  377. package/dist/Components/MediaGallery/mediaGalleryModel.d.ts +22 -0
  378. package/dist/Components/MediaGallery/mediaGalleryModel.js +83 -0
  379. package/dist/Components/MediaGallery/motion.d.ts +5 -0
  380. package/dist/Components/MediaGallery/motion.js +12 -0
  381. package/dist/Components/MediaViewer/MediaViewer.d.ts +5 -0
  382. package/dist/Components/MediaViewer/MediaViewer.js +235 -0
  383. package/dist/Components/MediaViewer/MediaViewerProps.d.ts +92 -0
  384. package/dist/Components/MediaViewer/MediaViewerProps.js +32 -0
  385. package/dist/Components/MediaViewer/components/MediaAudioPlayer.d.ts +5 -0
  386. package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +143 -0
  387. package/dist/Components/MediaViewer/components/MediaAudioPlayerProps.d.ts +48 -0
  388. package/dist/Components/MediaViewer/components/MediaAudioPlayerProps.js +21 -0
  389. package/dist/Components/MediaViewer/components/MediaDocumentStage.d.ts +5 -0
  390. package/dist/Components/MediaViewer/components/MediaDocumentStage.js +150 -0
  391. package/dist/Components/MediaViewer/components/MediaDocumentStageProps.d.ts +42 -0
  392. package/dist/Components/MediaViewer/components/MediaDocumentStageProps.js +11 -0
  393. package/dist/Components/MediaViewer/components/MediaImageViewer.d.ts +5 -0
  394. package/dist/Components/MediaViewer/components/MediaImageViewer.js +115 -0
  395. package/dist/Components/MediaViewer/components/MediaImageViewerProps.d.ts +47 -0
  396. package/dist/Components/MediaViewer/components/MediaImageViewerProps.js +18 -0
  397. package/dist/Components/MediaViewer/components/MediaScrubber.d.ts +5 -0
  398. package/dist/Components/MediaViewer/components/MediaScrubber.js +98 -0
  399. package/dist/Components/MediaViewer/components/MediaScrubberProps.d.ts +30 -0
  400. package/dist/Components/MediaViewer/components/MediaScrubberProps.js +2 -0
  401. package/dist/Components/MediaViewer/components/MediaStatusPanel.d.ts +5 -0
  402. package/dist/Components/MediaViewer/components/MediaStatusPanel.js +14 -0
  403. package/dist/Components/MediaViewer/components/MediaStatusPanelProps.d.ts +24 -0
  404. package/dist/Components/MediaViewer/components/MediaStatusPanelProps.js +2 -0
  405. package/dist/Components/MediaViewer/components/MediaVideoPlayer.d.ts +5 -0
  406. package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +251 -0
  407. package/dist/Components/MediaViewer/components/MediaVideoPlayerProps.d.ts +72 -0
  408. package/dist/Components/MediaViewer/components/MediaVideoPlayerProps.js +31 -0
  409. package/dist/Components/MediaViewer/components/PlaybackTimeline.d.ts +20 -0
  410. package/dist/Components/MediaViewer/components/PlaybackTimeline.js +47 -0
  411. package/dist/Components/MediaViewer/components/TileChip.d.ts +5 -0
  412. package/dist/Components/MediaViewer/components/TileChip.js +12 -0
  413. package/dist/Components/MediaViewer/components/TileChipProps.d.ts +7 -0
  414. package/dist/Components/MediaViewer/components/TileChipProps.js +2 -0
  415. package/dist/Components/MediaViewer/components/VideoPoster.d.ts +5 -0
  416. package/dist/Components/MediaViewer/components/VideoPoster.js +16 -0
  417. package/dist/Components/MediaViewer/components/VideoPosterProps.d.ts +6 -0
  418. package/dist/Components/MediaViewer/components/VideoPosterProps.js +2 -0
  419. package/dist/Components/MediaViewer/components/ViewerIconButton.d.ts +5 -0
  420. package/dist/Components/MediaViewer/components/ViewerIconButton.js +22 -0
  421. package/dist/Components/MediaViewer/components/ViewerIconButtonProps.d.ts +24 -0
  422. package/dist/Components/MediaViewer/components/ViewerIconButtonProps.js +2 -0
  423. package/dist/Components/MediaViewer/components/mediaKindIcon.d.ts +5 -0
  424. package/dist/Components/MediaViewer/components/mediaKindIcon.js +23 -0
  425. package/dist/Components/MediaViewer/components/sanitizeDocxHrefs.d.ts +1 -0
  426. package/dist/Components/MediaViewer/components/sanitizeDocxHrefs.js +30 -0
  427. package/dist/Components/MediaViewer/hooks/useAutoHideChrome.d.ts +15 -0
  428. package/dist/Components/MediaViewer/hooks/useAutoHideChrome.js +43 -0
  429. package/dist/Components/MediaViewer/hooks/useFileViewer.d.ts +20 -0
  430. package/dist/Components/MediaViewer/hooks/useFileViewer.js +51 -0
  431. package/dist/Components/MediaViewer/mediaItems.d.ts +90 -0
  432. package/dist/Components/MediaViewer/mediaItems.js +206 -0
  433. package/dist/Components/MediaViewer/useViewerChrome.d.ts +15 -0
  434. package/dist/Components/MediaViewer/useViewerChrome.js +30 -0
  435. package/dist/Components/Modal/Modal.d.ts +9 -11
  436. package/dist/Components/Modal/Modal.js +16 -23
  437. package/dist/Components/Modal/ModalProps.d.ts +26 -2
  438. package/dist/Components/Modal/dialogNaming.d.ts +8 -0
  439. package/dist/Components/Modal/dialogNaming.js +21 -0
  440. package/dist/Components/Modal/warnDroppedSlotChildren.d.ts +2 -0
  441. package/dist/Components/Modal/warnDroppedSlotChildren.js +49 -0
  442. package/dist/Components/MoreItems/MoreItems.d.ts +1 -0
  443. package/dist/Components/MoreItems/MoreItems.js +8 -3
  444. package/dist/Components/MoreItems/MoreItemsProps.d.ts +6 -2
  445. package/dist/Components/MultiSelect/MultiSelect.d.ts +2 -1
  446. package/dist/Components/MultiSelect/MultiSelect.js +41 -28
  447. package/dist/Components/MultiSelect/MultiSelectProps.d.ts +28 -3
  448. package/dist/Components/NavLauncher/LauncherTabs.d.ts +18 -0
  449. package/dist/Components/NavLauncher/LauncherTabs.js +65 -0
  450. package/dist/Components/NavLauncher/NavLauncher.d.ts +3 -0
  451. package/dist/Components/NavLauncher/NavLauncher.js +837 -0
  452. package/dist/Components/NavLauncher/NavLauncherProps.d.ts +342 -0
  453. package/dist/Components/NavLauncher/NavLauncherProps.js +2 -0
  454. package/dist/Components/NavLauncher/NewTabLink.d.ts +3 -0
  455. package/dist/Components/NavLauncher/NewTabLink.js +18 -0
  456. package/dist/Components/NavLauncher/PinToggle.d.ts +3 -0
  457. package/dist/Components/NavLauncher/PinToggle.js +21 -0
  458. package/dist/Components/NavLauncher/ScopeBar.d.ts +14 -0
  459. package/dist/Components/NavLauncher/ScopeBar.js +139 -0
  460. package/dist/Components/NavLauncher/engine/distance.d.ts +4 -0
  461. package/dist/Components/NavLauncher/engine/distance.js +41 -0
  462. package/dist/Components/NavLauncher/engine/engine.d.ts +103 -0
  463. package/dist/Components/NavLauncher/engine/engine.js +472 -0
  464. package/dist/Components/NavLauncher/engine/fold.d.ts +15 -0
  465. package/dist/Components/NavLauncher/engine/fold.js +84 -0
  466. package/dist/Components/NavLauncher/engine/index.d.ts +21 -0
  467. package/dist/Components/NavLauncher/engine/index.js +17 -0
  468. package/dist/Components/NavLauncher/launcherMotion.d.ts +19 -0
  469. package/dist/Components/NavLauncher/launcherMotion.js +15 -0
  470. package/dist/Components/NavLauncher/launcherParts.d.ts +169 -0
  471. package/dist/Components/NavLauncher/launcherParts.js +258 -0
  472. package/dist/Components/NavLauncher/match.d.ts +98 -0
  473. package/dist/Components/NavLauncher/match.js +192 -0
  474. package/dist/Components/NavLauncher/resultNavigation.d.ts +3 -0
  475. package/dist/Components/NavLauncher/resultNavigation.js +65 -0
  476. package/dist/Components/NavLauncher/revealStyles.d.ts +4 -0
  477. package/dist/Components/NavLauncher/revealStyles.js +19 -0
  478. package/dist/Components/NavLauncher/searchLayout.d.ts +61 -0
  479. package/dist/Components/NavLauncher/searchLayout.js +110 -0
  480. package/dist/Components/NavLauncher/spotlight.d.ts +39 -0
  481. package/dist/Components/NavLauncher/spotlight.js +202 -0
  482. package/dist/Components/NavLauncher/spotlightParts.d.ts +53 -0
  483. package/dist/Components/NavLauncher/spotlightParts.js +121 -0
  484. package/dist/Components/NavLauncher/useCopiedFlash.d.ts +6 -0
  485. package/dist/Components/NavLauncher/useCopiedFlash.js +21 -0
  486. package/dist/Components/NavigationBar/NavigationBar.d.ts +2 -1
  487. package/dist/Components/NavigationBar/NavigationBar.js +26 -20
  488. package/dist/Components/NavigationBar/NavigationBarProps.d.ts +21 -0
  489. package/dist/Components/NoteTextArea/NoteTextArea.d.ts +4 -1
  490. package/dist/Components/NoteTextArea/NoteTextArea.js +32 -17
  491. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +23 -4
  492. package/dist/Components/Notification/Notification.d.ts +1 -0
  493. package/dist/Components/Notification/Notification.js +37 -16
  494. package/dist/Components/Notification/NotificationProps.d.ts +22 -0
  495. package/dist/Components/NotificationBell/NotificationBell.d.ts +4 -0
  496. package/dist/Components/NotificationBell/NotificationBell.js +39 -0
  497. package/dist/Components/NotificationBell/NotificationBellProps.d.ts +174 -0
  498. package/dist/Components/NotificationBell/NotificationBellProps.js +2 -0
  499. package/dist/Components/NotificationBell/NotificationItem.d.ts +4 -0
  500. package/dist/Components/NotificationBell/NotificationItem.js +34 -0
  501. package/dist/Components/NotificationBell/NotificationList.d.ts +4 -0
  502. package/dist/Components/NotificationBell/NotificationList.js +41 -0
  503. package/dist/Components/NotificationBell/NotificationPanel.d.ts +4 -0
  504. package/dist/Components/NotificationBell/NotificationPanel.js +37 -0
  505. package/dist/Components/NotificationBell/index.d.ts +6 -0
  506. package/dist/Components/NotificationBell/index.js +30 -0
  507. package/dist/Components/NotificationBell/notificationHelpers.d.ts +60 -0
  508. package/dist/Components/NotificationBell/notificationHelpers.js +121 -0
  509. package/dist/Components/NumberInput/NumberInput.d.ts +6 -1
  510. package/dist/Components/NumberInput/NumberInput.js +9 -2
  511. package/dist/Components/NumberInput/NumberInput.styles.js +19 -79
  512. package/dist/Components/NumberInput/NumberInputProps.d.ts +23 -1
  513. package/dist/Components/OffersList/OffersList.d.ts +4 -0
  514. package/dist/Components/OffersList/OffersList.js +86 -0
  515. package/dist/Components/OffersList/OffersListProps.d.ts +45 -0
  516. package/dist/Components/OffersList/OffersListProps.js +2 -0
  517. package/dist/Components/OptionChip/OptionChip.d.ts +4 -0
  518. package/dist/Components/OptionChip/OptionChip.js +99 -0
  519. package/dist/Components/OptionChip/OptionChipProps.d.ts +38 -0
  520. package/dist/Components/OptionChip/OptionChipProps.js +2 -0
  521. package/dist/Components/OptionChip/optionInk.d.ts +12 -0
  522. package/dist/Components/OptionChip/optionInk.js +27 -0
  523. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.d.ts +4 -0
  524. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +59 -0
  525. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.d.ts +39 -0
  526. package/dist/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +2 -0
  527. package/dist/Components/OrderSummary/OrderSummary.d.ts +4 -0
  528. package/dist/Components/OrderSummary/OrderSummary.js +63 -0
  529. package/dist/Components/OrderSummary/OrderSummaryProps.d.ts +63 -0
  530. package/dist/Components/OrderSummary/OrderSummaryProps.js +2 -0
  531. package/dist/Components/OrgSwitcher/OrgSwitcher.d.ts +1 -0
  532. package/dist/Components/OrgSwitcher/OrgSwitcher.js +51 -30
  533. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +13 -3
  534. package/dist/Components/OrgSwitcher/OrgSwitcherProps.js +3 -1
  535. package/dist/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  536. package/dist/Components/OrganizationDetails/DeleteOrgModal.js +4 -6
  537. package/dist/Components/OrganizationDetails/OrganizationDetails.d.ts +1 -0
  538. package/dist/Components/OrganizationDetails/OrganizationDetails.js +19 -11
  539. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +72 -5
  540. package/dist/Components/PageHeader/PageHeader.d.ts +4 -0
  541. package/dist/Components/PageHeader/PageHeader.js +18 -0
  542. package/dist/Components/PageHeader/PageHeaderProps.d.ts +29 -0
  543. package/dist/Components/PageHeader/PageHeaderProps.js +2 -0
  544. package/dist/Components/Pagination/Pagination.d.ts +5 -0
  545. package/dist/Components/Pagination/Pagination.js +48 -0
  546. package/dist/Components/Pagination/PaginationProps.d.ts +50 -0
  547. package/dist/Components/Pagination/PaginationProps.js +9 -0
  548. package/dist/Components/Pagination/pageWindow.d.ts +4 -0
  549. package/dist/Components/Pagination/pageWindow.js +22 -0
  550. package/dist/Components/PaymentOption/PaymentOption.d.ts +4 -0
  551. package/dist/Components/PaymentOption/PaymentOption.js +24 -0
  552. package/dist/Components/PaymentOption/PaymentOptionGroup.d.ts +4 -0
  553. package/dist/Components/PaymentOption/PaymentOptionGroup.js +7 -0
  554. package/dist/Components/PaymentOption/PaymentOptionProps.d.ts +41 -0
  555. package/dist/Components/PaymentOption/PaymentOptionProps.js +2 -0
  556. package/dist/Components/PdfViewer/PdfViewer.d.ts +23 -4
  557. package/dist/Components/PdfViewer/PdfViewer.js +130 -3
  558. package/dist/Components/PersonChip/PersonChip.d.ts +3 -0
  559. package/dist/Components/PersonChip/PersonChip.js +47 -0
  560. package/dist/Components/PersonChip/PersonChipProps.d.ts +33 -0
  561. package/dist/Components/PersonChip/PersonChipProps.js +2 -0
  562. package/dist/Components/PinInput/PinInput.d.ts +2 -1
  563. package/dist/Components/PinInput/PinInput.js +26 -9
  564. package/dist/Components/PinInput/PinInputProps.d.ts +11 -0
  565. package/dist/Components/PinInput/pinInputCellSize.d.ts +7 -0
  566. package/dist/Components/PinInput/pinInputCellSize.js +10 -0
  567. package/dist/Components/PincodeChecker/PincodeChecker.d.ts +4 -0
  568. package/dist/Components/PincodeChecker/PincodeChecker.js +175 -0
  569. package/dist/Components/PincodeChecker/PincodeCheckerProps.d.ts +70 -0
  570. package/dist/Components/PincodeChecker/PincodeCheckerProps.js +2 -0
  571. package/dist/Components/PlanBadge/PlanBadge.d.ts +0 -7
  572. package/dist/Components/PlanBadge/PlanBadge.js +1 -7
  573. package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +3 -1
  574. package/dist/Components/PlanPill/PlanPill.d.ts +1 -0
  575. package/dist/Components/PlanPill/PlanPill.js +8 -5
  576. package/dist/Components/PlanPill/PlanPillProps.d.ts +4 -1
  577. package/dist/Components/PlanPill/planPillGradient.d.ts +5 -21
  578. package/dist/Components/PlanPill/planPillGradient.js +8 -23
  579. package/dist/Components/PriceBlock/PriceBlock.d.ts +4 -0
  580. package/dist/Components/PriceBlock/PriceBlock.js +41 -0
  581. package/dist/Components/PriceBlock/PriceBlockProps.d.ts +45 -0
  582. package/dist/Components/PriceBlock/PriceBlockProps.js +2 -0
  583. package/dist/Components/Primitives/Primitives.d.ts +3 -0
  584. package/dist/Components/Primitives/Primitives.js +74 -0
  585. package/dist/Components/ProductBadges/ProductBadges.d.ts +4 -0
  586. package/dist/Components/ProductBadges/ProductBadges.js +62 -0
  587. package/dist/Components/ProductBadges/ProductBadgesProps.d.ts +21 -0
  588. package/dist/Components/ProductBadges/ProductBadgesProps.js +2 -0
  589. package/dist/Components/ProductCard/ProductCard.d.ts +3 -2
  590. package/dist/Components/ProductCard/ProductCard.js +107 -51
  591. package/dist/Components/ProductCard/ProductCardAction.d.ts +17 -0
  592. package/dist/Components/ProductCard/ProductCardAction.js +66 -0
  593. package/dist/Components/ProductCard/ProductCardGrid.d.ts +4 -0
  594. package/dist/Components/ProductCard/ProductCardGrid.js +20 -0
  595. package/dist/Components/ProductCard/ProductCardMedia.d.ts +18 -0
  596. package/dist/Components/ProductCard/ProductCardMedia.js +35 -0
  597. package/dist/Components/ProductCard/ProductCardProps.d.ts +148 -46
  598. package/dist/Components/ProductCard/ProductCardSkeleton.d.ts +4 -0
  599. package/dist/Components/ProductCard/ProductCardSkeleton.js +17 -0
  600. package/dist/Components/ProductCard/ProductCardSwatches.d.ts +15 -0
  601. package/dist/Components/ProductCard/ProductCardSwatches.js +39 -0
  602. package/dist/Components/ProductCard/QuickAddSheet.d.ts +4 -0
  603. package/dist/Components/ProductCard/QuickAddSheet.js +109 -0
  604. package/dist/Components/ProductCard/QuickAddSheetProps.d.ts +46 -0
  605. package/dist/Components/ProductCard/QuickAddSheetProps.js +2 -0
  606. package/dist/Components/ProductCard/cardLabels.d.ts +2 -0
  607. package/dist/Components/ProductCard/cardLabels.js +16 -0
  608. package/dist/Components/ProductCard/cardMetrics.d.ts +28 -0
  609. package/dist/Components/ProductCard/cardMetrics.js +60 -0
  610. package/dist/Components/ProductCard/productCardModel.d.ts +22 -0
  611. package/dist/Components/ProductCard/productCardModel.js +79 -0
  612. package/dist/Components/ProductDetails/ProductDetails.d.ts +3 -2
  613. package/dist/Components/ProductDetails/ProductDetails.js +211 -33
  614. package/dist/Components/ProductDetails/ProductDetailsProps.d.ts +169 -34
  615. package/dist/Components/ProductDetails/productDetailsModel.d.ts +14 -0
  616. package/dist/Components/ProductDetails/productDetailsModel.js +45 -0
  617. package/dist/Components/ProductDetails/useInViewport.d.ts +3 -0
  618. package/dist/Components/ProductDetails/useInViewport.js +18 -0
  619. package/dist/Components/ProfileCard/ProfileCard.d.ts +5 -10
  620. package/dist/Components/ProfileCard/ProfileCard.js +16 -15
  621. package/dist/Components/ProfileCard/ProfileCardProps.d.ts +21 -1
  622. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.d.ts +1 -0
  623. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +31 -13
  624. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewerProps.d.ts +9 -1
  625. package/dist/Components/ProgressBar/ProgressBar.d.ts +2 -1
  626. package/dist/Components/ProgressBar/ProgressBar.js +29 -3
  627. package/dist/Components/ProgressBar/ProgressBarProps.d.ts +10 -2
  628. package/dist/Components/QuantityStepper/QuantityStepper.d.ts +4 -0
  629. package/dist/Components/QuantityStepper/QuantityStepper.js +63 -0
  630. package/dist/Components/QuantityStepper/QuantityStepperProps.d.ts +33 -0
  631. package/dist/Components/QuantityStepper/QuantityStepperProps.js +2 -0
  632. package/dist/Components/QueryState/ErrorState.d.ts +4 -0
  633. package/dist/Components/QueryState/ErrorState.js +16 -0
  634. package/dist/Components/QueryState/QueryStateBoundary.d.ts +4 -0
  635. package/dist/Components/QueryState/QueryStateBoundary.js +35 -0
  636. package/dist/Components/QueryState/QueryStateProps.d.ts +71 -0
  637. package/dist/Components/QueryState/QueryStateProps.js +2 -0
  638. package/dist/Components/RadioButton/RadioButton.d.ts +12 -3
  639. package/dist/Components/RadioButton/RadioButton.js +38 -15
  640. package/dist/Components/RadioButton/RadioButtonProps.d.ts +50 -4
  641. package/dist/Components/RangeSlider/RangeSlider.d.ts +4 -0
  642. package/dist/Components/RangeSlider/RangeSlider.js +136 -0
  643. package/dist/Components/RangeSlider/RangeSliderProps.d.ts +74 -0
  644. package/dist/Components/RangeSlider/RangeSliderProps.js +2 -0
  645. package/dist/Components/RangeSlider/rangeSliderColors.d.ts +9 -0
  646. package/dist/Components/RangeSlider/rangeSliderColors.js +11 -0
  647. package/dist/Components/RangeSlider/rangeSliderMath.d.ts +16 -0
  648. package/dist/Components/RangeSlider/rangeSliderMath.js +79 -0
  649. package/dist/Components/RangeSlider/rangeSliderSize.d.ts +7 -0
  650. package/dist/Components/RangeSlider/rangeSliderSize.js +12 -0
  651. package/dist/Components/Rating/Rating.d.ts +4 -0
  652. package/dist/Components/Rating/Rating.js +82 -0
  653. package/dist/Components/Rating/RatingProps.d.ts +29 -0
  654. package/dist/Components/Rating/RatingProps.js +2 -0
  655. package/dist/Components/Reorder/Reorder.d.ts +2 -5
  656. package/dist/Components/Reorder/Reorder.js +4 -2
  657. package/dist/Components/Reorder/ReorderProps.d.ts +12 -0
  658. package/dist/Components/ReviewList/ReviewList.d.ts +4 -0
  659. package/dist/Components/ReviewList/ReviewList.js +94 -0
  660. package/dist/Components/ReviewList/ReviewListProps.d.ts +89 -0
  661. package/dist/Components/ReviewList/ReviewListProps.js +2 -0
  662. package/dist/Components/ReviewSummary/ReviewSummary.d.ts +4 -0
  663. package/dist/Components/ReviewSummary/ReviewSummary.js +47 -0
  664. package/dist/Components/ReviewSummary/ReviewSummaryProps.d.ts +38 -0
  665. package/dist/Components/ReviewSummary/ReviewSummaryProps.js +2 -0
  666. package/dist/Components/RolesPermission/DeleteRoleModal.js +4 -6
  667. package/dist/Components/RolesPermission/RolesPermission.d.ts +1 -0
  668. package/dist/Components/RolesPermission/RolesPermission.js +17 -11
  669. package/dist/Components/RolesPermission/RolesPermissionProps.d.ts +74 -1
  670. package/dist/Components/SaveBar/SaveBar.d.ts +4 -0
  671. package/dist/Components/SaveBar/SaveBar.js +24 -0
  672. package/dist/Components/SaveBar/SaveBarProps.d.ts +22 -0
  673. package/dist/Components/SaveBar/SaveBarProps.js +2 -0
  674. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +4 -2
  675. package/dist/Components/ScrollToTop/ScrollToTop.js +10 -3
  676. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +10 -0
  677. package/dist/Components/ScrollbarBox/ScrollbarBox.js +10 -3
  678. package/dist/Components/Search/Search.d.ts +3 -1
  679. package/dist/Components/Search/Search.js +34 -21
  680. package/dist/Components/Search/SearchProps.d.ts +26 -2
  681. package/dist/Components/Search/ctrlShortcut.d.ts +1 -0
  682. package/dist/Components/Search/ctrlShortcut.js +29 -0
  683. package/dist/Components/SearchSelect/SearchSelect.d.ts +3 -1
  684. package/dist/Components/SearchSelect/SearchSelect.js +292 -139
  685. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +63 -0
  686. package/dist/Components/SearchSelect/searchSelectNav.d.ts +13 -0
  687. package/dist/Components/SearchSelect/searchSelectNav.js +40 -0
  688. package/dist/Components/SearchSelect/searchSelectSize.d.ts +4 -19
  689. package/dist/Components/SearchSelect/searchSelectSize.js +15 -27
  690. package/dist/Components/SectionRail/SectionRail.d.ts +4 -0
  691. package/dist/Components/SectionRail/SectionRail.js +50 -0
  692. package/dist/Components/SectionRail/SectionRailProps.d.ts +27 -0
  693. package/dist/Components/SectionRail/SectionRailProps.js +2 -0
  694. package/dist/Components/SectionRail/index.d.ts +2 -0
  695. package/dist/Components/SectionRail/index.js +8 -0
  696. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +9 -0
  697. package/dist/Components/SegmentedControl/SegmentedControl.js +124 -0
  698. package/dist/Components/SegmentedControl/SegmentedControlProps.d.ts +43 -0
  699. package/dist/Components/SegmentedControl/SegmentedControlProps.js +2 -0
  700. package/dist/Components/SegmentedControl/segmentedInk.d.ts +11 -0
  701. package/dist/Components/SegmentedControl/segmentedInk.js +26 -0
  702. package/dist/Components/SegmentedControl/useSlidingPill.d.ts +13 -0
  703. package/dist/Components/SegmentedControl/useSlidingPill.js +30 -0
  704. package/dist/Components/Select/Select.d.ts +5 -2
  705. package/dist/Components/Select/Select.js +71 -22
  706. package/dist/Components/Select/Select.styles.js +30 -75
  707. package/dist/Components/Select/SelectNative.d.ts +91 -0
  708. package/dist/Components/Select/SelectNative.js +56 -0
  709. package/dist/Components/Select/SelectPopup.d.ts +5 -0
  710. package/dist/Components/Select/SelectPopup.js +624 -0
  711. package/dist/Components/Select/SelectProps.d.ts +198 -10
  712. package/dist/Components/Select/groupedWindow.d.ts +21 -0
  713. package/dist/Components/Select/groupedWindow.js +50 -0
  714. package/dist/Components/Select/optionRowInk.d.ts +19 -0
  715. package/dist/Components/Select/optionRowInk.js +26 -0
  716. package/dist/Components/Select/selectKeyboardRing.d.ts +2 -0
  717. package/dist/Components/Select/selectKeyboardRing.js +7 -0
  718. package/dist/Components/Select/selectRowInk.d.ts +14 -0
  719. package/dist/Components/Select/selectRowInk.js +41 -0
  720. package/dist/Components/SelectSearch/SelectSearch.d.ts +2 -1
  721. package/dist/Components/SelectSearch/SelectSearch.js +92 -119
  722. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +43 -0
  723. package/dist/Components/SelectV2/SelectV2.d.ts +8 -2
  724. package/dist/Components/SelectV2/SelectV2.js +10 -251
  725. package/dist/Components/SelectV2/SelectV2Props.d.ts +51 -13
  726. package/dist/Components/SettingRow/SettingRow.d.ts +4 -0
  727. package/dist/Components/SettingRow/SettingRow.js +25 -0
  728. package/dist/Components/SettingRow/SettingRowProps.d.ts +16 -0
  729. package/dist/Components/SettingRow/SettingRowProps.js +2 -0
  730. package/dist/Components/SettingRow/SettingsSection.d.ts +4 -0
  731. package/dist/Components/SettingRow/SettingsSection.js +17 -0
  732. package/dist/Components/SettingRow/SettingsSectionProps.d.ts +18 -0
  733. package/dist/Components/SettingRow/SettingsSectionProps.js +2 -0
  734. package/dist/Components/SideBar/SecondaryBar.d.ts +1 -0
  735. package/dist/Components/SideBar/SecondaryBar.js +33 -10
  736. package/dist/Components/SideBar/SideBar.d.ts +2 -1
  737. package/dist/Components/SideBar/SideBar.js +159 -49
  738. package/dist/Components/SideBar/SideBarProps.d.ts +113 -24
  739. package/dist/Components/SideBar/components/MenuItemBox.d.ts +10 -2
  740. package/dist/Components/SideBar/components/MenuItemBox.js +114 -44
  741. package/dist/Components/SideBar/components/MenuItems.d.ts +2 -2
  742. package/dist/Components/SideBar/components/MenuItems.js +7 -7
  743. package/dist/Components/SideBar/components/MenuPopoverContent.js +32 -13
  744. package/dist/Components/SideBar/components/OtherApps.js +9 -3
  745. package/dist/Components/SideBar/components/OverflowTooltipText.js +7 -6
  746. package/dist/Components/SideBar/components/PinnedSection.d.ts +17 -0
  747. package/dist/Components/SideBar/components/PinnedSection.js +101 -0
  748. package/dist/Components/SideBar/components/TextTruncation.js +13 -6
  749. package/dist/Components/SideBar/menuDisabled.d.ts +5 -0
  750. package/dist/Components/SideBar/menuDisabled.js +7 -0
  751. package/dist/Components/SideBar/sidebarAccentColors.d.ts +2 -0
  752. package/dist/Components/SideBar/sidebarFocus.d.ts +23 -0
  753. package/dist/Components/SideBar/sidebarFocus.js +20 -0
  754. package/dist/Components/SideBar/sidebarId.d.ts +2 -0
  755. package/dist/Components/SideBar/sidebarId.js +6 -0
  756. package/dist/Components/SideBar/sidebarMotion.d.ts +2 -0
  757. package/dist/Components/SideBar/sidebarMotion.js +6 -0
  758. package/dist/Components/SideBar/sidebarScale.d.ts +15 -0
  759. package/dist/Components/SideBar/sidebarScale.js +19 -0
  760. package/dist/Components/SignInActivityTable/SignInActivityTable.d.ts +1 -0
  761. package/dist/Components/SignInActivityTable/SignInActivityTable.js +13 -5
  762. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +13 -0
  763. package/dist/Components/SignInActivityTable/scrollRegionRing.d.ts +10 -0
  764. package/dist/Components/SignInActivityTable/scrollRegionRing.js +14 -0
  765. package/dist/Components/Skeletons/SkeletonProps.d.ts +12 -1
  766. package/dist/Components/Skeletons/Skeletons.d.ts +2 -1
  767. package/dist/Components/Skeletons/Skeletons.js +5 -2
  768. package/dist/Components/SkipLink/SkipLink.d.ts +4 -0
  769. package/dist/Components/SkipLink/SkipLink.js +54 -0
  770. package/dist/Components/SkipLink/SkipLinkProps.d.ts +8 -0
  771. package/dist/Components/SkipLink/SkipLinkProps.js +2 -0
  772. package/dist/Components/Slider/Slider.d.ts +5 -0
  773. package/dist/Components/Slider/Slider.js +22 -5
  774. package/dist/Components/SpecTable/SpecTable.d.ts +4 -0
  775. package/dist/Components/SpecTable/SpecTable.js +40 -0
  776. package/dist/Components/SpecTable/SpecTableProps.d.ts +34 -0
  777. package/dist/Components/SpecTable/SpecTableProps.js +2 -0
  778. package/dist/Components/Spinner/Spinner.d.ts +3 -0
  779. package/dist/Components/Spinner/Spinner.js +22 -0
  780. package/dist/Components/Spinner/SpinnerProps.d.ts +17 -0
  781. package/dist/Components/Spinner/SpinnerProps.js +2 -0
  782. package/dist/Components/StageProgress/StageItem.d.ts +1 -0
  783. package/dist/Components/StageProgress/StageItem.js +19 -9
  784. package/dist/Components/StageProgress/StageProgress.d.ts +1 -0
  785. package/dist/Components/StageProgress/StageProgress.js +15 -8
  786. package/dist/Components/StageProgress/StageProgressProps.d.ts +59 -6
  787. package/dist/Components/StageProgress/StageProgressProps.js +12 -6
  788. package/dist/Components/StageProgress/StepperStage.d.ts +1 -0
  789. package/dist/Components/StageProgress/StepperStage.js +15 -10
  790. package/dist/Components/StageProgress/centerInStrip.d.ts +2 -0
  791. package/dist/Components/StageProgress/centerInStrip.js +15 -0
  792. package/dist/Components/StatCard/StatCard.d.ts +4 -0
  793. package/dist/Components/StatCard/StatCard.js +48 -0
  794. package/dist/Components/StatCard/StatCardProps.d.ts +34 -0
  795. package/dist/Components/StatCard/StatCardProps.js +2 -0
  796. package/dist/Components/StatusTag/StatusTag.d.ts +4 -0
  797. package/dist/Components/StatusTag/StatusTag.js +24 -0
  798. package/dist/Components/StatusTag/StatusTagProps.d.ts +24 -0
  799. package/dist/Components/StatusTag/StatusTagProps.js +2 -0
  800. package/dist/Components/StickyBuyBar/StickyBuyBar.d.ts +4 -0
  801. package/dist/Components/StickyBuyBar/StickyBuyBar.js +87 -0
  802. package/dist/Components/StickyBuyBar/StickyBuyBarProps.d.ts +60 -0
  803. package/dist/Components/StickyBuyBar/StickyBuyBarProps.js +2 -0
  804. package/dist/Components/StockStatus/StockStatus.d.ts +4 -0
  805. package/dist/Components/StockStatus/StockStatus.js +31 -0
  806. package/dist/Components/StockStatus/StockStatusProps.d.ts +16 -0
  807. package/dist/Components/StockStatus/StockStatusProps.js +2 -0
  808. package/dist/Components/Switch/Switch.d.ts +2 -1
  809. package/dist/Components/Switch/Switch.js +13 -8
  810. package/dist/Components/Switch/SwitchProps.d.ts +11 -0
  811. package/dist/Components/Table/Table.d.ts +2 -1
  812. package/dist/Components/Table/Table.js +94 -56
  813. package/dist/Components/Table/TableProps.d.ts +141 -6
  814. package/dist/Components/Table/columnLabel.d.ts +6 -0
  815. package/dist/Components/Table/columnLabel.js +27 -0
  816. package/dist/Components/Table/components/HeaderActions.js +8 -5
  817. package/dist/Components/Table/components/Pagination.d.ts +2 -2
  818. package/dist/Components/Table/components/Pagination.js +19 -8
  819. package/dist/Components/Table/components/TableActions.js +41 -24
  820. package/dist/Components/Table/components/TableBody.d.ts +2 -1
  821. package/dist/Components/Table/components/TableBody.js +226 -105
  822. package/dist/Components/Table/components/TableGroupRow.js +2 -1
  823. package/dist/Components/Table/components/TableHeader.d.ts +1 -1
  824. package/dist/Components/Table/components/TableHeader.js +52 -34
  825. package/dist/Components/Table/components/TableLoading.d.ts +4 -1
  826. package/dist/Components/Table/components/TableLoading.js +13 -6
  827. package/dist/Components/Table/components/TableSearch.js +1 -1
  828. package/dist/Components/Table/components/rowDetail.d.ts +32 -0
  829. package/dist/Components/Table/components/rowDetail.js +21 -0
  830. package/dist/Components/Table/components/rowFocusRing.d.ts +21 -0
  831. package/dist/Components/Table/components/rowFocusRing.js +20 -0
  832. package/dist/Components/Table/components/rowMeasurer.d.ts +8 -0
  833. package/dist/Components/Table/components/rowMeasurer.js +71 -0
  834. package/dist/Components/Table/components/rowMetrics.d.ts +11 -0
  835. package/dist/Components/Table/components/rowMetrics.js +16 -0
  836. package/dist/Components/Table/filters/ActiveFilters.js +12 -5
  837. package/dist/Components/Table/filters/CompactSelect.d.ts +1 -0
  838. package/dist/Components/Table/filters/CompactSelect.js +25 -8
  839. package/dist/Components/Table/filters/FilterDatePicker.d.ts +6 -0
  840. package/dist/Components/Table/filters/FilterDatePicker.js +61 -0
  841. package/dist/Components/Table/filters/LeftFilterPane.d.ts +10 -1
  842. package/dist/Components/Table/filters/LeftFilterPane.js +14 -6
  843. package/dist/Components/Table/filters/SelectOperationControls.js +9 -1
  844. package/dist/Components/Table/filters/TableFilters.js +3 -13
  845. package/dist/Components/Table/filters/TextOperationControls.js +8 -1
  846. package/dist/Components/Table/hooks/useRowExpansion.d.ts +7 -0
  847. package/dist/Components/Table/hooks/useRowExpansion.js +27 -0
  848. package/dist/Components/Table/hooks/useTable.d.ts +7 -11
  849. package/dist/Components/Table/hooks/useTable.js +85 -48
  850. package/dist/Components/Table/settings/ManageColumns.js +17 -11
  851. package/dist/Components/Table/settings/TableSettings.js +17 -8
  852. package/dist/Components/Table/variants/TableVariantContext.d.ts +4 -0
  853. package/dist/Components/Table/variants/TableVariantContext.js +17 -0
  854. package/dist/Components/Table/variants/classic.d.ts +6 -0
  855. package/dist/Components/Table/variants/classic.js +50 -0
  856. package/dist/Components/Table/variants/index.d.ts +7 -0
  857. package/dist/Components/Table/variants/index.js +27 -0
  858. package/dist/Components/Table/variants/pillInk.d.ts +6 -0
  859. package/dist/Components/Table/variants/pillInk.js +21 -0
  860. package/dist/Components/Table/variants/stripe.d.ts +3 -0
  861. package/dist/Components/Table/variants/stripe.js +7 -0
  862. package/dist/Components/Table/variants/studio.d.ts +6 -0
  863. package/dist/Components/Table/variants/studio.js +52 -0
  864. package/dist/Components/Table/variants/tokens.d.ts +55 -0
  865. package/dist/Components/Table/variants/tokens.js +2 -0
  866. package/dist/Components/Tabs/Tabs.d.ts +4 -0
  867. package/dist/Components/Tabs/Tabs.js +84 -0
  868. package/dist/Components/Tabs/TabsContext.d.ts +36 -0
  869. package/dist/Components/Tabs/TabsContext.js +16 -0
  870. package/dist/Components/Tabs/TabsProps.d.ts +96 -0
  871. package/dist/Components/Tabs/TabsProps.js +2 -0
  872. package/dist/Components/Tabs/components/CountBadge.d.ts +17 -0
  873. package/dist/Components/Tabs/components/CountBadge.js +17 -0
  874. package/dist/Components/Tabs/components/Tab.d.ts +4 -0
  875. package/dist/Components/Tabs/components/Tab.js +22 -0
  876. package/dist/Components/Tabs/components/TabLinkList.d.ts +7 -0
  877. package/dist/Components/Tabs/components/TabLinkList.js +34 -0
  878. package/dist/Components/Tabs/components/TabList.d.ts +4 -0
  879. package/dist/Components/Tabs/components/TabList.js +87 -0
  880. package/dist/Components/Tabs/components/TabPanel.d.ts +4 -0
  881. package/dist/Components/Tabs/components/TabPanel.js +18 -0
  882. package/dist/Components/Tabs/components/TabPanels.d.ts +4 -0
  883. package/dist/Components/Tabs/components/TabPanels.js +15 -0
  884. package/dist/Components/Tabs/index.d.ts +6 -0
  885. package/dist/Components/Tabs/index.js +16 -0
  886. package/dist/Components/Tabs/tabStyles.d.ts +19 -0
  887. package/dist/Components/Tabs/tabStyles.js +40 -0
  888. package/dist/Components/Tabs/useTabAppearance.d.ts +17 -0
  889. package/dist/Components/Tabs/useTabAppearance.js +67 -0
  890. package/dist/Components/Tag/Tag.d.ts +2 -1
  891. package/dist/Components/Tag/Tag.js +31 -8
  892. package/dist/Components/Tag/Tag.styles.d.ts +2 -0
  893. package/dist/Components/Tag/Tag.styles.js +51 -36
  894. package/dist/Components/Tag/TagProps.d.ts +31 -1
  895. package/dist/Components/Tag/tagDot.d.ts +3 -0
  896. package/dist/Components/Tag/tagDot.js +28 -0
  897. package/dist/Components/TagInput/TagInput.d.ts +4 -0
  898. package/dist/Components/TagInput/TagInput.js +101 -0
  899. package/dist/Components/TagInput/TagInputProps.d.ts +63 -0
  900. package/dist/Components/TagInput/TagInputProps.js +2 -0
  901. package/dist/Components/TagInput/tagEntries.d.ts +21 -0
  902. package/dist/Components/TagInput/tagEntries.js +58 -0
  903. package/dist/Components/TimePicker/TimePicker.d.ts +4 -0
  904. package/dist/Components/TimePicker/TimePicker.js +55 -0
  905. package/dist/Components/TimePicker/TimePickerProps.d.ts +48 -0
  906. package/dist/Components/TimePicker/TimePickerProps.js +2 -0
  907. package/dist/Components/TimePicker/timeParts.d.ts +10 -0
  908. package/dist/Components/TimePicker/timeParts.js +36 -0
  909. package/dist/Components/Timeline/Timeline.d.ts +2 -1
  910. package/dist/Components/Timeline/Timeline.js +59 -33
  911. package/dist/Components/Timeline/TimelineProps.d.ts +37 -0
  912. package/dist/Components/Toaster/Toaster.d.ts +1 -0
  913. package/dist/Components/Toaster/Toaster.js +90 -58
  914. package/dist/Components/Toaster/ToasterProps.d.ts +20 -4
  915. package/dist/Components/Toaster/toastDuration.d.ts +4 -0
  916. package/dist/Components/Toaster/toastDuration.js +7 -0
  917. package/dist/Components/Toggle/TableToggle.d.ts +1 -0
  918. package/dist/Components/Toggle/TableToggle.js +66 -19
  919. package/dist/Components/Toggle/TableToggleProps.d.ts +9 -0
  920. package/dist/Components/ToggleSwitch/ToggleSwitch.d.ts +4 -0
  921. package/dist/Components/ToggleSwitch/ToggleSwitch.js +54 -0
  922. package/dist/Components/ToggleSwitch/ToggleSwitchProps.d.ts +70 -0
  923. package/dist/Components/ToggleSwitch/ToggleSwitchProps.js +2 -0
  924. package/dist/Components/ToolTip/OverflowToolTip.d.ts +1 -15
  925. package/dist/Components/ToolTip/OverflowToolTip.js +1 -15
  926. package/dist/Components/ToolTip/ToolTip.d.ts +1 -0
  927. package/dist/Components/ToolTip/ToolTip.js +99 -20
  928. package/dist/Components/ToolTip/ToolTipProps.d.ts +9 -1
  929. package/dist/Components/TrustBadges/TrustBadges.d.ts +4 -0
  930. package/dist/Components/TrustBadges/TrustBadges.js +24 -0
  931. package/dist/Components/TrustBadges/TrustBadgesProps.d.ts +24 -0
  932. package/dist/Components/TrustBadges/TrustBadgesProps.js +2 -0
  933. package/dist/Components/UpgradeButton/UpgradeButton.d.ts +1 -0
  934. package/dist/Components/UpgradeButton/UpgradeButton.js +13 -14
  935. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +10 -3
  936. package/dist/Components/UserDetails/AddUserModal.js +2 -1
  937. package/dist/Components/UserDetails/ChangeRoleModal.js +2 -1
  938. package/dist/Components/UserDetails/DeactivateConfirmModal.js +4 -6
  939. package/dist/Components/UserDetails/UserDetails.d.ts +1 -0
  940. package/dist/Components/UserDetails/UserDetails.js +19 -12
  941. package/dist/Components/UserDetails/UserDetailsProps.d.ts +88 -1
  942. package/dist/Components/VariantSelector/VariantSelector.d.ts +4 -0
  943. package/dist/Components/VariantSelector/VariantSelector.js +123 -0
  944. package/dist/Components/VariantSelector/VariantSelectorProps.d.ts +31 -0
  945. package/dist/Components/VariantSelector/VariantSelectorProps.js +2 -0
  946. package/dist/Components/VariantSelector/variantSelection.d.ts +6 -0
  947. package/dist/Components/VariantSelector/variantSelection.js +25 -0
  948. package/dist/Components/VisuallyHidden/VisuallyHidden.d.ts +15 -0
  949. package/dist/Components/VisuallyHidden/VisuallyHidden.js +21 -0
  950. package/dist/Components/VisuallyHidden/VisuallyHiddenProps.d.ts +3 -0
  951. package/dist/Components/VisuallyHidden/VisuallyHiddenProps.js +2 -0
  952. package/dist/Components/WishlistToggle/WishlistToggle.d.ts +4 -0
  953. package/dist/Components/WishlistToggle/WishlistToggle.js +66 -0
  954. package/dist/Components/WishlistToggle/WishlistToggleProps.d.ts +23 -0
  955. package/dist/Components/WishlistToggle/WishlistToggleProps.js +2 -0
  956. package/dist/Components/WizardDialog/WizardDialog.d.ts +9 -0
  957. package/dist/Components/WizardDialog/WizardDialog.js +119 -0
  958. package/dist/Components/WizardDialog/WizardDialogProps.d.ts +69 -0
  959. package/dist/Components/WizardDialog/WizardDialogProps.js +2 -0
  960. package/dist/Components/WizardDialog/useWizardFlow.d.ts +22 -0
  961. package/dist/Components/WizardDialog/useWizardFlow.js +47 -0
  962. package/dist/Components/WizardDialog/wizardSteps.d.ts +43 -0
  963. package/dist/Components/WizardDialog/wizardSteps.js +40 -0
  964. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.d.ts +1 -13
  965. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +20 -14
  966. package/dist/Components/WorkspaceWindow/WorkspaceWindow.d.ts +4 -13
  967. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +44 -37
  968. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +69 -13
  969. package/dist/Constants/Sidebar.d.ts +2 -38
  970. package/dist/Constants/Sidebar.js +4 -19
  971. package/dist/Hooks/exclusiveOverlay.d.ts +4 -0
  972. package/dist/Hooks/exclusiveOverlay.js +22 -0
  973. package/dist/Hooks/sharedResizeObserver.d.ts +6 -0
  974. package/dist/Hooks/sharedResizeObserver.js +77 -0
  975. package/dist/Hooks/useDebounce.d.ts +6 -0
  976. package/dist/Hooks/useDebounce.js +33 -0
  977. package/dist/Hooks/useExclusiveOverlay.d.ts +1 -0
  978. package/dist/Hooks/useExclusiveOverlay.js +21 -0
  979. package/dist/Hooks/useFullscreen.d.ts +8 -0
  980. package/dist/Hooks/useFullscreen.js +32 -0
  981. package/dist/Hooks/useIsTruncated.d.ts +0 -30
  982. package/dist/Hooks/useIsTruncated.js +4 -34
  983. package/dist/Hooks/useMatchMedia.d.ts +2 -0
  984. package/dist/Hooks/useMatchMedia.js +36 -0
  985. package/dist/Hooks/useOutsideMouseDown.d.ts +11 -0
  986. package/dist/Hooks/useOutsideMouseDown.js +30 -0
  987. package/dist/Hooks/usePreferences.js +30 -17
  988. package/dist/Hooks/useScrollableRegion.d.ts +17 -0
  989. package/dist/Hooks/useScrollableRegion.js +36 -0
  990. package/dist/Hooks/useSidebarPrefs.d.ts +2 -42
  991. package/dist/Hooks/useSidebarPrefs.js +1 -2
  992. package/dist/Theme/assertPalette.d.ts +1 -1
  993. package/dist/Theme/assertPalette.js +4 -3
  994. package/dist/Theme/chakra/Card.styles.d.ts +84 -0
  995. package/dist/Theme/chakra/Card.styles.js +51 -0
  996. package/dist/Theme/chakra/Drawer.styles.d.ts +41 -9
  997. package/dist/Theme/chakra/Drawer.styles.js +14 -13
  998. package/dist/Theme/chakra/Menu.styles.d.ts +27 -24
  999. package/dist/Theme/chakra/Menu.styles.js +33 -26
  1000. package/dist/Theme/chakra/Modal.styles.d.ts +42 -9
  1001. package/dist/Theme/chakra/Modal.styles.js +15 -13
  1002. package/dist/Theme/chakra/Popover.styles.d.ts +8 -15
  1003. package/dist/Theme/chakra/Popover.styles.js +7 -11
  1004. package/dist/Theme/chakra/Slider.styles.d.ts +3 -3
  1005. package/dist/Theme/chakra/Slider.styles.js +1 -6
  1006. package/dist/Theme/chakra/common.web.d.ts +5 -4
  1007. package/dist/Theme/chakra/common.web.js +1 -7
  1008. package/dist/Theme/chakra/componentStyles.d.ts +191 -107
  1009. package/dist/Theme/chakra/componentStyles.js +92 -101
  1010. package/dist/Theme/chakra/createBrandTheme.d.ts +4 -10
  1011. package/dist/Theme/chakra/createBrandTheme.js +56 -57
  1012. package/dist/Theme/chakra/focusRing.styles.d.ts +47 -0
  1013. package/dist/Theme/chakra/focusRing.styles.js +46 -0
  1014. package/dist/Theme/chakra/fonts.web.d.ts +2 -5
  1015. package/dist/Theme/chakra/fonts.web.js +1 -5
  1016. package/dist/Theme/chakra/motion.d.ts +20 -0
  1017. package/dist/Theme/chakra/motion.js +39 -0
  1018. package/dist/Theme/chakra/overlay.styles.d.ts +56 -0
  1019. package/dist/Theme/chakra/overlay.styles.js +51 -0
  1020. package/dist/Theme/chakra/paletteFromTheme.d.ts +2 -5
  1021. package/dist/Theme/chakra/paletteFromTheme.js +18 -7
  1022. package/dist/Theme/chakra/ringShadow.d.ts +3 -0
  1023. package/dist/Theme/chakra/ringShadow.js +7 -0
  1024. package/dist/Theme/index.d.ts +2 -13
  1025. package/dist/Theme/index.js +14 -26
  1026. package/dist/Theme/provider/PixelizeThemeProvider.d.ts +5 -33
  1027. package/dist/Theme/provider/PixelizeThemeProvider.js +27 -86
  1028. package/dist/Theme/provider/ThemeSwitcher.d.ts +1 -0
  1029. package/dist/Theme/provider/ThemeSwitcher.js +19 -19
  1030. package/dist/Theme/provider/colorModeStorage.js +1 -4
  1031. package/dist/Theme/testing/testPalette.d.ts +1 -0
  1032. package/dist/Theme/themeProps.d.ts +7 -0
  1033. package/dist/Theme/tokens/brands/emerald/palette.dark.d.ts +0 -4
  1034. package/dist/Theme/tokens/brands/emerald/palette.dark.js +2 -5
  1035. package/dist/Theme/tokens/brands/emerald/palette.light.js +2 -10
  1036. package/dist/Theme/tokens/brands/index.d.ts +2 -1
  1037. package/dist/Theme/tokens/brands/index.js +39 -15
  1038. package/dist/Theme/tokens/brands/lavender/palette.dark.d.ts +0 -4
  1039. package/dist/Theme/tokens/brands/lavender/palette.dark.js +2 -5
  1040. package/dist/Theme/tokens/brands/lavender/palette.light.js +4 -13
  1041. package/dist/Theme/tokens/brands/meadow/palette.dark.d.ts +0 -4
  1042. package/dist/Theme/tokens/brands/meadow/palette.dark.js +2 -5
  1043. package/dist/Theme/tokens/brands/meadow/palette.light.js +2 -11
  1044. package/dist/Theme/tokens/brands/radiant/palette.dark.d.ts +0 -4
  1045. package/dist/Theme/tokens/brands/radiant/palette.dark.js +2 -5
  1046. package/dist/Theme/tokens/brands/radiant/palette.light.js +17 -10
  1047. package/dist/Theme/tokens/brands/rosewood/palette.dark.d.ts +0 -4
  1048. package/dist/Theme/tokens/brands/rosewood/palette.dark.js +2 -5
  1049. package/dist/Theme/tokens/brands/rosewood/palette.light.js +12 -24
  1050. package/dist/Theme/tokens/brands/skyline/palette.dark.d.ts +0 -4
  1051. package/dist/Theme/tokens/brands/skyline/palette.dark.js +2 -5
  1052. package/dist/Theme/tokens/brands/skyline/palette.light.js +2 -11
  1053. package/dist/Theme/tokens/brands/slate/palette.dark.d.ts +0 -4
  1054. package/dist/Theme/tokens/brands/slate/palette.dark.js +2 -5
  1055. package/dist/Theme/tokens/brands/slate/palette.light.js +1 -11
  1056. package/dist/Theme/tokens/brands/storefront/palette.dark.d.ts +0 -4
  1057. package/dist/Theme/tokens/brands/storefront/palette.dark.js +2 -5
  1058. package/dist/Theme/tokens/brands/zinc/palette.dark.d.ts +10 -29
  1059. package/dist/Theme/tokens/brands/zinc/palette.dark.js +30 -88
  1060. package/dist/Theme/tokens/brands/zinc/palette.light.js +3 -12
  1061. package/dist/Theme/tokens/builders/accentText.d.ts +2 -43
  1062. package/dist/Theme/tokens/builders/accentText.js +12 -49
  1063. package/dist/Theme/tokens/builders/brandInk.d.ts +2 -0
  1064. package/dist/Theme/tokens/builders/brandInk.js +19 -1
  1065. package/dist/Theme/tokens/builders/buildBrandTokens.d.ts +0 -3
  1066. package/dist/Theme/tokens/builders/buildBrandTokens.js +1 -3
  1067. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +7 -13
  1068. package/dist/Theme/tokens/builders/buildDarkPalette.js +53 -105
  1069. package/dist/Theme/tokens/builders/chartColorsFromTheme.d.ts +0 -8
  1070. package/dist/Theme/tokens/builders/chartColorsFromTheme.js +1 -8
  1071. package/dist/Theme/tokens/builders/color.d.ts +0 -20
  1072. package/dist/Theme/tokens/builders/color.js +13 -26
  1073. package/dist/Theme/tokens/builders/filledSurface.d.ts +25 -0
  1074. package/dist/Theme/tokens/builders/filledSurface.js +98 -0
  1075. package/dist/Theme/tokens/builders/focusRing.d.ts +7 -0
  1076. package/dist/Theme/tokens/builders/focusRing.js +51 -0
  1077. package/dist/Theme/tokens/builders/gradientInk.d.ts +0 -10
  1078. package/dist/Theme/tokens/builders/gradientInk.js +2 -10
  1079. package/dist/Theme/tokens/builders/index.d.ts +6 -0
  1080. package/dist/Theme/tokens/builders/index.js +6 -0
  1081. package/dist/Theme/tokens/builders/lazy.d.ts +5 -0
  1082. package/dist/Theme/tokens/builders/lazy.js +55 -0
  1083. package/dist/Theme/tokens/builders/memo.d.ts +9 -0
  1084. package/dist/Theme/tokens/builders/memo.js +28 -0
  1085. package/dist/Theme/tokens/builders/memoByReads.d.ts +2 -0
  1086. package/dist/Theme/tokens/builders/memoByReads.js +50 -0
  1087. package/dist/Theme/tokens/builders/mutedText.d.ts +1 -1
  1088. package/dist/Theme/tokens/builders/mutedText.js +13 -3
  1089. package/dist/Theme/tokens/builders/outlineRung.d.ts +7 -33
  1090. package/dist/Theme/tokens/builders/outlineRung.js +71 -39
  1091. package/dist/Theme/tokens/builders/paletteScale.d.ts +2 -0
  1092. package/dist/Theme/tokens/builders/paletteScale.js +10 -0
  1093. package/dist/Theme/tokens/builders/placeholderInk.d.ts +0 -12
  1094. package/dist/Theme/tokens/builders/placeholderInk.js +5 -13
  1095. package/dist/Theme/tokens/builders/planeStep.d.ts +5 -0
  1096. package/dist/Theme/tokens/builders/planeStep.js +21 -0
  1097. package/dist/Theme/tokens/builders/planes.d.ts +4 -0
  1098. package/dist/Theme/tokens/builders/planes.js +33 -0
  1099. package/dist/Theme/tokens/builders/rechartsTheme.d.ts +56 -0
  1100. package/dist/Theme/tokens/builders/rechartsTheme.js +43 -0
  1101. package/dist/Theme/tokens/builders/resolvedRungs.d.ts +0 -5
  1102. package/dist/Theme/tokens/builders/resolvedRungs.js +1 -5
  1103. package/dist/Theme/tokens/builders/rowStates.d.ts +13 -0
  1104. package/dist/Theme/tokens/builders/rowStates.js +27 -0
  1105. package/dist/Theme/tokens/builders/scrim.d.ts +6 -0
  1106. package/dist/Theme/tokens/builders/scrim.js +17 -0
  1107. package/dist/Theme/tokens/builders/scrollShadow.d.ts +3 -0
  1108. package/dist/Theme/tokens/builders/scrollShadow.js +32 -0
  1109. package/dist/Theme/tokens/builders/scrollbar.d.ts +0 -4
  1110. package/dist/Theme/tokens/builders/scrollbar.js +1 -4
  1111. package/dist/Theme/tokens/builders/semanticText.d.ts +0 -5
  1112. package/dist/Theme/tokens/builders/semanticText.js +1 -5
  1113. package/dist/Theme/tokens/builders/sidebarAccent.d.ts +8 -0
  1114. package/dist/Theme/tokens/builders/sidebarAccent.js +19 -3
  1115. package/dist/Theme/tokens/builders/skeletonShimmer.d.ts +9 -0
  1116. package/dist/Theme/tokens/builders/skeletonShimmer.js +25 -0
  1117. package/dist/Theme/tokens/builders/star.d.ts +3 -0
  1118. package/dist/Theme/tokens/builders/star.js +8 -0
  1119. package/dist/Theme/tokens/builders/statusTone.d.ts +1 -19
  1120. package/dist/Theme/tokens/builders/statusTone.js +4 -19
  1121. package/dist/Theme/tokens/builders/surfaceRaised.d.ts +8 -0
  1122. package/dist/Theme/tokens/builders/surfaceRaised.js +31 -0
  1123. package/dist/Theme/tokens/builders/surfaceRungs.d.ts +0 -4
  1124. package/dist/Theme/tokens/builders/surfaceRungs.js +16 -9
  1125. package/dist/Theme/tokens/builders/tone.d.ts +22 -0
  1126. package/dist/Theme/tokens/builders/tone.js +55 -0
  1127. package/dist/Theme/tokens/builders/tooltipSurface.d.ts +6 -0
  1128. package/dist/Theme/tokens/builders/tooltipSurface.js +10 -0
  1129. package/dist/Theme/tokens/builders/viewportHeight.d.ts +8 -0
  1130. package/dist/Theme/tokens/builders/viewportHeight.js +9 -0
  1131. package/dist/Theme/tokens/index.d.ts +0 -10
  1132. package/dist/Theme/tokens/index.js +1 -10
  1133. package/dist/Theme/tokens/primitives/borderWidths.d.ts +6 -0
  1134. package/dist/Theme/tokens/primitives/borderWidths.js +5 -0
  1135. package/dist/Theme/tokens/primitives/controlSizes.d.ts +13 -0
  1136. package/dist/Theme/tokens/primitives/controlSizes.js +20 -0
  1137. package/dist/Theme/tokens/primitives/index.d.ts +10 -3
  1138. package/dist/Theme/tokens/primitives/index.js +27 -1
  1139. package/dist/Theme/tokens/primitives/motion.d.ts +32 -0
  1140. package/dist/Theme/tokens/primitives/motion.js +31 -0
  1141. package/dist/Theme/tokens/primitives/optionRowSizes.d.ts +20 -0
  1142. package/dist/Theme/tokens/primitives/optionRowSizes.js +30 -0
  1143. package/dist/Theme/tokens/primitives/radii.d.ts +15 -0
  1144. package/dist/Theme/tokens/primitives/radii.js +14 -0
  1145. package/dist/Theme/tokens/primitives/shadows.d.ts +21 -1
  1146. package/dist/Theme/tokens/primitives/shadows.js +59 -5
  1147. package/dist/Theme/tokens/primitives/sizes.d.ts +0 -4
  1148. package/dist/Theme/tokens/primitives/sizes.js +1 -4
  1149. package/dist/Theme/tokens/primitives/states.d.ts +1 -0
  1150. package/dist/Theme/tokens/primitives/states.js +4 -0
  1151. package/dist/Theme/tokens/primitives/typography.d.ts +17 -7
  1152. package/dist/Theme/tokens/primitives/typography.js +23 -9
  1153. package/dist/Theme/tokens/primitives/zIndices.d.ts +1 -0
  1154. package/dist/Theme/tokens/primitives/zIndices.js +1 -0
  1155. package/dist/Theme/tokens/types.d.ts +19 -16
  1156. package/dist/Theme/tokens/types.js +1 -6
  1157. package/dist/Theme/useChartTheme.d.ts +4 -0
  1158. package/dist/Theme/useChartTheme.js +12 -0
  1159. package/dist/Utils/accountHandoff.d.ts +3 -17
  1160. package/dist/Utils/accountHandoff.js +2 -17
  1161. package/dist/Utils/apiError.d.ts +2 -0
  1162. package/dist/Utils/apiError.js +28 -0
  1163. package/dist/Utils/formatDate.d.ts +25 -0
  1164. package/dist/Utils/formatDate.js +144 -0
  1165. package/dist/Utils/functions.d.ts +1 -0
  1166. package/dist/Utils/functions.js +6 -4
  1167. package/dist/Utils/humanize.d.ts +4 -0
  1168. package/dist/Utils/humanize.js +19 -0
  1169. package/dist/Utils/lazyWithRetry.d.ts +9 -0
  1170. package/dist/Utils/lazyWithRetry.js +51 -0
  1171. package/dist/Utils/mergeRefs.d.ts +0 -5
  1172. package/dist/Utils/mergeRefs.js +1 -5
  1173. package/dist/Utils/planBadge.d.ts +1 -11
  1174. package/dist/Utils/planBadge.js +2 -12
  1175. package/dist/Utils/planExpiry.d.ts +0 -26
  1176. package/dist/Utils/planExpiry.js +4 -29
  1177. package/dist/Utils/price.d.ts +17 -0
  1178. package/dist/Utils/price.js +39 -0
  1179. package/dist/Utils/rafThrottle.d.ts +0 -11
  1180. package/dist/Utils/rafThrottle.js +1 -11
  1181. package/dist/Utils/table.d.ts +5 -22
  1182. package/dist/Utils/table.js +64 -88
  1183. package/dist/Utils/tabular.d.ts +30 -0
  1184. package/dist/Utils/tabular.js +61 -0
  1185. package/dist/Utils/validation.d.ts +13 -0
  1186. package/dist/Utils/validation.js +86 -0
  1187. package/dist/esm/Components/Accordion/Accordion.js +17 -13
  1188. package/dist/esm/Components/Accordion/accordionColors.js +8 -10
  1189. package/dist/esm/Components/AddressCard/AddressCard.js +21 -0
  1190. package/dist/esm/Components/AddressCard/AddressCardGroup.js +5 -0
  1191. package/dist/esm/Components/AlertDialog/AlertDialog.js +4 -6
  1192. package/dist/esm/Components/Apexcharts/ApexAreaChart/ApexAreaChart.js +8 -3
  1193. package/dist/esm/Components/Apexcharts/ApexBarChart/ApexBarChart.js +9 -5
  1194. package/dist/esm/Components/Apexcharts/ApexChartFallback.js +5 -0
  1195. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +11 -5
  1196. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +14 -8
  1197. package/dist/esm/Components/Apexcharts/ApexPieChart/pieImageTexture.js +10 -0
  1198. package/dist/esm/Components/Apexcharts/ApexPolarCharts/ApexPolarCharts.js +10 -6
  1199. package/dist/esm/Components/Apexcharts/ApexRadialChart/ApexRadialChart.js +8 -5
  1200. package/dist/esm/Components/Apexcharts/LazyReactApexChart.js +5 -0
  1201. package/dist/esm/Components/AppSwitcher/AppMark.js +52 -0
  1202. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +243 -0
  1203. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +87 -0
  1204. package/dist/esm/Components/AppSwitcher/pixelizeSuite.js +67 -0
  1205. package/dist/esm/Components/AppSwitcher/useAppSwitcherShortcut.js +27 -0
  1206. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +7 -5
  1207. package/dist/esm/Components/AudioRecorder/AudioRecorder.js +163 -0
  1208. package/dist/esm/Components/Avatar/Avatar.js +24 -0
  1209. package/dist/esm/Components/Avatar/AvatarGroup.js +20 -0
  1210. package/dist/esm/Components/Avatar/AvatarProps.js +1 -0
  1211. package/dist/esm/Components/Avatar/avatarColorway.js +25 -0
  1212. package/dist/esm/Components/Avatar/avatarSizing.js +12 -0
  1213. package/dist/esm/Components/Backdrop/Backdrop.js +28 -0
  1214. package/dist/esm/Components/Backdrop/BackdropProps.js +1 -0
  1215. package/dist/esm/Components/BagBar/BagBar.js +28 -0
  1216. package/dist/esm/Components/BagBar/BagBarProps.js +1 -0
  1217. package/dist/esm/Components/Breadcrumbs/Breadcrumbs.js +39 -6
  1218. package/dist/esm/Components/Breadcrumbs/breadcrumbInk.js +7 -0
  1219. package/dist/esm/Components/BulkSelectionBar/BulkSelectionBar.js +39 -0
  1220. package/dist/esm/Components/BulkSelectionBar/BulkSelectionBarProps.js +1 -0
  1221. package/dist/esm/Components/BulkSelectionBar/index.js +1 -0
  1222. package/dist/esm/Components/Button/Button.js +6 -4
  1223. package/dist/esm/Components/Button/Button.styles.js +106 -95
  1224. package/dist/esm/Components/ButtonGroupIcon/ButtonGoupIconProps.js +2 -1
  1225. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +9 -15
  1226. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIconProps.js +1 -0
  1227. package/dist/esm/Components/CalendarGrid/CalendarGrid.js +171 -0
  1228. package/dist/esm/Components/CalendarGrid/CalendarGridProps.js +1 -0
  1229. package/dist/esm/Components/CalendarGrid/calendarMath.js +167 -0
  1230. package/dist/esm/Components/Card/Card.js +22 -5
  1231. package/dist/esm/Components/Card/PaymentCard/PaymentCard.js +34 -19
  1232. package/dist/esm/Components/CartItem/CartItem.js +56 -0
  1233. package/dist/esm/Components/CartItem/CartItemProps.js +1 -0
  1234. package/dist/esm/Components/CartItem/cartItemOptions.js +9 -0
  1235. package/dist/esm/Components/Checkbox/Checkbox.js +15 -9
  1236. package/dist/esm/Components/Checkbox/Checkbox.styles.js +47 -37
  1237. package/dist/esm/Components/CheckoutKit/selectable.js +115 -0
  1238. package/dist/esm/Components/CheckoutKit/tonalHover.js +2 -0
  1239. package/dist/esm/Components/ChoiceCard/ChoiceCard.js +16 -0
  1240. package/dist/esm/Components/ChoiceCard/ChoiceCardGroup.js +5 -0
  1241. package/dist/esm/Components/ChoiceCard/ChoiceCardProps.js +1 -0
  1242. package/dist/esm/Components/CircularProgress/CircularProgress.js +33 -0
  1243. package/dist/esm/Components/CircularProgress/CircularProgressProps.js +1 -0
  1244. package/dist/esm/Components/CircularProgress/arc.js +24 -0
  1245. package/dist/esm/Components/Commerce/commerceTypes.js +1 -0
  1246. package/dist/esm/Components/Commerce/commerceVariants.js +41 -0
  1247. package/dist/esm/Components/Commerce/index.js +2 -0
  1248. package/dist/esm/Components/Commerce/useContainerWidth.js +21 -0
  1249. package/dist/esm/Components/Common/ErrorMessage.js +5 -5
  1250. package/dist/esm/Components/Common/FieldMessage.js +14 -0
  1251. package/dist/esm/Components/Common/FormLabel.js +16 -9
  1252. package/dist/esm/Components/Common/HelperText.js +13 -8
  1253. package/dist/esm/Components/Common/activationKey.js +7 -0
  1254. package/dist/esm/Components/Common/chipTriggerSize.js +11 -0
  1255. package/dist/esm/Components/Common/dataAttributes.js +1 -0
  1256. package/dist/esm/Components/Common/fieldMessageStyles.js +14 -0
  1257. package/dist/esm/Components/Common/fieldStyles.js +69 -30
  1258. package/dist/esm/Components/Common/findSlot.js +17 -0
  1259. package/dist/esm/Components/Common/iconBox.js +12 -0
  1260. package/dist/esm/Components/Common/surfaceFocusRing.js +3 -0
  1261. package/dist/esm/Components/Common/useFieldIds.js +23 -0
  1262. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +32 -0
  1263. package/dist/esm/Components/ConfirmDialog/ConfirmDialogProps.js +1 -0
  1264. package/dist/esm/Components/ContactForm/ContactForm.js +19 -14
  1265. package/dist/esm/Components/CopyButton/CopyButton.js +22 -13
  1266. package/dist/esm/Components/CouponField/CouponField.js +71 -0
  1267. package/dist/esm/Components/CouponField/CouponFieldProps.js +1 -0
  1268. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +9 -4
  1269. package/dist/esm/Components/CustomModulesTable/DeleteModuleModal.js +5 -4
  1270. package/dist/esm/Components/CustomModulesTable/EditModuleModal.js +4 -4
  1271. package/dist/esm/Components/DatePicker/CalendarPanel.js +45 -25
  1272. package/dist/esm/Components/DatePicker/DatePicker.js +41 -73
  1273. package/dist/esm/Components/DatePicker/DatePickerProps.js +1 -1
  1274. package/dist/esm/Components/DatePicker/PickerPortal.js +21 -0
  1275. package/dist/esm/Components/DatePicker/RangeDatePicker.js +78 -71
  1276. package/dist/esm/Components/DatePicker/SingleDatePicker.js +101 -91
  1277. package/dist/esm/Components/DatePicker/ThemeDatePicker.js +15 -18
  1278. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +51 -40
  1279. package/dist/esm/Components/DatePicker/TimePicker.js +9 -12
  1280. package/dist/esm/Components/DatePicker/TimePickerInput.js +10 -13
  1281. package/dist/esm/Components/DatePicker/dayStates.js +68 -0
  1282. package/dist/esm/Components/DatePicker/pickerField.js +24 -0
  1283. package/dist/esm/Components/DatePicker/valueFormat.js +15 -0
  1284. package/dist/esm/Components/DescriptionList/DescriptionList.js +27 -0
  1285. package/dist/esm/Components/DescriptionList/DescriptionListProps.js +1 -0
  1286. package/dist/esm/Components/DetailSections/DetailSections.js +108 -0
  1287. package/dist/esm/Components/DetailSections/DetailSectionsProps.js +1 -0
  1288. package/dist/esm/Components/Divider/Divider.js +3 -2
  1289. package/dist/esm/Components/Drawer/Drawer.js +31 -9
  1290. package/dist/esm/Components/Dropdown/DropDown.js +75 -60
  1291. package/dist/esm/Components/Editor/Editor.js +66 -4
  1292. package/dist/esm/Components/Editor/EditorFieldBar.js +13 -0
  1293. package/dist/esm/Components/Editor/MakeDynamicDialog.js +20 -0
  1294. package/dist/esm/Components/Editor/editorLabels.js +21 -0
  1295. package/dist/esm/Components/Editor/editorTokenStyles.js +32 -0
  1296. package/dist/esm/Components/Editor/editorTokens.js +121 -0
  1297. package/dist/esm/Components/Editor/joditAccessibility.js +24 -0
  1298. package/dist/esm/Components/Editor/useEditorBridge.js +138 -0
  1299. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +11 -11
  1300. package/dist/esm/Components/EmptyState/EmptyState.js +26 -14
  1301. package/dist/esm/Components/EmptyState/FilteredEmptyState.js +18 -0
  1302. package/dist/esm/Components/FeedbackForm/FeedbackForm.js +17 -6
  1303. package/dist/esm/Components/FieldSelectModal/FieldSelectModal.js +4 -5
  1304. package/dist/esm/Components/FilePreview/FilePreview.js +18 -11
  1305. package/dist/esm/Components/FileUpload/FileUpload.js +49 -19
  1306. package/dist/esm/Components/FileUpload/constants.js +2 -0
  1307. package/dist/esm/Components/FileUpload/useObjectUrl.js +10 -0
  1308. package/dist/esm/Components/FileUploader/FileUploader.js +17 -6
  1309. package/dist/esm/Components/FilterBar/FilterBar.js +12 -0
  1310. package/dist/esm/Components/FilterBar/FilterBarProps.js +1 -0
  1311. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +95 -236
  1312. package/dist/esm/Components/FilterSidebar/OptionsSection.js +41 -0
  1313. package/dist/esm/Components/FilterSidebar/RangeSection.js +78 -0
  1314. package/dist/esm/Components/FilterSidebar/SectionHeader.js +23 -0
  1315. package/dist/esm/Components/FilterSidebar/filterHoverStyle.js +3 -10
  1316. package/dist/esm/Components/FilterSidebar/useStableCallback.js +8 -0
  1317. package/dist/esm/Components/Form/FormWrapper.js +5 -2
  1318. package/dist/esm/Components/FormDrawer/FormDrawer.js +59 -0
  1319. package/dist/esm/Components/FormDrawer/FormDrawerProps.js +1 -0
  1320. package/dist/esm/Components/FormField/FormField.js +53 -0
  1321. package/dist/esm/Components/FormField/FormFieldProps.js +1 -0
  1322. package/dist/esm/Components/Header/Header.js +3 -16
  1323. package/dist/esm/Components/Header/HeaderActions.js +9 -6
  1324. package/dist/esm/Components/Header/components/desktopMenu.js +11 -11
  1325. package/dist/esm/Components/Header/components/mobileMenu.js +27 -14
  1326. package/dist/esm/Components/IconButton/IconButton.js +21 -0
  1327. package/dist/esm/Components/IconButton/IconButtonProps.js +1 -0
  1328. package/dist/esm/Components/Input/PhoneNumberInput.js +22 -4
  1329. package/dist/esm/Components/Input/Switch/InputSwitch.js +16 -20
  1330. package/dist/esm/Components/Input/TextInput.js +83 -9
  1331. package/dist/esm/Components/Input/TextInput.styles.js +46 -89
  1332. package/dist/esm/Components/Input/textInputIconSize.js +6 -32
  1333. package/dist/esm/Components/Input/useAriaRequired.js +15 -0
  1334. package/dist/esm/Components/InputTextArea/InputTextArea.js +10 -5
  1335. package/dist/esm/Components/InputTextArea/InputTextArea.style.js +14 -70
  1336. package/dist/esm/Components/KanbanBoard/AccountCard.js +16 -9
  1337. package/dist/esm/Components/KanbanBoard/AccountRow.js +2 -1
  1338. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +3 -3
  1339. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +131 -72
  1340. package/dist/esm/Components/KanbanBoard/MeasuredItem.js +7 -14
  1341. package/dist/esm/Components/KanbanBoard/boardStore.js +22 -0
  1342. package/dist/esm/Components/KanbanBoard/index.js +1 -0
  1343. package/dist/esm/Components/Kbd/Kbd.js +29 -0
  1344. package/dist/esm/Components/Kbd/KbdProps.js +1 -0
  1345. package/dist/esm/Components/LauncherTrigger/LauncherTrigger.js +42 -0
  1346. package/dist/esm/Components/LauncherTrigger/LauncherTriggerProps.js +1 -0
  1347. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +2 -1
  1348. package/dist/esm/Components/LimitReachedModal/LimitReachedModal.js +3 -2
  1349. package/dist/esm/Components/LimitReachedModal/limitReachedCopy.js +3 -3
  1350. package/dist/esm/Components/Loading/Loading.js +16 -17
  1351. package/dist/esm/Components/MediaGallery/MediaFrame.js +48 -0
  1352. package/dist/esm/Components/MediaGallery/MediaGallery.js +201 -0
  1353. package/dist/esm/Components/MediaGallery/MediaGalleryProps.js +17 -0
  1354. package/dist/esm/Components/MediaGallery/MediaLightbox.js +79 -0
  1355. package/dist/esm/Components/MediaGallery/MediaLightboxProps.js +12 -0
  1356. package/dist/esm/Components/MediaGallery/MediaThumb.js +23 -0
  1357. package/dist/esm/Components/MediaGallery/glass.js +43 -0
  1358. package/dist/esm/Components/MediaGallery/mediaGalleryModel.js +71 -0
  1359. package/dist/esm/Components/MediaGallery/motion.js +8 -0
  1360. package/dist/esm/Components/MediaViewer/MediaViewer.js +197 -0
  1361. package/dist/esm/Components/MediaViewer/MediaViewerProps.js +29 -0
  1362. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +138 -0
  1363. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayerProps.js +18 -0
  1364. package/dist/esm/Components/MediaViewer/components/MediaDocumentStage.js +110 -0
  1365. package/dist/esm/Components/MediaViewer/components/MediaDocumentStageProps.js +8 -0
  1366. package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +110 -0
  1367. package/dist/esm/Components/MediaViewer/components/MediaImageViewerProps.js +15 -0
  1368. package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +96 -0
  1369. package/dist/esm/Components/MediaViewer/components/MediaScrubberProps.js +1 -0
  1370. package/dist/esm/Components/MediaViewer/components/MediaStatusPanel.js +12 -0
  1371. package/dist/esm/Components/MediaViewer/components/MediaStatusPanelProps.js +1 -0
  1372. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +246 -0
  1373. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayerProps.js +28 -0
  1374. package/dist/esm/Components/MediaViewer/components/PlaybackTimeline.js +38 -0
  1375. package/dist/esm/Components/MediaViewer/components/TileChip.js +10 -0
  1376. package/dist/esm/Components/MediaViewer/components/TileChipProps.js +1 -0
  1377. package/dist/esm/Components/MediaViewer/components/VideoPoster.js +11 -0
  1378. package/dist/esm/Components/MediaViewer/components/VideoPosterProps.js +1 -0
  1379. package/dist/esm/Components/MediaViewer/components/ViewerIconButton.js +17 -0
  1380. package/dist/esm/Components/MediaViewer/components/ViewerIconButtonProps.js +1 -0
  1381. package/dist/esm/Components/MediaViewer/components/mediaKindIcon.js +18 -0
  1382. package/dist/esm/Components/MediaViewer/components/sanitizeDocxHrefs.js +27 -0
  1383. package/dist/esm/Components/MediaViewer/hooks/useAutoHideChrome.js +40 -0
  1384. package/dist/esm/Components/MediaViewer/hooks/useFileViewer.js +45 -0
  1385. package/dist/esm/Components/MediaViewer/mediaItems.js +183 -0
  1386. package/dist/esm/Components/MediaViewer/useViewerChrome.js +27 -0
  1387. package/dist/esm/Components/Modal/Modal.js +16 -20
  1388. package/dist/esm/Components/Modal/dialogNaming.js +18 -0
  1389. package/dist/esm/Components/Modal/warnDroppedSlotChildren.js +42 -0
  1390. package/dist/esm/Components/MoreItems/MoreItems.js +8 -3
  1391. package/dist/esm/Components/MultiSelect/MultiSelect.js +41 -28
  1392. package/dist/esm/Components/NavLauncher/LauncherTabs.js +59 -0
  1393. package/dist/esm/Components/NavLauncher/NavLauncher.js +798 -0
  1394. package/dist/esm/Components/NavLauncher/NavLauncherProps.js +1 -0
  1395. package/dist/esm/Components/NavLauncher/NewTabLink.js +12 -0
  1396. package/dist/esm/Components/NavLauncher/PinToggle.js +18 -0
  1397. package/dist/esm/Components/NavLauncher/ScopeBar.js +136 -0
  1398. package/dist/esm/Components/NavLauncher/engine/distance.js +37 -0
  1399. package/dist/esm/Components/NavLauncher/engine/engine.js +459 -0
  1400. package/dist/esm/Components/NavLauncher/engine/fold.js +75 -0
  1401. package/dist/esm/Components/NavLauncher/engine/index.js +14 -0
  1402. package/dist/esm/Components/NavLauncher/launcherMotion.js +11 -0
  1403. package/dist/esm/Components/NavLauncher/launcherParts.js +230 -0
  1404. package/dist/esm/Components/NavLauncher/match.js +185 -0
  1405. package/dist/esm/Components/NavLauncher/resultNavigation.js +61 -0
  1406. package/dist/esm/Components/NavLauncher/revealStyles.js +15 -0
  1407. package/dist/esm/Components/NavLauncher/searchLayout.js +101 -0
  1408. package/dist/esm/Components/NavLauncher/spotlight.js +194 -0
  1409. package/dist/esm/Components/NavLauncher/spotlightParts.js +108 -0
  1410. package/dist/esm/Components/NavLauncher/useCopiedFlash.js +17 -0
  1411. package/dist/esm/Components/NavigationBar/NavigationBar.js +25 -22
  1412. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +34 -18
  1413. package/dist/esm/Components/Notification/Notification.js +37 -19
  1414. package/dist/esm/Components/NotificationBell/NotificationBell.js +34 -0
  1415. package/dist/esm/Components/NotificationBell/NotificationBellProps.js +1 -0
  1416. package/dist/esm/Components/NotificationBell/NotificationItem.js +29 -0
  1417. package/dist/esm/Components/NotificationBell/NotificationList.js +36 -0
  1418. package/dist/esm/Components/NotificationBell/NotificationPanel.js +32 -0
  1419. package/dist/esm/Components/NotificationBell/index.js +6 -0
  1420. package/dist/esm/Components/NotificationBell/notificationHelpers.js +113 -0
  1421. package/dist/esm/Components/NumberInput/NumberInput.js +6 -2
  1422. package/dist/esm/Components/NumberInput/NumberInput.styles.js +19 -79
  1423. package/dist/esm/Components/OffersList/OffersList.js +84 -0
  1424. package/dist/esm/Components/OffersList/OffersListProps.js +1 -0
  1425. package/dist/esm/Components/OptionChip/OptionChip.js +97 -0
  1426. package/dist/esm/Components/OptionChip/OptionChipProps.js +1 -0
  1427. package/dist/esm/Components/OptionChip/optionInk.js +23 -0
  1428. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +57 -0
  1429. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimelineProps.js +1 -0
  1430. package/dist/esm/Components/OrderSummary/OrderSummary.js +58 -0
  1431. package/dist/esm/Components/OrderSummary/OrderSummaryProps.js +1 -0
  1432. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +50 -32
  1433. package/dist/esm/Components/OrgSwitcher/OrgSwitcherProps.js +3 -1
  1434. package/dist/esm/Components/OrganizationDetails/CreateOrgModal.js +2 -1
  1435. package/dist/esm/Components/OrganizationDetails/DeleteOrgModal.js +7 -9
  1436. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +21 -13
  1437. package/dist/esm/Components/PageHeader/PageHeader.js +16 -0
  1438. package/dist/esm/Components/PageHeader/PageHeaderProps.js +1 -0
  1439. package/dist/esm/Components/Pagination/Pagination.js +42 -0
  1440. package/dist/esm/Components/Pagination/PaginationProps.js +6 -0
  1441. package/dist/esm/Components/Pagination/pageWindow.js +16 -0
  1442. package/dist/esm/Components/PaymentOption/PaymentOption.js +19 -0
  1443. package/dist/esm/Components/PaymentOption/PaymentOptionGroup.js +5 -0
  1444. package/dist/esm/Components/PaymentOption/PaymentOptionProps.js +1 -0
  1445. package/dist/esm/Components/PdfViewer/PdfViewer.js +129 -2
  1446. package/dist/esm/Components/PersonChip/PersonChip.js +42 -0
  1447. package/dist/esm/Components/PersonChip/PersonChipProps.js +1 -0
  1448. package/dist/esm/Components/PinInput/PinInput.js +23 -9
  1449. package/dist/esm/Components/PinInput/pinInputCellSize.js +6 -0
  1450. package/dist/esm/Components/PincodeChecker/PincodeChecker.js +170 -0
  1451. package/dist/esm/Components/PincodeChecker/PincodeCheckerProps.js +1 -0
  1452. package/dist/esm/Components/PlanBadge/PlanBadge.js +1 -7
  1453. package/dist/esm/Components/PlanPill/PlanPill.js +8 -5
  1454. package/dist/esm/Components/PlanPill/planPillGradient.js +6 -20
  1455. package/dist/esm/Components/PriceBlock/PriceBlock.js +39 -0
  1456. package/dist/esm/Components/PriceBlock/PriceBlockProps.js +1 -0
  1457. package/dist/esm/Components/Primitives/Primitives.js +3 -0
  1458. package/dist/esm/Components/ProductBadges/ProductBadges.js +60 -0
  1459. package/dist/esm/Components/ProductBadges/ProductBadgesProps.js +1 -0
  1460. package/dist/esm/Components/ProductCard/ProductCard.js +109 -53
  1461. package/dist/esm/Components/ProductCard/ProductCardAction.js +61 -0
  1462. package/dist/esm/Components/ProductCard/ProductCardGrid.js +18 -0
  1463. package/dist/esm/Components/ProductCard/ProductCardMedia.js +33 -0
  1464. package/dist/esm/Components/ProductCard/ProductCardSkeleton.js +12 -0
  1465. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +37 -0
  1466. package/dist/esm/Components/ProductCard/QuickAddSheet.js +71 -0
  1467. package/dist/esm/Components/ProductCard/QuickAddSheetProps.js +1 -0
  1468. package/dist/esm/Components/ProductCard/cardLabels.js +13 -0
  1469. package/dist/esm/Components/ProductCard/cardMetrics.js +54 -0
  1470. package/dist/esm/Components/ProductCard/productCardModel.js +65 -0
  1471. package/dist/esm/Components/ProductDetails/ProductDetails.js +212 -34
  1472. package/dist/esm/Components/ProductDetails/productDetailsModel.js +35 -0
  1473. package/dist/esm/Components/ProductDetails/useInViewport.js +14 -0
  1474. package/dist/esm/Components/ProfileCard/ProfileCard.js +15 -11
  1475. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +32 -14
  1476. package/dist/esm/Components/ProgressBar/ProgressBar.js +29 -3
  1477. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +61 -0
  1478. package/dist/esm/Components/QuantityStepper/QuantityStepperProps.js +1 -0
  1479. package/dist/esm/Components/QueryState/ErrorState.js +11 -0
  1480. package/dist/esm/Components/QueryState/QueryStateBoundary.js +30 -0
  1481. package/dist/esm/Components/QueryState/QueryStateProps.js +1 -0
  1482. package/dist/esm/Components/RadioButton/RadioButton.js +36 -16
  1483. package/dist/esm/Components/RangeSlider/RangeSlider.js +131 -0
  1484. package/dist/esm/Components/RangeSlider/RangeSliderProps.js +1 -0
  1485. package/dist/esm/Components/RangeSlider/rangeSliderColors.js +7 -0
  1486. package/dist/esm/Components/RangeSlider/rangeSliderMath.js +69 -0
  1487. package/dist/esm/Components/RangeSlider/rangeSliderSize.js +8 -0
  1488. package/dist/esm/Components/Rating/Rating.js +80 -0
  1489. package/dist/esm/Components/Rating/RatingProps.js +1 -0
  1490. package/dist/esm/Components/Reorder/Reorder.js +4 -2
  1491. package/dist/esm/Components/ReviewList/ReviewList.js +89 -0
  1492. package/dist/esm/Components/ReviewList/ReviewListProps.js +1 -0
  1493. package/dist/esm/Components/ReviewSummary/ReviewSummary.js +42 -0
  1494. package/dist/esm/Components/ReviewSummary/ReviewSummaryProps.js +1 -0
  1495. package/dist/esm/Components/RolesPermission/DeleteRoleModal.js +7 -9
  1496. package/dist/esm/Components/RolesPermission/RolesPermission.js +17 -11
  1497. package/dist/esm/Components/SaveBar/SaveBar.js +19 -0
  1498. package/dist/esm/Components/SaveBar/SaveBarProps.js +1 -0
  1499. package/dist/esm/Components/ScrollToTop/ScrollToTop.js +10 -3
  1500. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -2
  1501. package/dist/esm/Components/Search/Search.js +36 -22
  1502. package/dist/esm/Components/Search/ctrlShortcut.js +25 -0
  1503. package/dist/esm/Components/SearchSelect/SearchSelect.js +295 -142
  1504. package/dist/esm/Components/SearchSelect/searchSelectNav.js +32 -0
  1505. package/dist/esm/Components/SearchSelect/searchSelectSize.js +15 -27
  1506. package/dist/esm/Components/SectionRail/SectionRail.js +45 -0
  1507. package/dist/esm/Components/SectionRail/SectionRailProps.js +1 -0
  1508. package/dist/esm/Components/SectionRail/index.js +1 -0
  1509. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +119 -0
  1510. package/dist/esm/Components/SegmentedControl/SegmentedControlProps.js +1 -0
  1511. package/dist/esm/Components/SegmentedControl/segmentedInk.js +19 -0
  1512. package/dist/esm/Components/SegmentedControl/useSlidingPill.js +27 -0
  1513. package/dist/esm/Components/Select/Select.js +73 -23
  1514. package/dist/esm/Components/Select/Select.styles.js +30 -75
  1515. package/dist/esm/Components/Select/SelectNative.js +51 -0
  1516. package/dist/esm/Components/Select/SelectPopup.js +586 -0
  1517. package/dist/esm/Components/Select/groupedWindow.js +44 -0
  1518. package/dist/esm/Components/Select/optionRowInk.js +18 -0
  1519. package/dist/esm/Components/Select/selectKeyboardRing.js +3 -0
  1520. package/dist/esm/Components/Select/selectRowInk.js +33 -0
  1521. package/dist/esm/Components/SelectSearch/SelectSearch.js +96 -123
  1522. package/dist/esm/Components/SelectV2/SelectV2.js +10 -218
  1523. package/dist/esm/Components/SettingRow/SettingRow.js +23 -0
  1524. package/dist/esm/Components/SettingRow/SettingRowProps.js +1 -0
  1525. package/dist/esm/Components/SettingRow/SettingsSection.js +12 -0
  1526. package/dist/esm/Components/SettingRow/SettingsSectionProps.js +1 -0
  1527. package/dist/esm/Components/SideBar/SecondaryBar.js +36 -13
  1528. package/dist/esm/Components/SideBar/SideBar.js +161 -51
  1529. package/dist/esm/Components/SideBar/components/MenuItemBox.js +77 -42
  1530. package/dist/esm/Components/SideBar/components/MenuItems.js +8 -8
  1531. package/dist/esm/Components/SideBar/components/MenuPopoverContent.js +33 -14
  1532. package/dist/esm/Components/SideBar/components/OtherApps.js +6 -3
  1533. package/dist/esm/Components/SideBar/components/OverflowTooltipText.js +7 -6
  1534. package/dist/esm/Components/SideBar/components/PinnedSection.js +95 -0
  1535. package/dist/esm/Components/SideBar/components/TextTruncation.js +11 -7
  1536. package/dist/esm/Components/SideBar/menuDisabled.js +3 -0
  1537. package/dist/esm/Components/SideBar/sidebarFocus.js +15 -0
  1538. package/dist/esm/Components/SideBar/sidebarId.js +2 -0
  1539. package/dist/esm/Components/SideBar/sidebarMotion.js +3 -0
  1540. package/dist/esm/Components/SideBar/sidebarScale.js +16 -0
  1541. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +14 -6
  1542. package/dist/esm/Components/SignInActivityTable/scrollRegionRing.js +9 -0
  1543. package/dist/esm/Components/Skeletons/Skeletons.js +5 -2
  1544. package/dist/esm/Components/SkipLink/SkipLink.js +50 -0
  1545. package/dist/esm/Components/SkipLink/SkipLinkProps.js +1 -0
  1546. package/dist/esm/Components/Slider/Slider.js +23 -6
  1547. package/dist/esm/Components/SpecTable/SpecTable.js +35 -0
  1548. package/dist/esm/Components/SpecTable/SpecTableProps.js +1 -0
  1549. package/dist/esm/Components/Spinner/Spinner.js +19 -0
  1550. package/dist/esm/Components/Spinner/SpinnerProps.js +1 -0
  1551. package/dist/esm/Components/StageProgress/StageItem.js +19 -9
  1552. package/dist/esm/Components/StageProgress/StageProgress.js +15 -8
  1553. package/dist/esm/Components/StageProgress/StageProgressProps.js +13 -7
  1554. package/dist/esm/Components/StageProgress/StepperStage.js +15 -10
  1555. package/dist/esm/Components/StageProgress/centerInStrip.js +11 -0
  1556. package/dist/esm/Components/StatCard/StatCard.js +43 -0
  1557. package/dist/esm/Components/StatCard/StatCardProps.js +1 -0
  1558. package/dist/esm/Components/StatusTag/StatusTag.js +19 -0
  1559. package/dist/esm/Components/StatusTag/StatusTagProps.js +1 -0
  1560. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +82 -0
  1561. package/dist/esm/Components/StickyBuyBar/StickyBuyBarProps.js +1 -0
  1562. package/dist/esm/Components/StockStatus/StockStatus.js +29 -0
  1563. package/dist/esm/Components/StockStatus/StockStatusProps.js +1 -0
  1564. package/dist/esm/Components/Switch/Switch.js +12 -10
  1565. package/dist/esm/Components/Table/Table.js +97 -59
  1566. package/dist/esm/Components/Table/columnLabel.js +21 -0
  1567. package/dist/esm/Components/Table/components/HeaderActions.js +10 -7
  1568. package/dist/esm/Components/Table/components/Pagination.js +20 -9
  1569. package/dist/esm/Components/Table/components/TableActions.js +43 -26
  1570. package/dist/esm/Components/Table/components/TableBody.js +225 -106
  1571. package/dist/esm/Components/Table/components/TableGroupRow.js +2 -1
  1572. package/dist/esm/Components/Table/components/TableHeader.js +54 -36
  1573. package/dist/esm/Components/Table/components/TableLoading.js +10 -6
  1574. package/dist/esm/Components/Table/components/TableSearch.js +1 -1
  1575. package/dist/esm/Components/Table/components/rowDetail.js +15 -0
  1576. package/dist/esm/Components/Table/components/rowFocusRing.js +16 -0
  1577. package/dist/esm/Components/Table/components/rowMeasurer.js +66 -0
  1578. package/dist/esm/Components/Table/components/rowMetrics.js +11 -0
  1579. package/dist/esm/Components/Table/filters/ActiveFilters.js +14 -7
  1580. package/dist/esm/Components/Table/filters/CompactSelect.js +26 -9
  1581. package/dist/esm/Components/Table/filters/FilterDatePicker.js +20 -0
  1582. package/dist/esm/Components/Table/filters/LeftFilterPane.js +14 -6
  1583. package/dist/esm/Components/Table/filters/SelectOperationControls.js +8 -3
  1584. package/dist/esm/Components/Table/filters/TableFilters.js +4 -14
  1585. package/dist/esm/Components/Table/filters/TextOperationControls.js +6 -2
  1586. package/dist/esm/Components/Table/hooks/useRowExpansion.js +23 -0
  1587. package/dist/esm/Components/Table/hooks/useTable.js +85 -49
  1588. package/dist/esm/Components/Table/settings/ManageColumns.js +17 -11
  1589. package/dist/esm/Components/Table/settings/TableSettings.js +18 -9
  1590. package/dist/esm/Components/Table/variants/TableVariantContext.js +13 -0
  1591. package/dist/esm/Components/Table/variants/classic.js +46 -0
  1592. package/dist/esm/Components/Table/variants/index.js +9 -0
  1593. package/dist/esm/Components/Table/variants/pillInk.js +18 -0
  1594. package/dist/esm/Components/Table/variants/stripe.js +3 -0
  1595. package/dist/esm/Components/Table/variants/studio.js +48 -0
  1596. package/dist/esm/Components/Table/variants/tokens.js +1 -0
  1597. package/dist/esm/Components/Tabs/Tabs.js +79 -0
  1598. package/dist/esm/Components/Tabs/TabsContext.js +10 -0
  1599. package/dist/esm/Components/Tabs/TabsProps.js +1 -0
  1600. package/dist/esm/Components/Tabs/components/CountBadge.js +15 -0
  1601. package/dist/esm/Components/Tabs/components/Tab.js +17 -0
  1602. package/dist/esm/Components/Tabs/components/TabLinkList.js +29 -0
  1603. package/dist/esm/Components/Tabs/components/TabList.js +85 -0
  1604. package/dist/esm/Components/Tabs/components/TabPanel.js +16 -0
  1605. package/dist/esm/Components/Tabs/components/TabPanels.js +13 -0
  1606. package/dist/esm/Components/Tabs/index.js +5 -0
  1607. package/dist/esm/Components/Tabs/tabStyles.js +35 -0
  1608. package/dist/esm/Components/Tabs/useTabAppearance.js +63 -0
  1609. package/dist/esm/Components/Tag/Tag.js +31 -8
  1610. package/dist/esm/Components/Tag/Tag.styles.js +51 -36
  1611. package/dist/esm/Components/Tag/tagDot.js +24 -0
  1612. package/dist/esm/Components/TagInput/TagInput.js +96 -0
  1613. package/dist/esm/Components/TagInput/TagInputProps.js +1 -0
  1614. package/dist/esm/Components/TagInput/tagEntries.js +51 -0
  1615. package/dist/esm/Components/TimePicker/TimePicker.js +50 -0
  1616. package/dist/esm/Components/TimePicker/TimePickerProps.js +1 -0
  1617. package/dist/esm/Components/TimePicker/timeParts.js +26 -0
  1618. package/dist/esm/Components/Timeline/Timeline.js +59 -33
  1619. package/dist/esm/Components/Toaster/Toaster.js +90 -61
  1620. package/dist/esm/Components/Toaster/toastDuration.js +3 -0
  1621. package/dist/esm/Components/Toggle/TableToggle.js +66 -19
  1622. package/dist/esm/Components/ToggleSwitch/ToggleSwitch.js +49 -0
  1623. package/dist/esm/Components/ToggleSwitch/ToggleSwitchProps.js +1 -0
  1624. package/dist/esm/Components/ToolTip/OverflowToolTip.js +1 -15
  1625. package/dist/esm/Components/ToolTip/ToolTip.js +102 -23
  1626. package/dist/esm/Components/TrustBadges/TrustBadges.js +22 -0
  1627. package/dist/esm/Components/TrustBadges/TrustBadgesProps.js +1 -0
  1628. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +13 -14
  1629. package/dist/esm/Components/UserDetails/AddUserModal.js +2 -1
  1630. package/dist/esm/Components/UserDetails/ChangeRoleModal.js +2 -1
  1631. package/dist/esm/Components/UserDetails/DeactivateConfirmModal.js +6 -8
  1632. package/dist/esm/Components/UserDetails/UserDetails.js +20 -13
  1633. package/dist/esm/Components/VariantSelector/VariantSelector.js +118 -0
  1634. package/dist/esm/Components/VariantSelector/VariantSelectorProps.js +1 -0
  1635. package/dist/esm/Components/VariantSelector/variantSelection.js +19 -0
  1636. package/dist/esm/Components/VisuallyHidden/VisuallyHidden.js +18 -0
  1637. package/dist/esm/Components/VisuallyHidden/VisuallyHiddenProps.js +1 -0
  1638. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +64 -0
  1639. package/dist/esm/Components/WishlistToggle/WishlistToggleProps.js +1 -0
  1640. package/dist/esm/Components/WizardDialog/WizardDialog.js +75 -0
  1641. package/dist/esm/Components/WizardDialog/WizardDialogProps.js +1 -0
  1642. package/dist/esm/Components/WizardDialog/useWizardFlow.js +44 -0
  1643. package/dist/esm/Components/WizardDialog/wizardSteps.js +35 -0
  1644. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +18 -15
  1645. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +42 -38
  1646. package/dist/esm/Constants/Sidebar.js +3 -18
  1647. package/dist/esm/Hooks/exclusiveOverlay.js +16 -0
  1648. package/dist/esm/Hooks/sharedResizeObserver.js +73 -0
  1649. package/dist/esm/Hooks/useDebounce.js +29 -0
  1650. package/dist/esm/Hooks/useExclusiveOverlay.js +17 -0
  1651. package/dist/esm/Hooks/useFullscreen.js +29 -0
  1652. package/dist/esm/Hooks/useIsTruncated.js +4 -34
  1653. package/dist/esm/Hooks/useMatchMedia.js +32 -0
  1654. package/dist/esm/Hooks/useOutsideMouseDown.js +26 -0
  1655. package/dist/esm/Hooks/usePreferences.js +30 -17
  1656. package/dist/esm/Hooks/useScrollableRegion.js +33 -0
  1657. package/dist/esm/Hooks/useSidebarPrefs.js +1 -2
  1658. package/dist/esm/Theme/assertPalette.js +4 -3
  1659. package/dist/esm/Theme/chakra/Card.styles.js +48 -0
  1660. package/dist/esm/Theme/chakra/Drawer.styles.js +14 -13
  1661. package/dist/esm/Theme/chakra/Menu.styles.js +33 -26
  1662. package/dist/esm/Theme/chakra/Modal.styles.js +15 -13
  1663. package/dist/esm/Theme/chakra/Popover.styles.js +7 -11
  1664. package/dist/esm/Theme/chakra/Slider.styles.js +1 -6
  1665. package/dist/esm/Theme/chakra/common.web.js +1 -7
  1666. package/dist/esm/Theme/chakra/componentStyles.js +94 -103
  1667. package/dist/esm/Theme/chakra/createBrandTheme.js +56 -57
  1668. package/dist/esm/Theme/chakra/focusRing.styles.js +37 -0
  1669. package/dist/esm/Theme/chakra/fonts.web.js +1 -5
  1670. package/dist/esm/Theme/chakra/motion.js +34 -0
  1671. package/dist/esm/Theme/chakra/overlay.styles.js +46 -0
  1672. package/dist/esm/Theme/chakra/paletteFromTheme.js +16 -6
  1673. package/dist/esm/Theme/chakra/ringShadow.js +3 -0
  1674. package/dist/esm/Theme/index.js +14 -26
  1675. package/dist/esm/Theme/provider/PixelizeThemeProvider.js +28 -87
  1676. package/dist/esm/Theme/provider/ThemeSwitcher.js +20 -20
  1677. package/dist/esm/Theme/provider/colorModeStorage.js +1 -4
  1678. package/dist/esm/Theme/tokens/brands/emerald/palette.dark.js +2 -5
  1679. package/dist/esm/Theme/tokens/brands/emerald/palette.light.js +2 -10
  1680. package/dist/esm/Theme/tokens/brands/index.js +38 -14
  1681. package/dist/esm/Theme/tokens/brands/lavender/palette.dark.js +2 -5
  1682. package/dist/esm/Theme/tokens/brands/lavender/palette.light.js +4 -13
  1683. package/dist/esm/Theme/tokens/brands/meadow/palette.dark.js +2 -5
  1684. package/dist/esm/Theme/tokens/brands/meadow/palette.light.js +2 -11
  1685. package/dist/esm/Theme/tokens/brands/radiant/palette.dark.js +2 -5
  1686. package/dist/esm/Theme/tokens/brands/radiant/palette.light.js +17 -10
  1687. package/dist/esm/Theme/tokens/brands/rosewood/palette.dark.js +2 -5
  1688. package/dist/esm/Theme/tokens/brands/rosewood/palette.light.js +12 -24
  1689. package/dist/esm/Theme/tokens/brands/skyline/palette.dark.js +2 -5
  1690. package/dist/esm/Theme/tokens/brands/skyline/palette.light.js +2 -11
  1691. package/dist/esm/Theme/tokens/brands/slate/palette.dark.js +2 -5
  1692. package/dist/esm/Theme/tokens/brands/slate/palette.light.js +1 -11
  1693. package/dist/esm/Theme/tokens/brands/storefront/palette.dark.js +2 -5
  1694. package/dist/esm/Theme/tokens/brands/zinc/palette.dark.js +30 -88
  1695. package/dist/esm/Theme/tokens/brands/zinc/palette.light.js +3 -12
  1696. package/dist/esm/Theme/tokens/builders/accentText.js +10 -48
  1697. package/dist/esm/Theme/tokens/builders/brandInk.js +18 -2
  1698. package/dist/esm/Theme/tokens/builders/buildBrandTokens.js +1 -3
  1699. package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +53 -105
  1700. package/dist/esm/Theme/tokens/builders/chartColorsFromTheme.js +1 -8
  1701. package/dist/esm/Theme/tokens/builders/color.js +13 -26
  1702. package/dist/esm/Theme/tokens/builders/filledSurface.js +91 -0
  1703. package/dist/esm/Theme/tokens/builders/focusRing.js +44 -0
  1704. package/dist/esm/Theme/tokens/builders/gradientInk.js +2 -10
  1705. package/dist/esm/Theme/tokens/builders/index.js +6 -0
  1706. package/dist/esm/Theme/tokens/builders/lazy.js +49 -0
  1707. package/dist/esm/Theme/tokens/builders/memo.js +21 -0
  1708. package/dist/esm/Theme/tokens/builders/memoByReads.js +46 -0
  1709. package/dist/esm/Theme/tokens/builders/mutedText.js +12 -2
  1710. package/dist/esm/Theme/tokens/builders/outlineRung.js +66 -38
  1711. package/dist/esm/Theme/tokens/builders/paletteScale.js +6 -0
  1712. package/dist/esm/Theme/tokens/builders/placeholderInk.js +6 -14
  1713. package/dist/esm/Theme/tokens/builders/planeStep.js +14 -0
  1714. package/dist/esm/Theme/tokens/builders/planes.js +28 -0
  1715. package/dist/esm/Theme/tokens/builders/rechartsTheme.js +37 -0
  1716. package/dist/esm/Theme/tokens/builders/resolvedRungs.js +1 -5
  1717. package/dist/esm/Theme/tokens/builders/rowStates.js +22 -0
  1718. package/dist/esm/Theme/tokens/builders/scrim.js +12 -0
  1719. package/dist/esm/Theme/tokens/builders/scrollShadow.js +28 -0
  1720. package/dist/esm/Theme/tokens/builders/scrollbar.js +1 -4
  1721. package/dist/esm/Theme/tokens/builders/semanticText.js +1 -5
  1722. package/dist/esm/Theme/tokens/builders/sidebarAccent.js +16 -3
  1723. package/dist/esm/Theme/tokens/builders/skeletonShimmer.js +21 -0
  1724. package/dist/esm/Theme/tokens/builders/star.js +4 -0
  1725. package/dist/esm/Theme/tokens/builders/statusTone.js +4 -19
  1726. package/dist/esm/Theme/tokens/builders/surfaceRaised.js +24 -0
  1727. package/dist/esm/Theme/tokens/builders/surfaceRungs.js +17 -10
  1728. package/dist/esm/Theme/tokens/builders/tone.js +48 -0
  1729. package/dist/esm/Theme/tokens/builders/tooltipSurface.js +6 -0
  1730. package/dist/esm/Theme/tokens/builders/viewportHeight.js +6 -0
  1731. package/dist/esm/Theme/tokens/index.js +1 -10
  1732. package/dist/esm/Theme/tokens/primitives/borderWidths.js +2 -0
  1733. package/dist/esm/Theme/tokens/primitives/controlSizes.js +16 -0
  1734. package/dist/esm/Theme/tokens/primitives/index.js +7 -3
  1735. package/dist/esm/Theme/tokens/primitives/motion.js +25 -0
  1736. package/dist/esm/Theme/tokens/primitives/optionRowSizes.js +26 -0
  1737. package/dist/esm/Theme/tokens/primitives/radii.js +13 -0
  1738. package/dist/esm/Theme/tokens/primitives/shadows.js +56 -5
  1739. package/dist/esm/Theme/tokens/primitives/sizes.js +1 -4
  1740. package/dist/esm/Theme/tokens/primitives/states.js +1 -0
  1741. package/dist/esm/Theme/tokens/primitives/typography.js +22 -8
  1742. package/dist/esm/Theme/tokens/primitives/zIndices.js +1 -0
  1743. package/dist/esm/Theme/tokens/types.js +1 -6
  1744. package/dist/esm/Theme/useChartTheme.js +8 -0
  1745. package/dist/esm/Utils/accountHandoff.js +2 -17
  1746. package/dist/esm/Utils/apiError.js +24 -0
  1747. package/dist/esm/Utils/formatDate.js +138 -0
  1748. package/dist/esm/Utils/functions.js +6 -4
  1749. package/dist/esm/Utils/humanize.js +15 -0
  1750. package/dist/esm/Utils/lazyWithRetry.js +45 -0
  1751. package/dist/esm/Utils/mergeRefs.js +1 -5
  1752. package/dist/esm/Utils/planBadge.js +2 -12
  1753. package/dist/esm/Utils/planExpiry.js +4 -29
  1754. package/dist/esm/Utils/price.js +32 -0
  1755. package/dist/esm/Utils/rafThrottle.js +1 -11
  1756. package/dist/esm/Utils/table.js +61 -55
  1757. package/dist/esm/Utils/tabular.js +56 -0
  1758. package/dist/esm/Utils/validation.js +73 -0
  1759. package/dist/esm/index.js +167 -20
  1760. package/dist/global.css +6 -1
  1761. package/dist/index.d.ts +317 -14
  1762. package/dist/index.js +445 -22
  1763. package/package.json +26 -6
  1764. package/dist/Assets/defaultLogo.tsx +0 -26
  1765. package/dist/Components/Buttons/Buttons.d.ts +0 -3
  1766. package/dist/Components/Buttons/Buttons.js +0 -7
  1767. package/dist/Components/Buttons/ButtonsProps.d.ts +0 -6
  1768. package/dist/Components/Common/ErrorComponent.d.ts +0 -5
  1769. package/dist/Components/Common/ErrorComponent.js +0 -14
  1770. package/dist/Components/Common/FormattedDescription.d.ts +0 -5
  1771. package/dist/Components/Common/FormattedDescription.js +0 -61
  1772. package/dist/Components/Common/Label.d.ts +0 -8
  1773. package/dist/Components/Common/Label.js +0 -10
  1774. package/dist/Components/Input/Input/Input.d.ts +0 -4
  1775. package/dist/Components/Input/Input/Input.js +0 -74
  1776. package/dist/Components/Input/Input/InputProps.d.ts +0 -19
  1777. package/dist/Components/PinInputs/PinInputs.d.ts +0 -3
  1778. package/dist/Components/PinInputs/PinInputs.js +0 -46
  1779. package/dist/Components/PinInputs/PinInputsProps.d.ts +0 -9
  1780. package/dist/Components/ProductCard/ProductLabel.d.ts +0 -7
  1781. package/dist/Components/ProductCard/ProductLabel.js +0 -20
  1782. package/dist/Components/ProductCard/ProductPrice.d.ts +0 -10
  1783. package/dist/Components/ProductCard/ProductPrice.js +0 -115
  1784. package/dist/Components/ProductCard/ProductReview.d.ts +0 -7
  1785. package/dist/Components/ProductCard/ProductReview.js +0 -24
  1786. package/dist/Components/ProductCard/ProductTags.d.ts +0 -8
  1787. package/dist/Components/ProductCard/ProductTags.js +0 -53
  1788. package/dist/Components/ProductDetails/ProductDtlPrice.d.ts +0 -7
  1789. package/dist/Components/ProductDetails/ProductDtlPrice.js +0 -24
  1790. package/dist/Components/ProductDetails/ProductImageSlider.d.ts +0 -11
  1791. package/dist/Components/ProductDetails/ProductImageSlider.js +0 -224
  1792. package/dist/Components/Table/hooks/useDebounce.d.ts +0 -2
  1793. package/dist/Components/Table/hooks/useDebounce.js +0 -24
  1794. package/dist/Components/Trail/EditableCell.d.ts +0 -11
  1795. package/dist/Components/Trail/EditableCell.js +0 -34
  1796. package/dist/Components/Trail/SelectAllCheckbox.d.ts +0 -8
  1797. package/dist/Components/Trail/SelectAllCheckbox.js +0 -9
  1798. package/dist/Components/Trail/TrailWorks.d.ts +0 -2
  1799. package/dist/Components/Trail/TrailWorks.js +0 -56
  1800. package/dist/Components/Trail/data.d.ts +0 -15
  1801. package/dist/Components/Trail/data.js +0 -29
  1802. package/dist/Theme/chakra/Avatar.styles.d.ts +0 -32
  1803. package/dist/Theme/chakra/Avatar.styles.js +0 -28
  1804. package/dist/Theme/chakra/Switch.styles.d.ts +0 -30
  1805. package/dist/Theme/chakra/Switch.styles.js +0 -22
  1806. package/dist/Theme/chakra/Tabs.styles.d.ts +0 -42
  1807. package/dist/Theme/chakra/Tabs.styles.js +0 -36
  1808. package/dist/esm/Components/Buttons/Buttons.js +0 -5
  1809. package/dist/esm/Components/Common/ErrorComponent.js +0 -12
  1810. package/dist/esm/Components/Common/FormattedDescription.js +0 -59
  1811. package/dist/esm/Components/Common/Label.js +0 -8
  1812. package/dist/esm/Components/Input/Input/Input.js +0 -36
  1813. package/dist/esm/Components/PinInputs/PinInputs.js +0 -41
  1814. package/dist/esm/Components/ProductCard/ProductLabel.js +0 -18
  1815. package/dist/esm/Components/ProductCard/ProductPrice.js +0 -110
  1816. package/dist/esm/Components/ProductCard/ProductReview.js +0 -22
  1817. package/dist/esm/Components/ProductCard/ProductTags.js +0 -48
  1818. package/dist/esm/Components/ProductDetails/ProductDtlPrice.js +0 -22
  1819. package/dist/esm/Components/ProductDetails/ProductImageSlider.js +0 -188
  1820. package/dist/esm/Components/Table/hooks/useDebounce.js +0 -22
  1821. package/dist/esm/Components/Trail/EditableCell.js +0 -30
  1822. package/dist/esm/Components/Trail/SelectAllCheckbox.js +0 -5
  1823. package/dist/esm/Components/Trail/TrailWorks.js +0 -54
  1824. package/dist/esm/Components/Trail/data.js +0 -26
  1825. package/dist/esm/Theme/chakra/Avatar.styles.js +0 -25
  1826. package/dist/esm/Theme/chakra/Switch.styles.js +0 -19
  1827. package/dist/esm/Theme/chakra/Tabs.styles.js +0 -33
  1828. package/dist/esm/services/feedback.js +0 -15
  1829. package/dist/services/feedback.d.ts +0 -12
  1830. package/dist/services/feedback.js +0 -18
  1831. /package/dist/Components/{Buttons/ButtonsProps.js → AddressCard/AddressCardProps.js} +0 -0
  1832. /package/dist/Components/{Input/Input/InputProps.js → AudioRecorder/AudioRecorderProps.js} +0 -0
  1833. /package/dist/Components/{PinInputs/PinInputsProps.js → Avatar/AvatarGroupProps.js} +0 -0
  1834. /package/dist/esm/Components/{Buttons/ButtonsProps.js → AddressCard/AddressCardProps.js} +0 -0
  1835. /package/dist/esm/Components/{Input/Input/InputProps.js → AudioRecorder/AudioRecorderProps.js} +0 -0
  1836. /package/dist/esm/Components/{PinInputs/PinInputsProps.js → Avatar/AvatarGroupProps.js} +0 -0
@@ -0,0 +1,2057 @@
1
+ # Component Gotchas & Decision Guide
2
+
3
+ For anyone — human or AI — consuming `pixelize-design-library` in an app. Read this **before**
4
+ choosing a component or a prop value, not after something looks wrong. Every entry below compiles
5
+ cleanly, accepts what you pass, and produces the wrong result with no warning — TypeScript cannot
6
+ catch any of these, and a unit suite that mocks the library won't either.
7
+
8
+ This file ships inside the published package (`node_modules/pixelize-design-library/COMPONENT-GOTCHAS.md`)
9
+ so it's available without checking out the library's source repo. Its companion
10
+ [DESIGN-GUIDE.md](DESIGN-GUIDE.md) ships beside it and covers how to compose components into a page.
11
+
12
+ ---
13
+
14
+ ## Found a gap or a bug? Report it, then track it
15
+
16
+ The library exists so a UI change is made **once, here** — not patched per app. So when a component
17
+ is wrong, missing a prop, or can't express what a screen needs, **don't work around it in your app
18
+ and move on.** Report it upstream; a workaround nobody knows about is a bug that gets rediscovered
19
+ in every other app.
20
+
21
+ **What counts:** a component that renders wrong (misaligned, clipped, wrong size or colour, off the
22
+ control scale), a prop you need that doesn't exist, a silent-failure trap that isn't listed below, or
23
+ a doc that contradicts what you measured.
24
+
25
+ **How to report** — one GitHub issue on `pixelize-tech/Micro-Components`, with the label `bug` or
26
+ `enhancement`. From a terminal (AI agents included) this is one command:
27
+
28
+ ```bash
29
+ gh issue create --repo pixelize-tech/Micro-Components --label bug \
30
+ --title "[consumer] <Component>: <what is wrong>" \
31
+ --body "Version: <output of: npm ls pixelize-design-library>
32
+ App / screen: <where you saw it>
33
+ Expected: <what should happen>
34
+ Actual: <what happens, with measured numbers if it is visual>
35
+ Repro: <props / minimal snippet>
36
+ Workaround in the app: <none, or what you did and where, so it can be removed>"
37
+ ```
38
+
39
+ Measure, don't eyeball: for a visual bug give the rendered size and offset (`getBoundingClientRect`)
40
+ and the `size` prop — "icon 1.5px above centre at `sm`" gets fixed; "looks off" doesn't.
41
+
42
+ **How it is tracked** — the issue is the record; there is no second list.
43
+
44
+ | State | What it means | What you do |
45
+ | --- | --- | --- |
46
+ | Open | Reported, not yet fixed | Keep any workaround, and comment its file path on the issue |
47
+ | Closed with a version | Fixed in the named beta/release, and the fix is under `### Fixed` in [CHANGELOG.md](CHANGELOG.md) citing the issue | Bump the pin to that version (exact, never a caret on a prerelease), **delete the workaround**, close your own follow-up |
48
+ | Closed as `wontfix` / `invalid` / `duplicate` | Not changing, or already covered | Read the reason; the workaround stays, or use the issue it points to |
49
+
50
+ Before reporting, search first — `gh issue list --repo pixelize-tech/Micro-Components --search "<component>" --state all`
51
+ — and check the [CHANGELOG.md](CHANGELOG.md) shipped with your installed version; the gap may already
52
+ be fixed in a newer beta.
53
+
54
+ **Maintainers:** a fix closes its issue in the same change that lands it, and its CHANGELOG line
55
+ names the issue number and the version that ships it. A workaround someone left in an app is only
56
+ removable if the issue says which version fixes it, so never close without naming one.
57
+
58
+ ---
59
+
60
+ ## A colour rung flips direction between light and dark
61
+
62
+ `colors.primary[700]` is a deep purple in light mode and a **pale** lavender in dark. The scales are
63
+ ordered so a high rung always contrasts with the page canvas, which means its lightness inverts
64
+ with the mode. Using one as ink is what the ordering is for; using one as a **background fill**
65
+ gives you a dark bar in light mode and a pale one in dark, with whatever you put on top now
66
+ unreadable.
67
+
68
+ ```tsx
69
+ // Wrong — pale lavender bar in dark mode, and the label on it is unreadable
70
+ <Box bg={colors.primary[700]}>…</Box>
71
+
72
+ // Right — a brand fill that stays a brand fill, with its own guaranteed-AA foreground
73
+ const brand = resolveFilledSurface(colors.primary, colors);
74
+ <Box bg={brand.activeFill} color={brand.activeColor}>…</Box>
75
+ ```
76
+
77
+ `resolveFilledSurface` is exported from the package root. Use `.fill`/`.color` for a standard
78
+ brand surface and `.activeFill`/`.activeColor` for a deeper one behind other content.
79
+
80
+ ---
81
+
82
+ ## Choosing between components
83
+
84
+ ### Segmented control look — `SegmentedControl` / `Toggle/TableToggle`
85
+
86
+ Both take `variant?: "default" | "brandSlide" | "underlineSlide"` (default `"default"` — always
87
+ opt-in, never assume a non-default look).
88
+
89
+ | Context | `variant` | Look |
90
+ | --- | --- | --- |
91
+ | Most call sites — settings rows, filters, table view switches | `"default"` | Neutral chip |
92
+ | The primary, hard-to-miss view switcher on a page (not a dense toolbar) | `"brandSlide"` | Solid brand-filled pill slides behind the active segment |
93
+ | A dense toolbar, table header, or anywhere a boxed control feels heavy | `"underlineSlide"` | Thin brand-colored bar glides under the active label, no fill/chip |
94
+
95
+ Pick by density and emphasis, not by taste. When unsure, or migrating an existing call site, leave
96
+ it on `"default"` — it's the only variant guaranteed to match previously-shipped screenshots.
97
+
98
+ **`brandSlide` no longer guesses its backdrop — and `surface` is now optional.** Until
99
+ 2.4.2-beta.46 the track was an 8% brand tint composited over the **page canvas**, and the inactive
100
+ label's ink was lifted against that same assumed canvas. Dropped into a brand-filled header both
101
+ went wrong at once: the tint sank into the bar, and the label landed at **1.03–2.03:1** — rendered,
102
+ effectively invisible. The track is now an opaque plate (`colors.surfaceRaised`) whatever it sits
103
+ on, so a control on a coloured bar is readable with no prop passed (rest ink 7.58–18.39:1).
104
+
105
+ Pass `surface` only to aim the plate's 1px edge at the real backdrop instead of the page canvas.
106
+ The edge is what carries the boundary: in dark mode the plate and a brand bar can sit at almost the
107
+ same lightness (as low as 1.56:1 on radiant), so hue alone would not separate them.
108
+
109
+ ```tsx
110
+ <Box bg={theme.colors.primary[700]}>
111
+ <Switch ... surface={theme.colors.primary[700]} /> // optional: sharpens the plate's edge
112
+ </Box>
113
+ ```
114
+
115
+ ### Which "select" component — `Select` is the only one to reach for now
116
+
117
+ There is now **one** picker. `Select` does both modes off the `native` prop:
118
+ `native` (default `true`) renders a real `<select>`; `native={false}` renders the themed,
119
+ fully-React popup — searchable, `isMulti` with chips, grouped options, `isClearable`,
120
+ `onCreate`, `renderOption`, `onLoadMore`, optional windowing via `virtualizeAfter`.
121
+
122
+ `isMulti` always forces the popup — there is no native multi-select — and dev-warns if you
123
+ also passed `native`.
124
+
125
+ **Native `Select` is uncontrolled until you pass a `value`.** With no `value` it keeps its own selection
126
+ (seeded by `defaultValue`), so `onChange={() => {}}` still lets the user pick. Once a defined `value` has been
127
+ passed it is controlled: an `onChange` that does not store the value snaps the field back, and `value` going
128
+ back to `undefined` shows the placeholder, not the earlier pick. `variant` (`outline`, `filled`, `flushed`,
129
+ `unstyled`) is native-only and inert in popup mode.
130
+
131
+ **Only `SelectV2` is `@deprecated`. None was deleted; every existing call site still works.**
132
+
133
+ | Deprecated | Status | Migration |
134
+ | --- | --- | --- |
135
+ | `SelectV2` | Now a thin wrapper — literally `<Select {...props} native={false} />` | Drop-in. DOM, ARIA roles, keyboard and the `${listboxId}-option-${id}` id scheme are unchanged, so E2E selectors keyed to it still pass |
136
+ | `SearchSelect` | **Not deprecated** — implementation untouched, not 1:1 replaceable yet | Hand-migrate. `insideSelect` and the paginated `pagination.onScroll` shape (1-based `startIndex`/`limit`/`query`) have **no** equivalent in `Select` today; `isSelectAll`, `rightIcon`, `isFieldLoading`, `chipMaxLength`, `isChipRemovable` and `footerAction` (closes the popup, unlike `addNew`) now do. Keep using it until they do |
137
+ | `SelectSearch` | **Not deprecated** — implementation untouched | Hand-migrate. It is uncontrolled (`initialSelectedOption` seeds state once and never resyncs) and moves real DOM focus into rows; `Select` is controlled and uses `aria-activedescendant` |
138
+ | `Dropdown` | **NOT deprecated** — the marker was wrong and was removed 2026-09-21 | Never "migrate" it to `Select`. It is a menu-button (`role="menu"`/`menuitem`, `aria-haspopup="menu"`), not a value picker (`role="combobox"`/`listbox`). Swapping it would be an accessibility regression, and nothing in this library replaces it |
139
+
140
+ **Still genuinely different, not pickers at all:**
141
+
142
+ | Doing | Component |
143
+ | --- | --- |
144
+ | Typing free-text tags, no options list | `TagInput` (any text, your own `validate`). `MultiSelect` is the email-only variant — despite the name there is nothing to pick from; see its gotcha below |
145
+ | Choosing which fields/columns to include, in a modal, from a checkbox grid | `FieldSelectModal` |
146
+
147
+ `onChange` is the change prop on `Select`, `SelectV2` and `SearchSelect` (`SearchSelect.onSelect` is
148
+ `@deprecated`, same payload; `onChange` wins when both are set). `Search` uses `onSearch`/`onClear`
149
+ (`onclose` is `@deprecated`).
150
+
151
+ ### `Dropdown`'s `handleOptionSelect` takes TWO arguments and TypeScript will not tell you
152
+
153
+ The prop is `(id, label) => void`. TypeScript accepts a one-argument function anywhere a
154
+ two-argument one is expected, so `handleOptionSelect={handleSelect}` where `handleSelect`
155
+ is `(id: string | number) => void` compiles cleanly and silently never receives `label`.
156
+
157
+ Call sites across crm-frontend and commerce hit this, every one a bare function reference rather
158
+ than an inline arrow.
159
+
160
+ **Apply:** pass an inline arrow (`(id, label) => handleSelect(id, label)`) so the arity is
161
+ visible at the call site, or declare the handler with both parameters. Grep for
162
+ `handleOptionSelect={` followed by a bare identifier.
163
+
164
+ ### `Slider` is an image carousel, not a numeric range input
165
+
166
+ `Slider` auto-advances a set of images/content on a timer (paused while hovered or focused, never
167
+ under reduced motion; `showPauseControl` adds a visible play/pause button) — no numeric value, min/max, or step. The
168
+ range-input slider is a separate component named `RangeSlider`, because this library's `Slider`
169
+ already owns the name. `RangeSlider` used to be a Chakra passthrough on the `Primitives` barrel; it
170
+ is now the library's own themed component, with a real dual-thumb mode and a `marks` prop.
171
+
172
+ **Apply:** for a numeric/range form control import `RangeSlider` from the package root — never
173
+ `Slider`, and no longer from the `Primitives` barrel, which no longer carries it.
174
+
175
+ ### Which "switch" — `ToggleSwitch` / `SegmentedControl` / `Tabs` / `InputSwitch` / `Switch`
176
+
177
+ | Choosing | Component | Why |
178
+ | --- | --- | --- |
179
+ | A real on/off toggle | `ToggleSwitch` | `role="switch"` + `aria-checked`, full keyboard support |
180
+ | One of 2-5 named options | `SegmentedControl` | `role="radiogroup"`, keyboard-navigable, supports per-option disabling |
181
+ | Switching between views or panels | `Tabs` | `role="tablist"` + `aria-controls`, count badges, lazy panels, vertical orientation |
182
+ | *(avoid)* | `InputSwitch` | `@deprecated` — now a thin wrapper that renders `ToggleSwitch` |
183
+ | *(avoid)* | `Switch` | `@deprecated` — a two-label segmented control (`leftText`/`rightText`), not a boolean; for a single on/off field use `ToggleSwitch` instead |
184
+
185
+ **Apply:** "on vs off" is always `ToggleSwitch`; 2+ named options is always `SegmentedControl`.
186
+
187
+ **`SegmentedControl`'s focus ring sits on the track, not the segment** (Button's two-tone ring). It is
188
+ driven by a `:focus-visible` check in `onFocus`, so a mouse click stays ringless. `underlineSlide` has no
189
+ track chrome, so its focused segment wears the ring instead.
190
+
191
+ **A focus indicator must never be in a `transition` list.** The 0ms computed style is the transparent
192
+ start value, so a screenshot or axe check taken on focus misses it. Field styles go through
193
+ `FIELD_TRANSITION` (`Common/fieldStyles.ts`), which animates `border-color` and `background-color`
194
+ only; keep `box-shadow` out of any transition you add around a field.
195
+
196
+ **`SegmentedControl` and `Tabs` look near-identical and are not interchangeable.** They share the
197
+ size scale and tokens, so `SegmentedControl variant="underlineSlide"` and `Tabs variant="line"`
198
+ render almost the same picture, as do `variant="default"` and `Tabs variant="subtle"`. The
199
+ difference is what the control *is*: `SegmentedControl` is a **radiogroup** — it filters or sets a
200
+ value and owns nothing else on the page; `Tabs` is a **tablist** — it shows one of several panels
201
+ and wires `aria-controls` to them. Pick by that, never by the picture. A screen reader announces
202
+ "radio 1 of 3" versus "tab 1 of 3, selected", and only `Tabs` gives you panels, count badges,
203
+ `isLazy` and `orientation="vertical"`.
204
+
205
+ ### Circular charts — `ApexPieChart` vs `ApexPolarCharts`
206
+
207
+ | Need | Component | Why not the other |
208
+ | --- | --- | --- |
209
+ | Proportional share of a whole — slices sum to 100% | `ApexPieChart` | The default "part of a whole" chart; donut variants support a center total label |
210
+ | Compare independent magnitudes on a shared radial grid — values need not sum to anything | `ApexPolarCharts` | Reads like a circular bar chart, not a pie; picking Pie here makes unrelated values look like they must add to 100% |
211
+
212
+ ### Which "button" — `Button` / `ButtonGroupIcon`
213
+
214
+ | Need | Component | Why not the other |
215
+ | --- | --- | --- |
216
+ | A single themed, interactive button — any variant/size/colorScheme, dark-mode aware | `Button` | `ButtonGroupIcon` is a fixed icon + text + icon row, not a general button |
217
+ | A themed row of icon + text + icon, optionally a dropdown menu on the right | `ButtonGroupIcon` | `Button` is one control; this row wires the left, center and right slots and the dropdown for you |
218
+
219
+ A gray `ghost` or `outline` `Button` is built for a card, a toolbar or a panel, where its hover step
220
+ reads. On the bare page canvas in light mode the hover fill measures only 1.076-1.124:1 against
221
+ the canvas across the nine brands (above 1.15:1 on a card), so the hover is faint there. A gray
222
+ ghost button that sits directly on `backgroundColor.base` should sit on a `Card` or panel surface
223
+ instead.
224
+
225
+ ### Which "card" — `Card` / `ProductCard` / `StatCard` / `PaymentCard`
226
+
227
+ | Need | Component | Why not the others |
228
+ | --- | --- | --- |
229
+ | Generic padded container (borderless by default; `variant="outline"` for a ruled one), no commerce semantics | `Card` | Layout wrapper with `header`/`footer` slots and a padded body — see gotcha below |
230
+ | Product tile for a grid, list or rail (photo, price, rating, swatches, quick add) | `ProductCard` | Takes the same `axes` / `variants` as `ProductDetails`; for a whole page use `ProductDetails` |
231
+ | A KPI figure with delta and sparkline | `StatCard` | Not a product or a container |
232
+ | Subscription/pricing-tier card (plans, billing cycle, feature list) | `PaymentCard` | Takes a `Plan` object, unrelated to `options`/`productImage` |
233
+
234
+ ### Managing organizations — `OrganizationDetails` vs `OrgSwitcher`
235
+
236
+ | Doing | Component | Why not the other |
237
+ | --- | --- | --- |
238
+ | Quickly changing which org is active for the current session (navbar/header) | `OrgSwitcher` | Compact trigger + searchable popover; no create/rename/delete — session-scoped |
239
+ | Managing the org list — rename, delete, accept/decline invites, create new, set a persisted default | `OrganizationDetails` | Full admin panel with bundled CRUD modals; `default`/`onSetDefault` is a persisted preference, not OrgSwitcher's session-scoped `value`/`onChange` |
240
+
241
+ ### Plan/upgrade cluster — `UpgradeButton` / `PlanPill` / `PlanBadge` / `LimitReachedModal`
242
+
243
+ | Doing | Component | Why not the others |
244
+ | --- | --- | --- |
245
+ | A prominent, animated "upgrade now" CTA button | `UpgradeButton` | Shimmer/hover-lift button with size variants |
246
+ | Showing a plan-state badge and you already have label/tone/copy decided | `PlanPill` | Presentational only — no resolution logic |
247
+ | Showing the top-bar plan-name/"upgrade" badge from raw org plan data | `PlanBadge` | Wraps `PlanPill` with `resolvePlanBadge()`; renders nothing if `canManageBilling` is falsy |
248
+ | Blocking a user who hit a plan limit, with an explanation and upgrade path | `LimitReachedModal` | Full modal, fully controlled, reuses `UpgradeButton` as its own CTA |
249
+
250
+ ### Top-of-app navigation — `NavigationBar` / `Header` / `SideBar` / `AppSwitcher` / `WorkspaceWindow`
251
+
252
+ | Need | Component | Why not the others |
253
+ | --- | --- | --- |
254
+ | Top bar: back control + user-avatar profile/logout dropdown | `NavigationBar` | No page-nav links at all — `navMenu` is only the avatar dropdown's own items |
255
+ | Top bar: horizontal page links with active-state highlighting + submenus | `Header` | Desktop submenus are hover-only, see gotcha below; the bar is `min-height: 4.3rem` and grows when the nav wraps |
256
+ | Collapsible/dockable left rail — primary in-app navigation + secondary panel | `SideBar` | The persistent nav shell, not for switching between whole apps |
257
+ | In-app launcher: browse modules, pins, recents, search | `NavLauncher` opened by a `LauncherTrigger` in `NavigationBar`'s `leading` | An app-owned screen registry, not a cross-app switcher; pins can also surface in `SideBar` `pinnedItems` |
258
+ | Key cap or chord hint (`mod+k`) | `Kbd` / `KbdShortcut` | Never hand-style a `<kbd>`; `Search` and `AppSwitcher` already use it |
259
+ | Cross-app launcher (CRM/HRMS/Tickets/Billing/...) | `AppSwitcher` (list from `resolveSuiteApps`; `buildSuiteApps` throws on plain `localhost` unless `devFallbackBaseUrl` is set) | Two-column popover grid of separate app origins — `SideBar`'s `otherApps` is the legacy predecessor; don't wire both into one shell |
260
+ | Floating Jira-style dialog to view/edit one record without leaving the page | `WorkspaceWindow` | Modal-based floating panel, not page navigation; pairs with `WorkspaceTray` |
261
+
262
+ ### File pickers — `FileUpload` vs `FileUploader`
263
+
264
+ | Need | Component | Why |
265
+ | --- | --- | --- |
266
+ | Real `File`/Blob objects to actually upload (FormData/API) | `FileUpload` | Controlled; `onFilesUploaded` carries real `File[]` and validates accept/size with rejection messages |
267
+ | Self-contained "add photos, see thumbnails, remove" list with no server upload | `FileUploader` | Manages its own state; its `onFilesChange` metadata discards the real `File` — see gotcha below |
268
+
269
+ Both files declare a type named `FileUploaderProps`. The one at the package root describes `FileUpload` (`FileUpload/FileUploadProps.tsx`); `FileUploader`'s own props type (`FileUploader/FileUploaderProps.tsx`) is not exported, only its `UploadedFile`. Check which folder a type came from before trusting the name.
270
+
271
+ ### Viewing files — `MediaViewer` / `FilePreview` / `PdfViewer` / `ProfilePhotoViewer`
272
+
273
+ Four components open a file, and only one of them is the general answer.
274
+
275
+ | Need | Component | Why |
276
+ | --- | --- | --- |
277
+ | A gallery of mixed media with next/prev, a filmstrip and per-type stages | `MediaViewer` | The full lightbox: image/video/audio/pdf/doc stages, keyboard nav, fullscreen, download. Collapses the filmstrip and stepper automatically for a single item |
278
+ | One file, click-to-open, no gallery | `FilePreview` | Lighter controlled modal; auto-detects type, zoom/rotate for images |
279
+ | Always-visible inline PDF panel in the page flow | `PdfViewer` | Non-modal, PDF-only, small open/download toolbar; `getBlob` for files behind auth |
280
+ | Crop/preview a user avatar | `ProfilePhotoViewer` | Avatar-specific, not a general file viewer |
281
+
282
+ `PdfViewer` shows a fallback when the browser cannot render a PDF inline (`navigator.pdfViewerEnabled === false`) or `getBlob` rejects; `FilePreview`'s `"pdf"` kind renders a bare `<embed type="application/pdf">` and tells you nothing. `MediaViewer` also handles it: formats a browser cannot decode (`.avi`, `.mkv`, `.m3u8`, `.heic`, `.heif`) render an icon and a file-type chip with a download action instead of a blank frame.
283
+
284
+ `MediaViewer.labels` takes a `Partial<MediaViewerLabels>` — that type and `defaultMediaViewerLabels` are both exported from the package root, so you can merge rather than restate every string.
285
+
286
+ `MediaViewer`'s `index`/`onIndexChange` are now optional: omit both for uncontrolled (it owns the index, starting at `defaultIndex ?? 0`), or pass both to control it. Passing `index` without `onIndexChange` freezes the viewer — every nav path has nowhere to write the new index — and now warns loudly in dev.
287
+
288
+ ### `HeaderActionsProps` describes a different component than `HeaderActions`
289
+
290
+ The value `HeaderActions` comes from `Components/Header/HeaderActions.tsx`, which declares its props inline. The type `HeaderActionsProps` re-exported from the package root comes from `Components/Table/TableProps.tsx` — the *table's* internal bulk-action bar. Typing a `HeaderActions` usage with `HeaderActionsProps` compiles into the wrong shape.
291
+
292
+ **Apply:** don't annotate `HeaderActions` with `HeaderActionsProps`. Let the props infer from the component, or use `React.ComponentProps<typeof HeaderActions>`. Same trap as `FileUploaderProps` above — check which folder a type came from before trusting the name.
293
+
294
+ ### Confirm prompts — `ConfirmDialog` vs `AlertDialog` vs `Modal`
295
+
296
+ | Need | Component | Why |
297
+ | --- | --- | --- |
298
+ | A delete/deactivate prompt with a header swatch and a red Confirm | `ConfirmDialog` | The shared shape behind the library's confirm modals; `tone="destructive"` (the default) fills Confirm red |
299
+ | A simple two-button yes/no | `AlertDialog` | Lighter; `confirmButtonText`/`cancelButtonText`, `tone="danger"` for a red Confirm |
300
+ | Anything else | `Modal` | Named slots only — see the slot gotcha below |
301
+
302
+ **`ConfirmDialog.onConfirm` does not close the dialog.** It fires and nothing else; you call `onClose` yourself. That is deliberate — it lets you keep the dialog open while an async delete is in flight — but a handler that only calls your delete function leaves the dialog on screen with no error.
303
+
304
+ `iconBg` and `iconColor` are optional and derive a soft tint from `tone`; if you pass them, read them from `useCustomTheme()` — a hardcoded hex is stuck in light mode. For a delete that names the record, pass `entityName` (+ `entityKind`, `dependents`, `consequence`, `alternative`) instead of hand-building the body; focus opens on Cancel, never the destructive button, and `focusCancelOnOpen={false}` moves it to the close button, not Confirm.
305
+
306
+ ### Busy indicators — `Spinner` vs `Backdrop` vs `Loading`
307
+
308
+ | Need | Component | Why |
309
+ | --- | --- | --- |
310
+ | Inline busy mark in a row, cell or button area | `Spinner` | The package-root `Spinner` is the themed one (accent colour, own xs–xl `size` scale), not Chakra's raw spinner |
311
+ | **Scrim over the page or one panel — the default for new work** | **`Backdrop`** | `variant="dim"` by default: black at 0.5, no blur, 225ms in / 195ms out, 40px spinner. `container` scopes it, `onClick` dismisses, `invisible` blocks without painting |
312
+ | Let clicks reach the page while a scrim is showing | `Backdrop allowBackgroundInteraction` | Drops `pointer-events` on the scrim **and** its transition wrapper. `onClick` cannot fire while set — that is the trade |
313
+ | Existing screens already using it | `Loading` | The older API. Its default `variant="frosted"` keeps the heavier house scrim (0.6 + 4px blur) so nothing shifts; `variant="dim"` routes it through `Backdrop` |
314
+
315
+ **Never hand-roll a scrim.** A `position: fixed` `Box` with your own `rgba()` will not match the
316
+ Modal/Drawer overlay, will not fade, and will not follow dark mode. `Backdrop` is the one owner.
317
+
318
+ One trap if you build anything similar yourself: setting `pointer-events: none` on your overlay is
319
+ not enough when the overlay sits inside a transition wrapper — the wrapper keeps capturing clicks.
320
+ `Backdrop` sets it on both.
321
+
322
+ ### Data states — `EmptyState` / `ErrorState` / `QueryStateBoundary`
323
+
324
+ | Need | Component | Why |
325
+ | --- | --- | --- |
326
+ | "Nothing here yet" with an optional action | `EmptyState` | Neutral placeholder |
327
+ | "Nothing matches your filters" | `FilteredEmptyState` | Names the filters, offers Clear and Remove-last; in a boundary use `isEmpty` + `isFiltered` |
328
+ | A failed load with retry | `ErrorState` | `role="alert"`, `onRetry`/`isRetrying` built in |
329
+ | One fetch that can be loading, forbidden, failed, empty or ready | `QueryStateBoundary` | Picks for you: loading > forbidden > error > empty > `children` |
330
+
331
+ ---
332
+
333
+ ## Known gotchas (silent failures)
334
+
335
+ ### `withTheme` mounts a full provider stack per wrapped instance
336
+
337
+ Each wrapped component gets its own `ChakraProvider` (CSS reset, global styles, CSS variables), `ToasterProvider` and `ColorModeScript`. Wrap the app root once with `PixelizeThemeProvider`; never wrap list items or repeated rows.
338
+
339
+ ### `SearchSelect` with `insideSelect` shows a second `role="listbox"` while open
340
+
341
+ A test that finds the main dropdown with `getByRole("listbox")` must now pick it by id (`<id>-listbox`).
342
+
343
+ ### `ChoiceCardGroup`'s children must be `ChoiceCard` elements
344
+
345
+ A wrapper component hides each card's `value` and `disabled` / `isDisabled` from the roving tab stop, so with
346
+ nothing selected the group has no Tab stop at all (same rule as `PaymentOptionGroup` / `AddressCardGroup`).
347
+ `ChoiceCard` takes `disabled` or its `isDisabled` alias; `AddressCard` and `PaymentOption` still take
348
+ `disabled` only. The group is a column; `columns={n}` (n above 1) lays it out as an n-column grid.
349
+
350
+ ### `Pagination` never resets `page` for you
351
+
352
+ An out-of-range `page` (a filter shrank the result) is displayed clamped but never reported, and changing
353
+ rows per page does not reset `page` either. Reset it yourself, in `onPageSizeChange` and when the filters change.
354
+
355
+ ### A component with a behaviour its props do not hint at
356
+
357
+ - `NoteTextArea`'s `handleCancel` always receives `false`, and `handleSubmit` is called with three arguments although its type declares a fourth (both tagged `@deprecated`).
358
+
359
+ ### Where `ref` lands, and what does not take one
360
+
361
+ `Checkbox`, `RadioButton`, `ToggleSwitch` and `DatePicker` (every mode) forward to the native `<input>`.
362
+ `SegmentedControl` forwards to the radiogroup `<div>`, not a segment; `Tab` to its tab `<button>` (`Tabs`
363
+ itself takes no ref); `Avatar` to the outer box; `Tag` to its root, which is a `<button>` only for
364
+ `display="dot"` with `onTagClick`, so type that ref as `HTMLElement`. `PinInput`, `FileUpload`,
365
+ `SettingRow` and `Tabs` do not forward a ref.
366
+
367
+ ### Root attributes on the page primitives, and `Skeletons` props that are ignored
368
+
369
+ `PageHeader`, `StatCard`, `SaveBar`, `EmptyState`, `DescriptionList`, `FilterBar` and `Skeletons` put
370
+ `className`, `style`, `id`, `data-*` and `aria-*` on their outermost element. `StatCard` applies
371
+ `aria-label` only when `onClick` makes it a button; `DescriptionList`'s loading grid keeps its own
372
+ `aria-label="Loading"`. `Skeletons` still accepts `alignSelf` and `flexShrink`, now `@deprecated`, but never
373
+ applies them; wrap it in a `Box` to position it.
374
+
375
+ ### `Table` `HeaderActions` item with `customComponent` and `onClick` is mouse-only unless the custom component is focusable
376
+
377
+ The wrapper is deliberately not a button; make the custom component a button, or the action cannot be reached from the keyboard.
378
+
379
+ ### Defaults changed in 2.4.2-beta.44 — read this first when upgrading from beta.43
380
+
381
+ | Component | beta.43 → beta.44 | Restore the old look |
382
+ | --- | --- | --- |
383
+ | Fields, selects, buttons (`Button`, `TextInput`, `InputTextArea`, `NumberInput`, DatePicker family, `Select`, `SelectV2`, `SearchSelect`, `SelectSearch`, `Search`, `Dropdown`, `SegmentedControl`) | Default size `md` → `sm`. Fields/selects read `CONTROL_SIZES` (xs 32 / sm 38 / md 40 / lg 48); `Button`/`SegmentedControl`/`Tabs`/`TableToggle`/`Dropdown`'s trigger read the separate `BUTTON_SIZES` (xs 24 / sm 32 / md 40 / lg 48). `SegmentedControl` has no `xs` — see the gotcha below | `size="md"` |
384
+ | `Button` | Text one step smaller (sm 14→13px, md 16→14, lg 18→16). Busy = spinner only, width kept (was "Loading" + spinner). Outline: 1px border, hover is a tint, not a fill | `loadingText="Loading"` |
385
+ | `Tag` | `solid`/`md` → `subtle`/`sm`. Hover + pointer only with `onTagClick`; `maxW` truncates with the full text as a title. Exact heights 20/24/28/32, weight 500, 1px inset ring (never adds height); subtle is a light tint with ink ≥ 6:1 | `variant="solid" size="md"` |
386
+ | `resolveSoftTone` | `bg`/`border` are now translucent (alpha hex) — composite onto the surface before `contrastRatio`; optional 3rd `surface` arg; adds `hoverBg`/`activeBg`. Badge/Alert/Toaster/EmptyState follow | — |
387
+ | `resolveFilledSurface` | Still white-first; when a white-labelled fill would vanish on the canvas (zinc dark primary) it falls back to a light fill with dark ink. Takes `background` in `colors` now | — |
388
+ | `Checkbox` / `RadioButton` | Box 16/20/24 → 14/16/20; label 14px; 1px border; one fill rung for every `colorScheme`. **`RadioButton colorScheme` now applies** (was always primary) | — |
389
+ | `ToggleSwitch` / `SegmentedControl` / `TableToggle` | Off track lifted to 3:1; thumb ink flips on light fills. Radius `lg`; `TableToggle` tooltips = button names, `aria-pressed` | — |
390
+ | `MultiSelect` | Default `md` → `sm`; real `<label>`; shared two-tone focus ring | `size="md"` |
391
+ | Selected rows (`Dropdown`, `SelectV2`, `SearchSelect`, `SelectSearch`, `MoreItems`, `Table` filters, menus) | Dark aliases `backgroundColor.tertiary` to the panel, so a selected row sat at 1.025:1 and was invisible. It is now lifted to a perceptible step. Light is byte-identical on eight brands; `zinc` moves slightly, having been below the step too | — |
392
+ | `tertiary` | Was an exact copy of `secondary` on six brands and of `primary` on three, so `colorScheme="tertiary"` rendered as another scheme. Now a real third accent: `primary`'s hue turned 60° at `secondary`'s luminances, so contrast is unchanged | use `secondary` |
393
+ | `SelectV2` | Trigger is now `div[role=combobox]`, not `<button>` — widen a `useRef<HTMLButtonElement>` to `HTMLDivElement`; assert `aria-disabled`, not `toBeDisabled()`. `isMulti` shows removable `Tag` chips (`maxVisibleChips`, default 6, then `+N`); Backspace removes the last; `maxLabelsBeforeSummary` now only shapes the `aria-label`. Read-only is `data-readonly`, not `aria-readonly` | custom `renderValue` for text |
394
+ | `SearchSelect` / `SelectSearch` | Menu radius `lg` → `xl`, shadow `lg`. `SearchSelect`'s button triggers are now `role=button` named `"Label: value"`; only the text input is `role=combobox` — update `getByRole("combobox")` queries | — |
395
+ | `TextInput` | **`type="password"` now auto-renders a show/hide toggle** — a plain password field gains a button it did not have in beta.43. Suppressed automatically when `inputRightIcon` is set, so a hand-rolled toggle never doubles up; `isPasswordToggleDisabled` opts out entirely. Also new: `variant` (`outline` default / `filled` / `flushed`), `isClearable`, `showCharacterCount` + `maxLength`, `inputLeftAddon`/`inputRightAddon`, `isLoading`. `inputStyle`/`leftElementStyle`/`rightElementStyle` are now `SystemProps` and `inputGroupStyle` is `CSSProperties` — all four were bare `object`, so a wrong key that used to compile now fails | `isPasswordToggleDisabled` |
396
+ | Chakra passthroughs | 34 barrel value exports (and 12 type exports) that duplicated an owned component were removed: `Input`, `Textarea`, `Progress`, `Radio`, `RadioGroup`, `Skeleton`, `ModalOverlay`, `ModalContent`, `ModalCloseButton`, `CardBody`, `ChakraCard`, `ChakraSelect`, `ChakraModal`(+`Body`/`Header`/`Footer`) the `Tabs`/`Accordion` families, and the Chakra slider sub-parts. `Tabs`, `Accordion` and `RangeSlider` now resolve to the library's own themed components (`RangeSlider` gained a real dual-thumb mode and a `marks` prop). Each removal is a compile error, never a silent swap | use the owned component — `TextInput`, `InputTextArea`, `ProgressBar`, `RadioButton`, `Skeletons`, `Modal`, `Card`, `Select` |
397
+ | `Avatar` / `AvatarGroup` | Now the library's own components, not Chakra passthroughs. `AvatarProps` is a closed list (`name`, `src`, `size` `2xs`–`xl`, `status`, `ariaLabel`, `getInitials`, `data-testid`) — Chakra style props and `2xl` no longer compile, and **`name` is now required `string`**, so a `user.name?: string` call site fails. The fill is derived from `name`, so stop passing `bg`/`color`; it follows brand and dark mode on its own. `AvatarGroup` takes `people=[{name, src}]`, not `<Avatar>` children, so it can build one accurate group label. Measured by typecheck: 13 of 18 consumer files break | wrap in a `Box` for placement/shadow; resolve `name` at the call site |
398
+ | `SettingsSection` | New optional `action` slot, right of the title/description on the header row — additive, nothing changes without it | — |
399
+ | `Button` | Icon-only buttons are square | — |
400
+ | `ProgressBar` | Fill lifted to ≥ 3:1 on its track — green/orange/blue/cyan are visibly darker in light mode | — |
401
+ | `PhoneNumberInput` | Default `size` `md` → `sm`, so it matches the `TextInput`s beside it | `size="md"` |
402
+ | `PhoneNumberInput` / `PinInput` / `NoteTextArea` | `ref` now attaches on `PhoneNumberInput` and `NoteTextArea` (`PinInput` takes none); labels bound; PIN digits grouped and named | — |
403
+ | `RangeDatePicker` | Outside click keeps a fully picked range (was discarded) | — |
404
+ | `FilePreview` / `ContactForm` | Radius `2xl` → `xl` | — |
405
+ | `Avatar` / `Timeline` / `Table` | Generated avatar fills now guarantee ≥ 4.5:1 initials (a name may get a different shade); Timeline rail lifted to 3:1; Table status/filter chips use the soft recipe; stray radii → `lg`/`xl`/`full` | — |
406
+ | `AlertDialog` | Yes/No → Confirm/Cancel; Cancel is a neutral gray outline (was red) | `confirmButtonText`/`cancelButtonText`; `tone="danger"` for a red Confirm |
407
+ | `Modal` | Page scroll now locks (`blockScrollOnMount` was silently off); `motionPreset="scale"`; theme scrim (60% black + blur) — drop any `overlaybackdropFilter` hue-rotate workaround; `isLoading` keeps header + close button | `blockScrollOnMount={false}` |
408
+ | `Toaster` | `showToast` returns an id; `update(id, patch)` / `close(id)`; `loading` toasts never auto-dismiss | pass `duration` |
409
+ | `ToolTip` | `openDelay` 0 → 300ms; 13px themed look | `openDelay={0}` |
410
+ | `InputTextArea` / `FileUpload` / `TextInput` | Width 500px → 100% / `maxSizeKB` 5 → 5120 / no default "Placeholder" text | `width="500px"` / — (5 KB was a bug) / — |
411
+ | `DatePicker` (no `pickerType`) | Inference is case-sensitive: `MM` is month, `mm` minutes. `dd/MM/yyyy` was misread as date+time and showed time selects; it is now date-only | `pickerType="datetime"` |
412
+ | `EmptyState` | Title is an `h3`; image is decorative (`alt=""`, was the title) | `titleAs`, `imageAlt` |
413
+ | Theme `Badge` / `Card` / field labels | Badge: pill, no uppercase, default `sm`. Card: default variant `elevated` (borderless, `shadows.card`). Label colour `text[700]`; helper/error row 12px | `size`/`variant` props |
414
+ | `Header` | `position: sticky; top: 0`, z-index `sticky` (1100); `rightSlot` mounts once, not per layout | — |
415
+ | `Table` | Radius `xl`; row height 32/40/52 by density; filter button is named "Filter {label}" (tests querying "Search" break); client pagination resets to page 1 when `data.length` changes | — |
416
+ | `KanbanBoard` | `height`/`maxH` props replace the clipping wrapper; `height="100%"` needs a parent with a definite height | — |
417
+ | `ProfileCard` / `SideBar` | `variant="outlein"` now draws an outline; header divider 1px `boxborder[200]` / mobile backdrop uses the shared scrim | — |
418
+ | `SideBar` | Scroll-container and submenu ids are generated (`useId`) — `#sidebar-scroll-container` / `#submenu-<label>` no longer exist; rail rows 32px (44px in the mobile overlay), submenu rows 28px; count badges use soft tone | — |
419
+ | `ToggleSwitch` | No `aria-required` on the switch (invalid for `role=switch`); `isRequired` still shows `*` | — |
420
+ | `KanbanBoard` / `PdfViewer` / `UserDetails` | Cards, drag handles and toolbar links get accessible names; scroll panels are focusable regions; `UserDetails` badges 12px | — |
421
+ | `NumberInput` / `FileUpload` | Steppers exactly half the field height; drop-zone border 1px (was 2px) | — |
422
+ | `HeaderActions` | Edit/Create are real `<button>`s (keyboard reachable, focus ring); select named by `select.ariaLabel` or its placeholder | — |
423
+ | `SearchSelect` | New `aria-label` prop for fields without a visible `label` | — |
424
+ | New root exports | `mergeRefs`/`setRef`, `rafThrottle`, `toWords`, `useDebouncedCallback`/`useDebouncedValue`, and the chart theming kit (`getCategoricalSeriesColors`, `chartInk`, `labelOnSeries`, …) — previously internal-only | — |
425
+ | `toWords` | Now splits camelCase (`nextFollowUp` → `Next Follow Up`), so `Timeline`/`KanbanBoard` auto-labels read correctly instead of `Nextfollowup` | pass an explicit label |
426
+ | Focus rings (all controls) | `focusRing.ring` is now the brand accent itself (lavender `#8B3FC8`), not a near-black band — the white halo already separates it from a filled control | — |
427
+ | `Tag` | Label line-height 1.45 so descenders (`p`, `g`, `y`) are no longer clipped by the ellipsis overflow | — |
428
+ | `Toaster` | `error` toasts announce assertively (`role="alert"`); status icons have a text equivalent | — |
429
+ | `FeedbackForm` | Built on `TextInput`/`InputTextArea`/`RadioButtonGroup`; required fields show `*` in the label | — |
430
+ | `PinInput` | `size` now works (square cells 32 / 38 / 40 / 48 today, default `sm`) — it was silently ignored | `size="md"` |
431
+ | `Tag` | New `leadingIcon` (decorative, before the label) and `isDisabled` (sets `aria-disabled` + native `disabled` on the clickable/remove buttons, so they leave the tab order — not just dimmed) | — |
432
+ | `ToolTip` | Defaults a Popper `preventOverflow` padding of 8px, so a bubble near the right edge no longer overhangs by a subpixel and raises page scrollbars. A caller-supplied `preventOverflow` modifier still wins | pass your own `modifiers` |
433
+ | `Table` / `KanbanBoard` | Column sort buttons and draggable cards now show the library focus ring on keyboard focus (was an opacity flicker / the browser default outline). Kanban card wrappers render as Chakra `Box`; keyboard drag (Space, arrows, Space) is unchanged | — |
434
+ | `Search` / `FilterBar` / `SettingRow` / `NoteTextArea` | `Search` names itself from `placeholder` when there's no `label`/`aria-label`. `FilterBar` wraps `search` in a `role="search"` landmark named by `searchLabel` (default "Search"). `SettingRow` auto-wires an unnamed `control` to the row's title/description via `aria-labelledby`/`aria-describedby` unless it already has its own `aria-label`. `NoteTextArea` adds `titleAriaLabel`/`noteAriaLabel` (default "Note title" / `customPlaceholder`) | — |
435
+
436
+ ### Removed barrel exports → what to import instead (beta.44)
437
+
438
+ Every name below stopped resolving from `pixelize-design-library` in beta.44. Each is a **compile
439
+ error**, never a silent swap, and each has an owned replacement that is already exported. Props
440
+ differ — this is a rewrite of the call site, not a rename.
441
+
442
+ | No longer exported | Import instead | Note |
443
+ | --- | --- | --- |
444
+ | `Input` | `TextInput` | Owns its label, helper/error text and password toggle |
445
+ | `Textarea` | `InputTextArea` | |
446
+ | `ChakraModal`, `ModalContent`, `ModalOverlay`, `ModalCloseButton`, `ChakraModalHeader`, `ChakraModalBody`, `ChakraModalFooter` | `Modal` | `Modal` renders the overlay, content and close button itself — drop those three. **`ModalHeader`/`ModalBody`/`ModalFooter` are still exported** and are still how you fill it; only the `Chakra`-prefixed aliases went. Header text can come from `title`/`subtitle` instead |
447
+ | `ChakraCard`, `CardBody` | `Card` | `header`/`footer` slots + `bodyProps` |
448
+ | `ChakraSelect` | `Select` | |
449
+ | `Radio`, `RadioGroup` | `RadioButton` / `RadioButtonGroup` | |
450
+ | `Skeleton` | `Skeletons` | Takes `borderRadius` |
451
+ | `Progress` | `ProgressBar` | |
452
+ | `AccordionItem`, `AccordionButton`, `AccordionPanel`, `AccordionIcon` | `Accordion` | Takes an `items` array, not compound children |
453
+ | `SliderTrack`, `SliderFilledTrack`, `SliderThumb`, `SliderMark` | `Slider` / `RangeSlider` | Owned components; the Chakra sub-parts are gone |
454
+
455
+ **Ten names still resolve** and only narrowed their props — `Accordion`, `Avatar`, `AvatarGroup`,
456
+ `RangeSlider`, `Spinner`, `Tab`, `TabList`, `TabPanel`, `TabPanels`, `Tabs`. They now point at the
457
+ library's own themed component rather than the Chakra passthrough.
458
+
459
+ ### `CONTROL_SIZES` (fields) and `BUTTON_SIZES` (buttons) are separate scales — changing one never changes the other
460
+
461
+ Fields/selects (`TextInput`, `Select`, `MultiSelect`, `SearchSelect`, `NumberInput`, `PinInput`, the
462
+ `DatePicker` family, …) read `CONTROL_SIZES` — xs 32 · sm 38 · md 40 · lg 48. `Button` and every
463
+ button-like trigger (`SegmentedControl`, `Tabs`, `TableToggle`, `Dropdown`'s trigger) read the
464
+ separate `BUTTON_SIZES` — xs 24 · sm 32 · md 40 · lg 48. They used to share one token, which is what
465
+ let a field-only size bump leak into buttons — the split is now gate-tested
466
+ (`Common/sizeScaleOwnership.test.ts`).
467
+
468
+ **Apply:** a PR that "just" bumps a form-field size should never touch `Button.styles.ts`,
469
+ `SegmentedControl`, `Tab`, `TableToggle` or `Dropdown` — if it does, it's reading the wrong token.
470
+
471
+ ### `controlSizeStyles()`'s `minH` silently overrides a smaller `h` override
472
+
473
+ `fieldStyles.ts`'s `controlSizeStyles()` sets both `h` and `minH` to the same token value. A caller
474
+ overriding only `h` with a smaller literal compiles and renders, but the inherited `minH` still
475
+ wins, so the field stays at the token height.
476
+
477
+ **Apply:** override both `h` and `minH` together, or don't override either.
478
+
479
+ ### `Tag`'s `onIconClick` renders nothing without `icon` — the remove button silently never appears
480
+
481
+ `onIconClick` only turns `icon` into a remove button; it has no effect on its own (`Tag.tsx`
482
+ `{icon && (onIconClick ? … : …)}`). Passing `onIconClick` alone — expecting a default close
483
+ affordance the way Chakra's own `TagCloseButton` or AntD's `closable` work — compiles fine and
484
+ renders a plain tag with no way to remove it.
485
+
486
+ **Apply:** always pass both `icon` (e.g. `lucide-react`'s `X`) and `onIconClick` together for a
487
+ removable chip. `icon` alone (no `onIconClick`) is the decorative case — a plain right-side icon
488
+ with no click affordance, aria-hidden.
489
+
490
+ ### `Tag display="dot"` ignores `variant` and icons; `StatusTag` renders an unknown status neutral
491
+
492
+ `display="dot"` ignores `variant`, `icon`, `leadingIcon` and `onIconClick`. `StatusTag`'s `map` is
493
+ keyed by your status union, but a runtime value outside it (API drift) renders a neutral chip and
494
+ only warns in development — guard upstream if a silent neutral would mislead.
495
+
496
+ ### A rounded box with `overflow: hidden` clips glyphs at the corners — never round the clipping element
497
+
498
+ `border-radius` reshapes the overflow clip, so a pill-shaped element with `overflow: hidden`
499
+ clips text along an **ellipse**, not a rectangle. A leading `p`, `j`, `g`, `q` or `y` loses part
500
+ of its descender to the bottom-left curve. It looks like a font or line-height problem; it is not.
501
+ This shipped in `Tag`, where the label carried both `borderRadius: "full"` (to round its focus
502
+ ring) and `overflow: hidden` (for `text-overflow: ellipsis`).
503
+
504
+ The two cannot live on the same element. `overflow-clip-margin` does not rescue it either:
505
+ `text-overflow: ellipsis` needs a non-`clip` horizontal axis, and mixing `hidden`/`clip` across
506
+ axes collapses both to `hidden`, which makes the margin inert.
507
+
508
+ **Apply:** keep the radius on the outer element and put `overflow: hidden` +
509
+ `text-overflow: ellipsis` on a square (`borderRadius: 0`) child. Chakra's `TagLabel` also forces
510
+ `noOfLines={1}` as a style prop, which outranks the theme — pass `noOfLines={undefined}` to drop
511
+ it. In your own components, the same rule holds for any rounded chip, avatar or badge that clips
512
+ its own text. The `/tag` playground's "Glyph clipping" section renders every letter leading and
513
+ trailing at all four sizes as the visual check.
514
+
515
+ ### `colorScheme="tertiary"` is a real third accent from beta.44 (it used to be a duplicate)
516
+
517
+ Through beta.43 `tertiary` was an exact copy of `secondary` on six brands and of `primary` on three,
518
+ so the two schemes were indistinguishable. It is now `primary`'s hue turned 60° re-solved to
519
+ `secondary`'s luminances, so every contrast guarantee is unchanged.
520
+
521
+ **Apply:** `secondary` vs `tertiary` is now a real visual distinction on every brand except `zinc`,
522
+ which is near-grey and has almost no hue to turn — use a semantic scheme (`blue`, `teal`, `purple`)
523
+ there if the two categories must read apart.
524
+
525
+ ### Brand palettes and non-default themes are lazy; library style functions may return cached objects
526
+
527
+ Before its first read, a brand palette or a non-default light theme is an object of getters. Reading
528
+ any key turns it into plain data; spread, `Object.keys`, JSON and assignment behave as before, but
529
+ `Object.getOwnPropertyDescriptor` reports an accessor until then. Style functions in a library
530
+ theme's `theme.components` receive props through a tracking Proxy and may return a cached object, so
531
+ never mutate what they return.
532
+
533
+ ### Reduced motion is per component unless the app passes `reducedMotion="global"`
534
+
535
+ The library's own animations honour `prefers-reduced-motion` one component at a time. For one
536
+ document-wide rule, pass `reducedMotion="global"` to `PixelizeThemeProvider`;
537
+ transitions and animations then collapse to one near-instant pass. Add `pz-motion-keep`
538
+ (`MOTION_KEEP_CLASS`) to any loop that is essential feedback; Chakra spinners and progress bars are
539
+ kept automatically.
540
+
541
+ A popup opened inside another popup takes `zIndex="popoverNested"` (1510), never `skipLink` (1600).
542
+ `fontSize="xs-plus"` is 13px, the control size; use it instead of a `13px` literal.
543
+
544
+ ### Your own overlay painted `background[50]` sinks into the dark canvas
545
+
546
+ In dark mode `background[50]` is the card plane, one step above the canvas; an overlay painted with it
547
+ merges into the cards under it. Library dialogs, drawers, popovers and menus paint `colors.surfaceRaised`,
548
+ one step above the card in dark and identical `#ffffff` in light. A custom panel, popover or
549
+ `ModalContent bg=` should read `surfaceRaised` too, and a divider inside it `raisedRule(colors)`.
550
+
551
+ ### Named fills nearly vanish on a dark card
552
+
553
+ In dark mode `backgroundColor.light`, `tertiary`, `medium` and `tableHeader` sit only 1.01-1.05:1 off
554
+ `background[50]`, `muted` 1.00-1.06:1 off `surfaceRaised`, and `boxborder[200]` 1.10-1.16:1 off a card and
555
+ 1.00-1.06:1 off `surfaceRaised`. Never paint a named canvas fill or raw `boxborder[200]` on a card or overlay:
556
+ use `bandOn(fill, surface)` for a header strip, hover or selection tint, `recessOn(fill, surface)` for a shaded
557
+ or off cell, `cardRule(colors)` for a rule inside a card and `raisedRule(colors)` for a rule inside an overlay.
558
+ All four return the old value unchanged in light mode.
559
+
560
+ ### A Chakra `ModalHeader` inside a coloured box keeps its own ink
561
+
562
+ The theme gives `ModalHeader` `color: colors.header[900]` and a bottom rule. Wrapping it in a
563
+ `Box bgGradient=… color={ink}` does not recolour it: the header paints `header[900]` itself, so the
564
+ title is dark navy on a blue/purple gradient (3.11–4.11:1 in light across the 9 brands, against
565
+ 4.62:1 for the gradient's own ink). Icons and badges inside it that read `currentColor` follow the
566
+ header, not the box.
567
+
568
+ **Apply:** put the ink on the header itself — `<ModalHeader color={resolved.ink} borderBottomWidth={0}>`
569
+ with `resolved = resolveGradient(stops, colors.white, colors.black)` — or use `LimitReachedModal`.
570
+ For an accent icon on the gradient, use `resolved.ink` unless the accent clears 3:1 on both
571
+ `resolved.from` and `resolved.to`; a theme `yellow[300]` drops to 2.61:1 in dark.
572
+
573
+ ### `Drawer` / `Modal` / `ProfileCard` drop any child that isn't a named slot — use `portalChildren`
574
+
575
+ All three match children by exact type (`child.type === XHeader/XBody/XFooter`) and render only
576
+ those matches — nothing else in `children` is ever read. A sibling among the slots (a nested
577
+ `Modal`, `AlertDialog`, a confirm dialog, a live region) silently never mounts; dev builds of all three
578
+ warn once per dropped child type. All three
579
+ look through `<>...</>` Fragments around a slot, at any depth (so `<>{cond && <DrawerFooter>...}</>` still renders)
580
+ and spread styling props (`padding`, `borderBottom`, `sx`, …) from the matched slot onto the real
581
+ header/body/footer — any other wrapper element still drops the slot.
582
+
583
+ **Apply:** pass a nested confirm dialog, toast host or live region to `Drawer` / `Modal` as
584
+ `portalChildren`. It renders **inside** the dialog content after the slots (a sibling in the portal
585
+ would be `aria-hidden` by Chakra, so a live region there is never announced); a nested `AlertDialog`
586
+ portals out on its own, stacks above and returns focus. It unmounts with the dialog, so reset its
587
+ open state when the parent closes. `ProfileCard` has no such prop — keep its confirm dialog outside,
588
+ as a sibling in a wrapping fragment. When a ternary picks between bodies, branch into a variable
589
+ rendered inside one body slot, rather than returning fragment-wrapped slots per branch. `Drawer`'s
590
+ misspelled `vaiant` is `@deprecated` — use `variant`.
591
+
592
+ A `Drawer` with no `DrawerHeader` is an unnamed dialog (axe `aria-dialog-name`) unless you pass its own
593
+ `aria-label` or `aria-labelledby`; dev builds warn once when it opens. `contentProps["aria-labelledby"]` is
594
+ overwritten, so it never names the drawer (`contentProps["aria-label"]` is kept).
595
+
596
+ ### `FormDrawer` has no browser validation, and its submit button sits outside the `<form>`
597
+
598
+ It sets `noValidate`: validate in `onSubmit` and pass messages via `errors`. Error-summary focus
599
+ fires only after a submit; if validation is async, set `isSubmitting` synchronously in `onSubmit` so
600
+ focus waits for the result, otherwise errors that arrive later are not focused. The footer submit
601
+ button is tied to the form with the `form` attribute — Enter-to-submit works in browsers, but
602
+ jsdom / user-event only simulates it for a form with exactly one text field, so use
603
+ `fireEvent.submit(form)` in tests. `isSubmitDisabled` swallows both: `onSubmit` is not called while it is true.
604
+
605
+ ### `QueryStateBoundary` evaluates JSX `children` even while loading
606
+
607
+ JSX children are built before the boundary decides what to show, so `data.items.map(...)` crashes
608
+ while `data` is still `undefined`. **Apply:** pass `children` as a function — `{() => <List
609
+ items={data.items} />}` — whenever it reads data that may not exist yet.
610
+
611
+ ### `QueryStateBoundary` `isForbidden` and `hasData`
612
+
613
+ An `isForbidden` function is only called when `error` is set (never with `undefined`); `isForbidden:
614
+ true` shows the panel even with no error. `isLoading` + `hasData` keeps `children` visible during a
615
+ refetch, so pass `hasData` only when data is genuinely loaded — otherwise a first load shows a blank
616
+ region.
617
+
618
+ ### `StatCard`'s delta colour follows `trend` vs `goodDirection`, not `trend` alone
619
+
620
+ Green when `trend === goodDirection`, red otherwise — a falling cost with `goodDirection="down"` is
621
+ green. Pass `onClick` for a clickable card (it renders its own `<button>`); never wrap it in one.
622
+
623
+ ### `CircularProgress` `tone="info"` is the brand primary, not blue
624
+
625
+ Unlike `Tag` (`tone`) and `StatCard` (`iconTone`), where `info` is blue, the default `tone="info"` here paints the brand
626
+ primary scale. `aria-label` is required — the ring has no visible caption.
627
+
628
+ ### `TextInput variant="filled"` has no border, only a fill that barely separates it
629
+
630
+ `filled` draws no resting border (`borderColor: "transparent"`), so the field's edge is the fill
631
+ alone. That fill sits well under
632
+ the 3:1 that WCAG 1.4.11 asks of a control boundary, in light and dark. The focus ring
633
+ and the invalid border still show, but a resting empty field can be hard to find.
634
+
635
+ **Apply:** use the default `variant="outline"` for any form a person must find and fill in. Keep
636
+ `filled` for fields whose position is already obvious from the layout.
637
+
638
+ ### A clickable `TextInput` icon is a real button — give it a name
639
+
640
+ With `onRightIconClick`/`onLeftIconClick` the icon renders as a `<button>`. Without
641
+ `rightIconAriaLabel`/`leftIconAriaLabel` it is announced as "{label}: right icon action".
642
+
643
+ ### `SelectSearch`'s `isRequired` shows the asterisk but never announces "required"
644
+
645
+ `SelectSearch` sets `aria-required` by hand on its Chakra `Input`, but Chakra's `useFormControl`
646
+ re-adds its own `"aria-required"` key *after* spreading your props, computed from the surrounding
647
+ `FormControl`. That `FormControl` is never given `isRequired`, so the attribute is recomputed as
648
+ undefined and stripped. Verified by DOM dump: the rendered `<input>` carries no `aria-required`
649
+ even when `isRequired` is passed. The visible asterisk comes from a separate custom label, so the
650
+ field *looks* required to sighted users and is silent to a screen reader.
651
+
652
+ **Apply:** prefer `Select` (`native={false}`) for new work — `SelectSearch` is not deprecated, but `Select` marks required
653
+ state on a plain `Box` combobox that Chakra does not rewrite. If you must stay on `SelectSearch`,
654
+ set the required state on your own wrapping `FormControl`. Note the obvious one-line fix inside the
655
+ component is not neutral: Chakra's `useFormControl` also emits native `required`, which would add
656
+ browser validation to a *filter* input that was never submitted before.
657
+
658
+ ### `Select` with `onSearchChange` no longer filters locally (beta.48)
659
+
660
+ Passing `onSearchChange` means the server owns matching, so `Select` stops applying its own
661
+ substring filter to `options`. Before this, a fuzzy or ranked server result whose label did not
662
+ literally contain the typed text was fetched and then hidden. Pass `filterOptions={true}` to keep
663
+ the local pass on top, or `filterOptions={false}` to drop it even without `onSearchChange`.
664
+
665
+ **Apply:** if a server-backed `Select` suddenly shows more rows than it used to, that is this fix,
666
+ not a regression. Paged `Select`s should also pass `hasMore={false}` once the last page lands —
667
+ without it, `onLoadMore` fires again every time the user reaches the bottom.
668
+
669
+ ### `Select` with `isMulti` keeps picks that leave `options` (beta.48)
670
+
671
+ `onChange` used to be built from the options currently in the list, so replacing `options` with a
672
+ server-search result silently dropped every earlier pick the new page did not contain — the chips
673
+ vanished and the next selection emitted a truncated array. Selected options are now remembered
674
+ independently of `options`.
675
+
676
+ **Apply:** nothing to change. If you worked around this by merging the old selection back in
677
+ yourself, that workaround is now redundant.
678
+
679
+ ### `Table`'s column search covers every page (beta.48)
680
+
681
+ The per-column search box used to run after the page slice, so it matched only the rows on screen
682
+ while the pager still counted the whole data set. It now runs first: the page count, the
683
+ `1 - 20 of N` readout and the rows all come from the matched set, and a new search returns to page
684
+ 1. Under `paginationMode="server"` the client still only sees the loaded page — filter on the
685
+ server there.
686
+
687
+ **Apply:** a client-side table that looked like it had "no matches" past page 1 now finds them.
688
+
689
+ ### A button inside a `Select` `renderOption` row selects the row — use `optionAction`
690
+
691
+ `renderOption` output sits inside `role="option"`, whose click selects. A `<button>` you place in it bubbles to the row
692
+ (and fails axe `nested-interactive`, since options are presentational children). Pass `optionAction={{ icon, label, onAction }}`
693
+ instead: it renders a pointer-only, `aria-hidden` control that calls `onAction(option)` and stops the click. It is not
694
+ focusable, so give keyboard users the same action elsewhere.
695
+
696
+ ### `Select`'s `onChange` never fires for the built-in placeholder
697
+
698
+ `Select` resolves the changed value against its `options` list and calls `onChange` only on a hit.
699
+ The built-in `placeholder` renders as its own empty-value option, which isn't in `options` — so
700
+ picking it resolves to no match and nothing fires. An "Any / All / None" reset built on the
701
+ placeholder alone is a dead control; the value snaps back and no filter clears.
702
+
703
+ **Apply:** fine for a plain pick-one-of-N. For a clearable filter, add an explicit
704
+ `{ id: "", label: "Any" }` entry to `options` instead of relying on the placeholder. With
705
+ `isReadOnly`, `onChange` never fires at all.
706
+
707
+ ### `MultiSelect` is an email-chip input, not a picker
708
+
709
+ Despite the name, `MultiSelect` takes **no `options` prop at all**. Typed text is validated as an
710
+ email address and rejected if it doesn't match — there is no way to choose from a product/entity
711
+ list.
712
+
713
+ **Apply:** use `Select` with `isMulti` to pick multiple values from an options list.
714
+
715
+ ### `Table`'s `onRowClick` is dead if every column has a `node` renderer
716
+
717
+ Row-click is gated **per column**, not per row: a column supplying a custom `node` renderer
718
+ swallows the click on that cell. Give every column a `node` and `onRowClick` becomes dead code —
719
+ accepted, typed, never called.
720
+
721
+ **Apply:** leave at least one column without a `node`, or put an explicit control inside a `node`
722
+ renderer instead of relying on row click.
723
+
724
+ Setting `onRowClick` makes every row a tab stop: Enter or Space on the focused row (not on a checkbox,
725
+ button or link inside it) fires `onRowClick` with the first visible column that has no `node`. A table
726
+ without `onRowClick`, one whose every column has a `node`, and a table that is `isLoading` get no tab
727
+ stop. The column resize handle is a bare `div` with a `mousedown` handler and is unreachable by keyboard.
728
+
729
+ **Apply:** expect one extra Tab stop per row once you pass `onRowClick`, and update any tab-order test.
730
+ Controls inside a row keep their own keys; give a `node` column a real `Button` or link for the actions
731
+ that must not depend on the row.
732
+
733
+ ### `Table.renderRowDetail` runs for every row on every render, and `expandedRows` ids match strictly
734
+
735
+ It decides whether each row gets a chevron, so an inline function re-renders every row (defeating
736
+ `TableRow`'s memo) — wrap it in `useCallback` / `useMemo`. `expandedRows` ids compare with `===`, so
737
+ `1` and `"1"` are different: keep the id type the same as `row.id`. It is not the older
738
+ `row.content` + `isContent` expander (chevron before the checkbox, index-based); both can coexist,
739
+ but only `row.content` still disables grouped virtualisation.
740
+
741
+ ### `error` without `errorMessage` shows no message — and erases `helperText`
742
+
743
+ Every field that shows validation errors (`TextInput`, `InputTextArea`, `Select`, `MultiSelect`,
744
+ `SelectV2`, `SearchSelect`, `SelectSearch`, `Search`, `Checkbox`, the `DatePicker` variants,
745
+ `PhoneNumberInput`) turns the border red and sets `aria-invalid` when `error` is `true` but renders
746
+ no message when `errorMessage` is empty. Worse, `helperText` only renders when `!error` — so the
747
+ guidance disappears exactly when it's needed, leaving a red field with no text.
748
+
749
+ **Apply:** never pass `error` without `errorMessage`. Gate `error` on a `touched` flag so a field
750
+ whose defaults arrive asynchronously doesn't open already red.
751
+
752
+ ### A wrapper presetting a prop must destructure with a default, not rely on JSX prop order
753
+
754
+ Wrapping a library component to preset a prop (e.g. `Table`'s `variant`) as
755
+ `<Table variant="classic" {...props} />` silently reverts to the library's own default the moment a
756
+ caller passes `variant={undefined}` — a later spread always wins in JSX, even with `undefined`,
757
+ and the library component resolves that `undefined` via its own default parameter.
758
+
759
+ **Apply:**
760
+ ```tsx
761
+ const AppTable = ({ variant = 'classic', ...props }: TableProps) => <Table variant={variant} {...props} />;
762
+ ```
763
+ Applies to any library prop with a default value, not just `Table`'s `variant`.
764
+
765
+ ### `FormWrapper` forwards extra props to the outer wrapper only
766
+
767
+ `id`, `data-*`, `aria-*`, `className`, `style` and handlers land on the outermost `Box`; the bordered content `Box`
768
+ receives nothing, and `children` is not type-matched.
769
+
770
+ **Apply:** put a margin override on `FormWrapper` itself (`className`/`style`); there is no prop for the content box's padding or border.
771
+
772
+ ### `ContactForm`'s `apiKey` prop is a POST URL, not an auth token
773
+
774
+ Despite the name, `apiKey` is the fallback submit endpoint: only when no `onSubmit` is given, the form
775
+ does `fetch(apiKey, { method: "POST", headers: { "Content-Type": "application/json" }, body })` — never a
776
+ credential header. With both set, `onSubmit` wins and `apiKey` is never fetched. With neither, submit
777
+ shows an inline "API key missing" alert. A real API key/secret fails as an invalid URL or a non-OK
778
+ response, surfaced only as a generic "Failed to send message" alert, and there is no `headers` prop.
779
+
780
+ **Apply:** pass the full POST URL, never a token. If the endpoint needs auth headers, pass `onSubmit`
781
+ and make the request yourself.
782
+
783
+ ### `ContactForm` can't tell its parent the submission result
784
+
785
+ It renders its own success/error alert from local state and has no `onSuccess` or `onError` prop. The
786
+ only hook is `onSubmit(payload)`, which replaces the `apiKey` fetch: it is awaited, a resolve shows the
787
+ success alert and clears the form, a throw shows "Failed to send message". The `apiKey` path tells the
788
+ parent nothing. Separately, the email field is validated for format but its "required" check is
789
+ commented out, so a blank email submits successfully with no error shown.
790
+
791
+ **Apply:** to redirect, toast or update state when the enquiry sends, pass `onSubmit` and do it there
792
+ (rethrow to show the failure alert). Don't rely on `email` being enforced as required — validate it
793
+ yourself first if that matters.
794
+
795
+ ### `VerifyEmailOtp` can't accept alphanumeric codes, and appends "your new Pixel Account"
796
+
797
+ It wraps Chakra's `PinInput` without forwarding a `type`, so Chakra's `type="number"` default
798
+ applies — any letter typed is silently rejected (the character never appears, no error shown).
799
+ `VerifyEmailOtpProps` has no `type` field and no `...rest` escape hatch. Its `description` also gets
800
+ a second line, "your new Pixel Account", unless you pass `subtitle` (`""` drops it).
801
+
802
+ **Apply:** only use this component for numeric-only OTPs. Always pass `subtitle` outside the Pixel Account
803
+ product; for a non-English UI pass `labels`. For an alphanumeric code build the card from `PinInput`.
804
+
805
+ ### `ApexLineChart` only ever renders one line, frozen at mount
806
+
807
+ `data`/`series` changes after the first render are silently ignored unless the component remounts
808
+ (no effect syncs later prop changes into state); `series` only reads index 0 for the line's name
809
+ despite the plural name; `variant="realtime"` replaces your data with random numbers on an interval
810
+ rather than animating it. Its `legendStyle` prop also type-checks but has no effect, unlike the
811
+ identical prop on `ApexPieChart`/`ApexPolarCharts`.
812
+
813
+ **Apply:** remount (`key`) `ApexLineChart` when the underlying data changes. Don't use
814
+ `variant="realtime"` expecting it to reflect a live feed.
815
+
816
+ ### `ApexPieChart`'s `showDataLabels` can be silently overridden by chart height
817
+
818
+ With the default `labelPlacement="auto"`, a **numeric** `height` under 240 forces labels off even
819
+ with `showDataLabels={true}` — no warning. Slices under `minLabelPercent` (default 8%) render blank
820
+ label text rather than being hidden as a unit.
821
+
822
+ **Apply:** pass `labelPlacement="inside"`/`"outside"` explicitly for small numeric-height charts;
823
+ lower `minLabelPercent` when every slice needs a visible value.
824
+
825
+ ### `ApexBarChart` and `ApexAreaChart` silently drop `data` when `series` is also passed
826
+
827
+ `series` always wins over `data` with no warning, on both components — a natural mistake when
828
+ migrating from single- to multi-series. Separately, `ApexBarChart`'s `barColor` array only paints one
829
+ color per bar when `distributed={true}`; with the default `false`, every bar takes `barColor[0]` and
830
+ the rest of the array is silently unused. `ApexRadialChart`'s `hollowSize` has its own unrelated trap
831
+ — it's silently overridden to a fixed `"52%"` whenever `variant="multi"`.
832
+
833
+ **Apply:** never pass `data` and `series` together on `ApexBarChart`/`ApexAreaChart`. Set
834
+ `distributed` whenever `ApexBarChart`'s `barColor` has more than one color. Don't expect
835
+ `ApexRadialChart`'s `hollowSize` to apply under `variant="multi"`.
836
+
837
+ ### `Skeletons`' `isLoaded` and `borderRadius` only work for `type="skeleton"`
838
+
839
+ `type="circle"`/`"text"` never receive `isLoaded`, `borderRadius` (or `children`/`bg`/`color`/
840
+ `fadeDuration`) — passing them compiles and is silently dropped; the shimmer never stops no matter
841
+ what `isLoaded` is set to. Neither `Skeletons` nor `ProgressBar` forwards a `ref`; `ProgressBar`'s
842
+ `color` is `@deprecated` (use `colorScheme`).
843
+
844
+ **Apply:** for `circle`/`text`, control visibility by conditionally rendering the `Skeletons` element
845
+ itself, not via `isLoaded`.
846
+
847
+ ### Five exports start with `Notification` and only one of them is a notification tray
848
+
849
+ Autocomplete offers `Notification`, `NotificationBell`, `NotificationPanel`, `NotificationList` and
850
+ `NotificationItem`. They are not a family — `Notification` is a standalone countdown card from a
851
+ different era, and picking it for an inbox row is the common mistake.
852
+
853
+ | Export | What it actually is |
854
+ | --- | --- |
855
+ | `NotificationBell` | The badge/bell button only. Requires `aria-label`; it renders no list |
856
+ | `NotificationPanel` | The tray the bell opens — zones, filters, loading/error/empty/data |
857
+ | `NotificationList` | The panel's scrolling body without the panel chrome — owns the day bucketing and `groupKey` collapsing |
858
+ | `NotificationItem` | One inbox row: the tone-driven chassis the list paints for each item |
859
+ | `Notification` | **Not deprecated.** A dated countdown card — its dot colour comes from `dueDate`/`endDate` math, not from a tone. `NotificationItem` cannot replace it: `formatRelativeTime` clamps every future date to "Just now" |
860
+
861
+ `Notification` is kept only because nothing else does that date-driven countdown; it is not a thin
862
+ alias, so it has not been removed.
863
+
864
+ **Apply:** for a notification tray use `NotificationBell` + `NotificationPanel`. For rows inside your
865
+ own layout use `NotificationList` or `NotificationItem`. Reach for `Notification` only when you
866
+ specifically want the deadline-countdown card, and read the gotcha below before you do.
867
+
868
+ ### `Notification`'s `onClick` only reaches the title text, and its status dot has two gates
869
+
870
+ `onClick` is wired solely to the title text — the card, avatar, and description are not clickable
871
+ despite the generic prop name. Separately, `warningColor`/`errorColor`/`successColor` only take
872
+ effect when `showStatus` is also `true`, and populating `notification.status` (e.g. `"blocked"`) has
873
+ no effect at all — the dot's color comes purely from `dueDate`/`endDate` math.
874
+
875
+ **Apply:** for a fully clickable card, wrap it yourself with your own `onClick`. Always pair the
876
+ three color overrides with `showStatus`; don't use `status` to drive dot color.
877
+
878
+ ### `FeedbackForm` shows a success toast and resets even with no `onSubmit`/`submitUrl`
879
+
880
+ Both props are optional, and when neither is provided, submit still falls through to the success
881
+ toast and form reset — validation, spinner, and reset all work end-to-end while the payload is never
882
+ sent or captured anywhere. Separately, `defaultValues` only seeds state at mount (no resync if it
883
+ arrives later from an async fetch), and its toast comes from `useToaster`, so it throws outside a
884
+ `ToasterProvider` (`PixelizeThemeProvider` and `withTheme` mount one) — the same portal issue
885
+ documented for `Toaster`/`Modal` can still hide the toast when this form is embedded in a `Modal`.
886
+
887
+ **Apply:** always pass `onSubmit` or `submitUrl` — treat a bare `<FeedbackForm />` as a bug, not a
888
+ minimal valid usage. Key the element to force a remount if `defaultValues` arrives late. Verify the
889
+ toast actually appears if embedding inside a `Modal`.
890
+
891
+ ### `Checkbox`'s `variant` is a no-op
892
+
893
+ Typed and accepted (`@deprecated`), but `Checkbox.styles.ts` defines no `variants` key, so no value changes the
894
+ look. (`error` now sets `isInvalid` and links its message — no need to pass both.)
895
+
896
+ ### `Slider`'s pagination dots can desync from the visible slide
897
+
898
+ The main track sorts `images` by `order`; the pagination dots map over the unsorted array. Passing
899
+ `images` out of `order` sequence makes the active dot point at the wrong slide.
900
+
901
+ **Apply:** pre-sort `images` by `order` before passing them in.
902
+
903
+ ### `TextLabel`'s `isInformation` alone renders no icon — it also needs `informationMessage`
904
+
905
+ The info-tooltip icon is gated on `isInformation && informationMessage` — both must be truthy or
906
+ nothing renders, not even a bare icon. `TextLabel` is the shared label engine behind most fields in
907
+ the library (`TextInput`, `NumberInput`, `PhoneNumberInput`, `RadioButton`, `PinInput`,
908
+ `InputSwitch`, `SelectV2`, the `DatePicker` family, `InputTextArea`, `SelectSearch`, `Search`,
909
+ `SearchSelect`, `MultiSelect`, `Select`), so the same silent no-op repeats at every one of them.
910
+
911
+ **Apply:** always pass `isInformation` and `informationMessage` together; never treat
912
+ `isInformation` alone as "use a default message."
913
+
914
+ ### `Timeline`'s `onEditNote` editor doesn't auto-close without `editNoteLoading` — unlike add-note
915
+
916
+ Add-note has a back-compat fallback that closes its editor immediately if `addNoteLoading` is never
917
+ wired. Edit-note has no equivalent fallback — its only close path is an effect watching
918
+ `editNoteLoading` transition `true → false`. Wire `onEditNote` without `editNoteLoading` and Save
919
+ looks like it does nothing: the form stays open with no error or feedback.
920
+
921
+ **Apply:** always pass `editNoteLoading` alongside `onEditNote`, even a client-only flag flipped
922
+ right after the call resolves.
923
+
924
+ ### `Timeline`'s `events` prop is `@deprecated` and still renders nothing
925
+
926
+ Pass `timelineEvents`; `events` (and the `TimelineEvent` type) is never read, not even as a fallback.
927
+ Rows are now static unless you pass `onEventClick`.
928
+
929
+ ### `Timeline` drops events with an unparseable `created_at`, with no visible trace
930
+
931
+ An event whose formatted date resolves to `"Invalid Date"` is excluded from every date group — not
932
+ shown in a fallback bucket, just gone. The only signal is a `console.warn` inside the formatter.
933
+
934
+ **Apply:** validate/normalize `created_at` before handing events to `Timeline` — a bad timestamp is
935
+ silent, total content loss for that row.
936
+
937
+ ### `Reorder`'s `onReorder` fires even when nothing moved
938
+
939
+ A drag that ends back at its starting index still has a drop target and still calls `onReorder` with
940
+ a new array reference in the same order.
941
+
942
+ **Apply:** compare source/destination index (or diff the array) before persisting a reorder, if a
943
+ no-op write matters. `showRemoveIcon`/`onRemove` are declared on `ReorderListProps` and work as
944
+ expected; a missing-name item's image alt falls back to `item-<1-based position>`.
945
+
946
+ ### `Divider` isn't exported from the package at all
947
+
948
+ `src/Components/Divider/` doesn't appear in `src/index.ts`, though it still compiles into `dist/`
949
+ and is deep-import-reachable. The library's own `Divider` is always vertical, fixed size/color,
950
+ zero props — a different thing from the general-purpose (horizontal, styleable) `Divider`
951
+ re-exported from the `Primitives` barrel.
952
+
953
+ **Apply:** for a divider in a consuming app, use the `Divider` from `Primitives`, not this library's
954
+ own.
955
+
956
+ ### `KanbanActions` is exported but still not wired into `KanbanBoard`
957
+
958
+ `KanbanBoard`'s header select/edit/create bar is driven by its own `kanbanSelect`/`kanbanEdit`/
959
+ `kanbanCreate` props, via a different internal component. `KanbanActions` is a separate, standalone
960
+ component (exported from the package root as of 2.4.2-beta.39) that a consumer must render and wire
961
+ up itself — its `options`-driven buttons always render with no permission gating, unlike
962
+ `KanbanBoard`'s own header actions, which respect `permissions.isEditable`/`isCreatable`.
963
+
964
+ **Apply:** use `KanbanBoard`'s own `kanbanSelect`/`kanbanEdit`/`kanbanCreate` props for the board's
965
+ built-in header actions. Reach for `KanbanActions` only when building a custom toolbar outside
966
+ `KanbanBoard`, and gate it yourself — it has no permissions awareness of its own.
967
+
968
+ ### `KanbanBoard`'s `permissions.isEditable: false` disables card drag but not column-reorder drag
969
+
970
+ Card `Draggable`s get `isDragDisabled={!canDrag}`; the column-reorder `Draggable` (active when
971
+ `enableColumnReorder` is true) never checks it — a "read-only" board still lets users reorder whole
972
+ columns.
973
+
974
+ **Apply:** also set `enableColumnReorder={false}` to fully lock a read-only board.
975
+
976
+ ### `KanbanBoard`'s `collapsedColumns` only seeds initial state — not a live controlled prop
977
+
978
+ It seeds a `useState` lazy initializer once, on mount. Without the `preferences` feature wired, a
979
+ later render passing a different `collapsedColumns` value does nothing, despite the name implying a
980
+ controlled value.
981
+
982
+ **Apply:** to force a column open/closed post-mount without `preferences`, remount the board (change
983
+ its `key`) rather than re-passing the prop.
984
+
985
+ ### `KanbanBoard`'s `account.customNode` silently drops delete/open/expand for that one card
986
+
987
+ An item with `customNode` set renders that function instead of `AccountCard`, so `onDelete`,
988
+ `onOpen`, `isDeletable`, and expand/collapse never apply — even though they read as board-wide
989
+ props. Mixing plain and `customNode` items in one column produces inconsistent per-card behavior.
990
+
991
+ **Apply:** don't expect board-wide card actions to reach a `customNode` card; wire them inside your
992
+ custom render instead.
993
+
994
+ ### `KanbanBoard`'s `AccountCard` only renders string-typed fields
995
+
996
+ A numeric field on an `Account` (allowed by its index signature) is never shown in the card's field
997
+ list. The label is the key run through `toWords`, which splits snake_case, kebab-case and camelCase:
998
+ `account_name` renders "Account Name" and `nextFollowUp` renders "Next Follow Up".
999
+
1000
+ **Apply:** keep numeric display values as strings.
1001
+
1002
+ ### `KanbanBoard`'s `onColumnDelete` receives the deleted column's **card** ids, not the column's id
1003
+
1004
+ Despite the callback parameter being named `colId`-adjacent, what's actually passed is
1005
+ `columns[colId].items.map(item => item.id)` — the cards that were in the column, never the column's
1006
+ own id.
1007
+
1008
+ **Apply:** track which column was being deleted another way (e.g. hover/selection state captured
1009
+ before the click) if you need the column id itself.
1010
+
1011
+ ### `isRequired` is decorative on some fields, native on others — same prop name, different behavior
1012
+
1013
+ `NumberInput` sets native `required` (browser bubble, blocks submit).
1014
+ `TextInput` and `InputTextArea` set only `aria-required` — announced, but no native validation.
1015
+ `PhoneNumberInput` and `PinInput` pass it only to the label (draws a `*`); the field gets nothing.
1016
+
1017
+ **Apply:** don't rely on `isRequired` for native form validation — validate required fields yourself
1018
+ regardless of which component you're using.
1019
+
1020
+ ### `NoteTextArea`'s `saveButtonLoading` going `true → false` clears the draft even on a failed save
1021
+
1022
+ The effect that resets note/title/files fires whenever `saveButtonLoading` goes falsy — there's no
1023
+ separate success/failure signal, so a parent that turns off the loading flag after a failed save
1024
+ silently discards everything the user typed.
1025
+
1026
+ **Apply:** don't flip `saveButtonLoading` back to `false` on failure without your own recovery path
1027
+ (e.g. keep the draft in your own state and re-seed it).
1028
+
1029
+ ### `InputSwitch` now renders `ToggleSwitch` — `.chakra-switch__*` selectors match nothing
1030
+
1031
+ `InputSwitch` is `@deprecated` and wraps `ToggleSwitch`, which is not a Chakra `Switch`. An `sx`
1032
+ targeting `.chakra-switch__track`/`__thumb` still compiles and lands on the wrapper, but styles
1033
+ nothing. `colorScheme` and `isReadOnly` are real now (colorScheme used to be silently discarded);
1034
+ `variant`/`spacing`/`isFocusable` stay typed `@deprecated` no-ops. **Apply:** migrate to
1035
+ `ToggleSwitch` (`fieldLabel` for the label InputSwitch drew above the track) and drop those selectors.
1036
+
1037
+ **This breaks tests, not types.** Chakra's `Switch` rendered `role="checkbox"`; `ToggleSwitch`
1038
+ renders the correct `role="switch"`, so `getByRole("checkbox", { name })` silently stops matching
1039
+ while everything still compiles. Two consumer repos hit this on the beta.44 upgrade. **Apply:**
1040
+ change those queries to `getByRole("switch", …)`.
1041
+
1042
+ Same shape of trap on `Tabs`: the owned `Tab` forwards no `data-testid`, so `getByTestId("…-tab-…")`
1043
+ queries must become `getByRole("tab", { name })`.
1044
+
1045
+ ### `AlertDialog`'s `colorScheme`/`size`/`status`/`variant`/`addRole` are dead props
1046
+
1047
+ Typed but never read, and `@deprecated` as a group (editors may not strike each one through). Use
1048
+ `tone="danger"` for a red Confirm, or `button1Style`/`button2Style`.
1049
+
1050
+ ### `AlertDialog`'s `onClose` also fires on Escape and overlay click
1051
+
1052
+ `closeOnEsc`/`closeOnOverlayClick` default to `true`, and every dismiss path calls the same
1053
+ `onClose`. **Apply:** don't read `onClose` as "the user chose Cancel"; pass both as `false` when
1054
+ only the buttons may close it.
1055
+
1056
+ ### `ToolTip`'s `overflowOnly` silently no-ops on non-single-element children
1057
+
1058
+ The truncation ref only attaches when `children` passes `React.isValidElement` — a bare string, a
1059
+ Fragment, or multiple children skip that branch, so the tooltip always shows instead of
1060
+ only-when-truncated (the opposite of the prop's contract).
1061
+
1062
+ **Apply:** give `overflowOnly`/`OverflowToolTip` exactly one real element as `children` (e.g. a
1063
+ single `Text noOfLines`), never a Fragment or bare text.
1064
+
1065
+ ### `ToolTip` mounts Chakra's tooltip only after the first hover or focus
1066
+
1067
+ Until the trigger is hovered or focused (or `isOpen`/`defaultIsOpen` is set), `ToolTip` renders just the
1068
+ child, with no tooltip element and no document listeners. A test that mocks Chakra's `Tooltip` and
1069
+ expects it mounted at render time must hover or focus the trigger first
1070
+ (`fireEvent.pointerEnter(trigger)` or `userEvent.hover`).
1071
+
1072
+ ### A keyboard-focusable `ToolTip` trigger must be a native control — never a `span` with `aria-label`
1073
+
1074
+ `ToolTip` adds `aria-describedby` to its trigger but no role and no name. An icon-only trigger written
1075
+ `<Box as="span" tabIndex={0} aria-label={hint}>` (a column-header hint, an info icon) fails axe
1076
+ `aria-prohibited-attr`: `aria-label` is not allowed on a role-less span, so a conforming screen reader may drop
1077
+ it and announce a nameless generic element (Chrome's tree still shows the name).
1078
+
1079
+ **Apply:** use `<Box as="button" type="button" aria-label={hint} bg="transparent" border="0" p={0}
1080
+ cursor="default">`. It is still a Tab stop and the tooltip still opens on focus; measured pixel-identical to
1081
+ the span, closed and focused. `role="img"` on the span also passes axe but changes the focused state.
1082
+
1083
+ ### `Toaster`'s `showToast({ children })` is a dead prop, and its two `onClose`s are different functions
1084
+
1085
+ `children` is `@deprecated` and never read — only `title`/`description`/`actions` render. The `onClose` you pass to `showToast` is wired to
1086
+ Chakra's `onCloseComplete` (fires after the exit animation, on any dismiss path); the `onClose` your
1087
+ `actions` render-prop receives is a different, immediate per-toast dismiss function.
1088
+
1089
+ **Apply:** pass `description`, not `children`. Don't assume your `onClose` fires the instant the
1090
+ user clicks close — it fires after the exit transition completes.
1091
+
1092
+ ### `ButtonGroupIcon`'s dropdown needs `rightIcon` **and** `rightIconDropdown` both set
1093
+
1094
+ The `Menu`/`dropdownOptions` branch only renders inside `rightIcon && rightIconDropdown`. Supplying
1095
+ `dropdownOptions` alone, or `rightIconDropdown` without `rightIcon`, silently renders nothing on the
1096
+ right side. Separately, `onButtongroupClick` is wired to Chakra `ButtonGroup`'s own `onClick` on the
1097
+ wrapping div — native DOM bubbling means it fires on every click inside the group (left icon, center
1098
+ button, right icon/dropdown), not just a "clicked outside the buttons" signal.
1099
+
1100
+ **Apply:** always set `rightIcon` + `rightIconDropdown={true}` together for the dropdown. Don't use
1101
+ `onButtongroupClick` to detect background clicks — inspect `event.target` if you need to distinguish.
1102
+
1103
+ ### `Card` already wraps `children` in a padded `CardBody` — a nested one doubles the padding
1104
+
1105
+ `header`/`footer` now render, and `children` sit in a flex `CardBody` laid out by `direction`/
1106
+ `align`/`justify`. Code written for the old Card that nested its own `CardBody` now gets padding
1107
+ twice. `colorScheme` does nothing (the Card theme never reads it) and `color` is its `@deprecated` alias; the three divider props are `@deprecated` and
1108
+ draw nothing.
1109
+
1110
+ **Apply:** drop the nested `CardBody`, or pass `bodyProps={{ p: 0 }}`.
1111
+
1112
+ To change the padding, use `padding="none" | "2xs" | "xs" | "sm" | "md" | "lg"`. `sx={{ p: ... }}` on
1113
+ the container *adds* to the body padding (double inset) and `sx={{ p: 0 }}` does nothing. `padding`
1114
+ is no longer Chakra's style prop (omitted from the type) — use `p` for a raw value. With
1115
+ `padding="none"` the header keeps `xs` padding.
1116
+
1117
+ ### Commerce kit — read before building a shop screen
1118
+
1119
+ `ProductCard`, `ProductDetails`, `VariantSelector` and the bag pieces share one contract: pass
1120
+ `axes: OptionAxis[]` + `variants: ProductVariant[]`, never per-vertical props. A variant's
1121
+ `options` must set every axis, or `findVariant` returns `undefined`.
1122
+
1123
+ - **`layout="auto"` on `MediaGallery` and `ProductDetails` follows the container, not the window**
1124
+ (560px / 960px of their own width), falling back to the window query only until the first measure.
1125
+ `ProductCard`'s `layout` (`grid`/`list`/`rail`) has no `auto`. `QuickAddSheet`'s `presentation="auto"`
1126
+ (`ProductCard`'s `quickAddPresentation`) reads the window (modal from `48em`); pass it explicitly inside a phone-width frame.
1127
+ - **Drawers and modals portal to the window, never into your phone frame.** `ProductCard`'s quick-add
1128
+ sheet needs `quickAddPresentation="drawer"` and `quickAddDrawerProps={{ maxW: "390px !important", mx: "auto" }}`
1129
+ there; the `!important` is needed because Chakra's slide sets an inline `max-width: 100vw`.
1130
+ - **`OptionChip` `unavailable` is visual and announced only** — `onSelect` still fires so a parent
1131
+ can re-derive the other axes. Guard it yourself if the pick must be refused.
1132
+ - **`WishlistToggle` flips its default name and `aria-pressed` together** — on cards pass a fixed
1133
+ `label` (`Save ${title}`).
1134
+ - **Group children must be direct children.** `AddressCardGroup` / `PaymentOptionGroup` read the
1135
+ roving tab stop from their children's `value`; a wrapper component hides it.
1136
+ - **`BagBar` and `StickyBuyBar` are CSS-sticky, not fixed.** Make them the last child of the
1137
+ scrolling container; `StickyBuyBar` also needs a parent taller than the viewport.
1138
+ - **"N left" appears only from a real `stock` count** at or below `LOW_STOCK_THRESHOLD` (5).
1139
+
1140
+ ### `PaymentCard`'s `onHover` never fires its `"card"` variant, and the CTA hides unless `isRenewal`
1141
+
1142
+ `onHover`'s type promises `"card" | "button"`, but no hover handler exists on the outer plan card —
1143
+ only the CTA button wires hover. Separately, the CTA (and its callbacks) disappears whenever
1144
+ `isActive` is true unless `isRenewal` is also set, regardless of `plan.buttonText`.
1145
+
1146
+ **Apply:** don't build "card" hover analytics on this prop. Pass `isRenewal` to show a CTA on the
1147
+ current/active plan.
1148
+
1149
+ ### `OrganizationDetails`' `defaultOrg === 1` silently overrides an explicit `canDelete: true`
1150
+
1151
+ `isProtected` is computed as `item.defaultOrg === 1 || canProtect` — `defaultOrg` short-circuits the
1152
+ `canDelete`/role check unconditionally. An org that is both the user's default and marked
1153
+ `canDelete: true` still renders a disabled delete button, with only a tooltip explaining why.
1154
+
1155
+ **Apply:** don't rely on `canDelete` alone to guarantee delete is enabled — check `defaultOrg` too.
1156
+
1157
+ ### `OrganizationDetails`, `CustomModulesTable`'s create/edit/delete modals show no error UI on rejection
1158
+
1159
+ `onCreateOrganization`/`onDeleteOrganization`/`onEditOrganization` (and `CustomModulesTable`'s
1160
+ `onUpdateModule`/`onDeleteModule`) are `await`ed and the modal only resets on success — a rejection
1161
+ is an unhandled promise rejection with zero visible feedback.
1162
+
1163
+ **Apply:** wrap your own handler in try/catch and show your own error toast; the library never does
1164
+ it for you.
1165
+
1166
+ ### `OrgSwitcher`'s `onChange` doesn't fire on re-selecting the already-active org, and has a closed prop list
1167
+
1168
+ Re-clicking the current org closes the popover but skips `onChange` entirely (`org.id !== value` gate)
1169
+ — don't rely on it for a side effect that must run on every click (analytics, refetch). Separately,
1170
+ the trigger has no `...rest`/`ref` escape hatch: a `data-testid`, `id`, or positioning `ref` can't
1171
+ reach it.
1172
+
1173
+ **Apply:** don't depend on `onChange` firing for a repeat pick. There's no supported way to attach
1174
+ test hooks or a ref to the trigger.
1175
+
1176
+ ### `OrgSwitcher`'s popup dialog is named by `ariaLabel`, and its rows follow `Select`'s state ladder
1177
+
1178
+ The open `role="dialog"` now has `aria-label={ariaLabel}` (it had none), so a translated app should pass `ariaLabel` in its own
1179
+ language; the trigger name still reads `${ariaLabel}, ${org name}`. Rows are 4px inset with the option radius, fill the active org,
1180
+ and ring on `:focus-visible` only.
1181
+
1182
+ ### `OrgSwitcher display="full"` still squeezes the navbar title on phones — use `display="auto"`
1183
+
1184
+ Inside a `NavigationBar` `moreIcon` cluster, a full trigger needs about 88px (avatar + chevron) even
1185
+ when its label truncates to nothing, and the title is the first thing to give way. With a long org name
1186
+ the title is invisible on 320-375px bars, and a smaller `maxWidth` does not change that.
1187
+
1188
+ **Apply:** `display="auto"` (avatar + chevron below `md`, full from `md`) or `"avatar"`. Both layouts
1189
+ name the trigger `${ariaLabel}, ${org name}` (the placeholder when no org is active), and in avatar mode
1190
+ the name appears in a tooltip that wraps a `span` around the trigger, so don't pass the trigger a ref. `auto` falls back to `"full"` where
1191
+ `matchMedia` is missing (SSR, jsdom). `NavigationBar`'s `moreIcon` root is `min-width: 0`: give your
1192
+ own icon buttons `flexShrink={0}` and let any label truncate.
1193
+
1194
+ ### `UpgradeButton`'s gold icon accent silently falls back to the label color on low contrast
1195
+
1196
+ Two different ratios apply. The label and subtitle ink clears **4.5:1** (AA text) on both gradient stops:
1197
+ `resolveGradient` darkens the stops until it does, so a custom `gradient` may paint darker than the
1198
+ colors you passed (the built-in variants are pinned per brand and mode in `upgradeButtonInk.test.ts`).
1199
+ The gold icon accent only needs **3:1** (non-text) against both of those painted stops; when it misses
1200
+ either, the icon silently switches to the label ink. An explicit `iconColor` is used as given, unchecked.
1201
+
1202
+ **Apply:** don't assume the icon stays gold with a custom `gradient` — check contrast yourself if the
1203
+ gold accent is load-bearing for your design.
1204
+
1205
+ ### `PlanPill`/`PlanBadge` always render as a real, focusable `<button>` — even with no `onClick`
1206
+
1207
+ `as="button"`, `cursor="pointer"`, and the hover-lift are unconditional. Omitting the optional
1208
+ `onClick` does not get you a static/informational pill — it stays tabbable and screen-reader
1209
+ -announced as a button regardless.
1210
+
1211
+ **Apply:** there is currently no way to get a non-interactive plan badge from this component.
1212
+
1213
+ ### `LimitReachedModal`'s `onUpgrade` never triggers `onClose`, and needs both `limit` and `used` to show usage
1214
+
1215
+ Clicking the CTA calls only `onUpgrade` — confirmed by the component's own test. Separately, the
1216
+ inline usage line renders only when **both** `limit` and `used` are non-nullish; passing just one
1217
+ silently omits the whole line.
1218
+
1219
+ **Apply:** close the modal yourself inside your `onUpgrade` handler if upgrading should dismiss it.
1220
+ Always pass `limit`/`used` together, or neither.
1221
+
1222
+ ### `CustomModulesTable`'s `ModuleItem.module_id` is the one snake_case field on an otherwise camelCase type
1223
+
1224
+ A loosely-typed API response cast straight to `ModuleItem[]` can leave `module_id: undefined` with
1225
+ no compile error, colliding React `key`s.
1226
+
1227
+ **Apply:** map the API field explicitly to `module_id` — don't assume this type is uniformly
1228
+ camelCase like its sibling payload type (`UpdateModulePayload.moduleId`).
1229
+
1230
+ ### `RolesPermission`'s permission matrix silently reroutes every column for an "Automation" row
1231
+
1232
+ Any `permissions[]` row whose `module` case-insensitively equals `"automation"` collapses every
1233
+ column onto a single `automation` boolean — only the Read cell renders/toggles, and clicking it
1234
+ calls `onPermissionChange(module, "automation")`, not `"read"`. Separately, `roles_id` (typed
1235
+ `string`) is coerced via `Number()` before `onDeleteRole` fires — a UUID or ObjectId silently
1236
+ becomes `NaN`.
1237
+
1238
+ **Apply:** if a row's `module` can be `"automation"`, expect only its Read checkbox to work, toggling
1239
+ `automation` — create/edit/delete/import/export are unreachable for that row. Only pass
1240
+ numeric-string `roles_id` values.
1241
+
1242
+ ### Several delete/deactivate modals close before their async handler can be awaited
1243
+
1244
+ `RolesPermission`'s `DeleteRoleModal` and `UserDetails`' `DeactivateConfirmModal` call their
1245
+ handlers fire-and-forget (typed plain `() => void`) and close synchronously in the same tick — the
1246
+ opposite failure mode from the create/edit modals above, whose handlers are genuinely awaited.
1247
+
1248
+ **Apply:** any `isLoading`/spinner wiring for delete/deactivate can never be seen — handle
1249
+ loading/error UI outside these two modals (e.g. a toast).
1250
+
1251
+ ### `UserDetails`' Change Role and Resend Invitation buttons silently no-op when `userId` is null
1252
+
1253
+ Only Deactivate actually disables itself when `selectedUser.userId` is null — the other two stay
1254
+ visually enabled and do nothing on click. Separately, `ChangeRoleModal` pre-selects the current role
1255
+ by case-insensitive **label text** match, not an id — any mismatch (whitespace, a renamed role)
1256
+ silently opens the modal with nothing pre-selected, no error shown.
1257
+
1258
+ **Apply:** always populate `selectedUser.userId` when those two actions should be usable. Keep
1259
+ `currentRole` as the exact display label kept in sync with `roleOptions[].label`.
1260
+
1261
+ ### `FileUploader`'s `onFilesChange` discards the real `File`, and its `acceptTypes`/`maxFiles` enforce nothing
1262
+
1263
+ `FileUploader` hands back lightweight `{id, name, size, previewUrl}` metadata — the original `File`
1264
+ is discarded in `handleFiles`, so it can never back an actual upload. `acceptTypes` only sets the
1265
+ native picker's `accept` attribute; drag-and-drop ignores it completely and no code path rejects a
1266
+ wrong-type file. Exceeding `maxFiles` silently truncates the list with no error.
1267
+
1268
+ **Apply:** need real file bytes or enforced validation → use `FileUpload`, not `FileUploader`.
1269
+
1270
+ Each image's `previewUrl` is a `blob:` URL. `FileUploader` revokes it when the image is removed,
1271
+ truncated by `maxFiles`, rejected by `maxTotalSize` or still listed when it unmounts. Do not
1272
+ reuse a `previewUrl` from `onFilesChange` after the component is gone. (`FileUpload` revokes its own
1273
+ thumbnail URLs.)
1274
+
1275
+ ### `DatePicker`'s `pickerType` does nothing when `isRange` is set, and no variant has a seconds control
1276
+
1277
+ `RangeDatePicker` never reads `pickerType` — whether time inputs show is controlled entirely by
1278
+ whether `dateFormat` contains time tokens. Separately, every time-capable picker caps at minute
1279
+ granularity regardless of `dateFormat` — a format containing `ss` compiles and parses but seconds
1280
+ are never user-editable.
1281
+
1282
+ **Apply:** for a range picker, control the time row via `dateFormat`, never `pickerType`. Don't
1283
+ request second-precision input from any DatePicker variant.
1284
+
1285
+ ### `SingleDatePicker`/`TimeOnlyPicker` default to `Date` objects — opt into strings with `valueFormat="iso"`
1286
+
1287
+ By default `selectedDate`/`value`/`onChange` speak `Date`. `valueFormat="iso"` switches one instance
1288
+ to strings: `yyyy-MM-dd` (date), `HH:mm` (time, 24h), local `yyyy-MM-dd'T'HH:mm:ss` (datetime, no
1289
+ offset). An unparsable string reads as `null`. `RangeDatePicker` and legacy `DatePicker` stay Date-only.
1290
+
1291
+ **Apply:** use this instead of `TextInput type="date"/"time"` plus hand-rolled ISO parsing.
1292
+
1293
+ ### `TimeOnlyPicker` ignores the date-range props and `autoComplete`
1294
+
1295
+ Label and `name` now work. `minDate`/`maxDate`/`disableFutureDates`/`disablePastDates` are still
1296
+ dropped, and `autoComplete` is forced to `"off"`. `DatePicker`'s `disabled`/`placeholderText` are
1297
+ `@deprecated` — use `isDisabled`/`placeholder` (the new name wins when both are set).
1298
+
1299
+ ### `Editor`'s `config` prop can silently break dark mode, and its `key` prop can never reach Jodit
1300
+
1301
+ `Editor` computes `config.theme`/`config.popupRoot` itself to fix Jodit's dark-mode/popup theming,
1302
+ then spreads your `config` on top — any `theme`/`popupRoot` key you pass wins and silently disables
1303
+ the fix. Separately, `key` is typed as if readable, but React reserves and strips it before the
1304
+ component sees `props`, so it's always `undefined` internally and can't force a remount. `editorRef`
1305
+ is also `null` until Jodit's lazy-loaded chunk resolves — a mount-time effect reading it gets nothing.
1306
+
1307
+ **Apply:** never set `theme`/`popupRoot` inside the `config` you pass to `Editor`. To force a
1308
+ remount, wrap `<Editor>` itself in a keyed parent, not via `Editor`'s own `key` prop.
1309
+
1310
+ `Editor` keeps Jodit's defaults for the source view, and those defaults (`sourceEditor: "ace"`,
1311
+ `beautifyHTML: true`) load Ace and js-beautify from `cdnjs.cloudflare.com` when the editor mounts.
1312
+ Under a strict Content-Security-Policy, offline, or in a privacy review, those requests are blocked
1313
+ or are an outbound call you did not ask for.
1314
+
1315
+ **Apply:** pass `config={{ sourceEditor: "area", beautifyHTML: false }}` to drop both calls (source
1316
+ mode becomes a plain textarea), or point Jodit's `sourceEditorCDNUrlsJS` and `beautifyHTMLCDNUrlsJS`
1317
+ at copies you host.
1318
+
1319
+ ### `PdfViewer` `getBlob` — fetched on mount only; the toolbar already has Open and Download
1320
+
1321
+ - **Swapping the file needs a new React `key`.** `getBlob` is read through a ref and fetched on mount,
1322
+ so an inline arrow is safe, but changing it never refetches — the old document silently stays.
1323
+ - **The default fallback shows only a message while the toolbar is visible**; with
1324
+ `showToolbar={false}` it adds its own Open and Download buttons. `getBlob` mode makes the toolbar's
1325
+ actions work for authed files, so an app need not render its own — or pass `showToolbar={false}`.
1326
+ - Pass exactly one of `pdfUrl` / `getBlob`.
1327
+
1328
+ ### `WizardDialog` — `validate` must be pure; controlled `stepId` does not unlock steps
1329
+
1330
+ `validate` runs on Continue, on Finish, and again for every step on Finish. Passing `stepId` controls
1331
+ the visible step only: stages past the furthest valid step stay disabled. Esc, close, Back and Cancel
1332
+ are disabled while `isFinishing`. With `chrome="inline"` there is no Modal at all: no focus trap, no Esc,
1333
+ no close X and no `role="dialog"` (the host window supplies them), `size` is ignored, and nothing renders
1334
+ while `isOpen` is false; Cancel still calls `onClose`, so the host must close itself there.
1335
+
1336
+ ### `PageHeader` actions wrap by default
1337
+
1338
+ `actionsLayout` defaults to `"auto"`, so actions that do not fit drop below the title at `md`+. A
1339
+ test asserting the old single-row layout needs `actionsLayout="inline"`.
1340
+
1341
+ ### `Editor` merge fields — chips, raw values and stale closures
1342
+
1343
+ - **Chips are `<span data-field contenteditable="false">`.** Do not style or strip `[data-field]` in
1344
+ consumer CSS or sanitisers, and sanitise the raw `${path}` value `onChange` reports, not Jodit's HTML.
1345
+ - **A hand-typed `${path}` stays plain text** until `value` is next applied from outside; only tokens
1346
+ inserted through the menu / `apiRef` or already present in `value` become chips. Unknown-token
1347
+ detection still runs on the raw value.
1348
+ - **`config.extraButtons[].exec` goes stale** (the memo key is `JSON.stringify`, which drops functions).
1349
+ Use `toolbarButtons` — React buttons, always current.
1350
+ - **`jodit-react` binds `onChange` / `onBlur` once, keyed on handler identity, not `config`.** After
1351
+ Jodit is re-created (readonly or height change) a stable handler stops receiving events. `Editor`
1352
+ binds them itself per instance; don't copy the pattern when wrapping Jodit directly.
1353
+
1354
+ - **`EditorMergeField` `object`, `objectDescription`, `description`, `example`, `source` and `image` do nothing inside
1355
+ `Editor`.** They are metadata for a field browser you build; only `path`, `label`, `group` and `sample` are read.
1356
+
1357
+ ### `toCsv` — no BOM by default, and formula-like text gains a `'`
1358
+
1359
+ Excel reads a BOM-less CSV as ANSI and garbles non-ASCII text: pass `{ bom: true }` when the file is for Excel. A cell
1360
+ starting with `=`, `+`, `-` or `@` (a signed plain number excepted) is written with a leading `'`; set
1361
+ `escapeFormulas: false` on a column such as phone numbers (`+91 ...`) only when you control every value in it.
1362
+
1363
+ ### `Editor`'s Jodit toolbar is fixed for screen readers and keyboard, from our wrapper only
1364
+
1365
+ Jodit's own markup (`node_modules/jodit`) put `aria-label` on each button's `role="listitem"`
1366
+ wrapper instead of the real inner `<button>`, used the invalid ARIA role `"trigger"` for its
1367
+ dropdown-chevron spans, gave `listitem` no `role="list"` ancestor, and ships every toolbar button
1368
+ at `tabindex="-1"` unless `config.allowTabNavigation` is on — so by default the toolbar failed
1369
+ axe's `button-name`/`aria-roles`/`aria-required-parent` and was entirely unreachable by keyboard.
1370
+ `Editor` now sets `allowTabNavigation: true` by default (same override rule as `theme`/`popupRoot`
1371
+ above — a value you pass in `config` wins) and runs a `MutationObserver`-backed DOM pass
1372
+ (`joditAccessibility.ts`) that copies each button's real name onto it and fixes the two roles.
1373
+
1374
+ **Apply:** nothing — this is automatic. Set `config.allowTabNavigation: false` only if you
1375
+ deliberately want the toolbar out of the tab order; you'll reintroduce the keyboard-reachability gap.
1376
+
1377
+ The editing area is a `role="textbox"` that Jodit leaves nameless. `Editor` names it from `label` when
1378
+ there is one, else from `labels.editor` (default `Rich text editor`), and sets `aria-readonly` while
1379
+ `config.readonly` is on. Two unlabelled editors on one page announce identically unless each gets its own
1380
+ `labels.editor`.
1381
+
1382
+ Jodit also ships the editing area at `tabindex="-1"`, so no keyboard could reach the text and a scrollable
1383
+ read-only editor could not be scrolled. `Editor` sets `tabIndex: 0` (a `config.tabIndex` you pass wins) and
1384
+ lights the Jodit frame while focus is inside it. Tab then walks toolbar, editing area, Jodit's status-bar
1385
+ buttons (`config.statusbar: false` drops those). Inside a table cell Tab and Shift+Tab stay with Jodit (next
1386
+ cell, a new row after the last, a new row above the first): arrow out of the table before tabbing away.
1387
+
1388
+ ### `SearchSelect` and `SelectSearch` search `option.label` only (so does `Select` unless you widen it)
1389
+
1390
+ Neither checks a rendered secondary field (`option.description`, a custom `view` node, `option.email`
1391
+ on a profile row) — typing text that's visibly on-screen in a secondary field returns no match. `Select`
1392
+ and `SelectV2` (popup mode) match the label too, until you pass `searchFields={["label","description"]}`
1393
+ or a `filterOption(option, query)`.
1394
+
1395
+ **Apply:** on `SearchSelect`/`SelectSearch`, fold a secondary field into `option.label` yourself, or
1396
+ pre-filter `options` before passing them in.
1397
+
1398
+ ### `SearchSelect` selected rows are filled now, and the ring is keyboard-only
1399
+
1400
+ Checked or selected option rows paint the `Select` selected fill; hover and keyboard cursor step it deeper, and
1401
+ Arrow/Home/End add a 1px neutral inset ring (the mouse clears it). A test or screenshot that expects an unfilled selected
1402
+ row, or reads the label colour from `text[700]`, now sees the neutral ink ladder in light. Behaviour, ids and ARIA are unchanged.
1403
+
1404
+ ### `SelectSearch` keyboard focus draws a neutral ring, not the browser outline
1405
+
1406
+ Rows are real focus targets; `:focus-visible` now paints the `Select` 1px inset ring (and `outline` stays transparent for forced-colors),
1407
+ and a reopened single selection is filled. A visual or E2E test that expects the UA outline on a focused row no longer sees it.
1408
+
1409
+ ### `SearchSelect` never virtualizes
1410
+
1411
+ Despite the prop name, `virtualization` does nothing — every filtered option renders as a real DOM
1412
+ node. Page a large dataset in via `pagination` instead. (`chip.maxChips={0}` now works: no chips,
1413
+ just "+N".)
1414
+
1415
+ ### `SelectSearch`'s Enter key requires an exact full-label match, not the keyboard-highlighted option
1416
+
1417
+ Typing a partial query and pressing Enter without arrowing down first does not pick the
1418
+ visually-highlighted top option — it only fires if the typed text exactly equals an option's full
1419
+ label. `SelectV2`/`SearchSelect` both correctly select the highlighted option on Enter; `SelectSearch`
1420
+ doesn't. Two more props (`isSearchEnabled`, `BottomIconStyle`) are typed but never read, and
1421
+ `initialSelectedOption` only seeds selection at mount with no resync if the real value arrives later.
1422
+
1423
+ **Apply:** tell users to arrow down before Enter with this component specifically. Don't pass
1424
+ `initialSelectedOption` before the real value is known (or key the component to force a remount).
1425
+
1426
+ ### `FieldSelectModal`'s "Select all" ignores the active search filter, and resets on any parent re-render
1427
+
1428
+ The header checkbox (and its indeterminate state) always operates on the complete `fields` list, not
1429
+ the search-filtered subset — clicking it while filtered silently selects/clears fields the user can't
1430
+ see. Separately, an effect re-seeds selection whenever `fields`/`defaultSelected` changes
1431
+ **reference**, so an inline array literal for either prop silently wipes in-progress picks on the
1432
+ next parent re-render.
1433
+
1434
+ **Apply:** clear the search before using "Select all." Memoize `fields`/`defaultSelected` in the
1435
+ parent before passing them down.
1436
+
1437
+ ### `Dropdown`'s `ButtonText`/`text` are mutually exclusive per `dropdownType`, silently
1438
+
1439
+ The `"button"` trigger renders `ButtonText` only; the `"text"` trigger renders `text` only — pairing
1440
+ the wrong prop with the active `dropdownType` renders an icon-only or bare-chevron trigger with no
1441
+ visible label, and the `aria-label` fallback then substitutes "Open menu" as the accessible name too.
1442
+ Separately, `buttonProps.sx` fully replaces the built-in trigger style rather than merging, silently
1443
+ dropping the hover transition.
1444
+
1445
+ **Apply:** pair `ButtonText` with the default/`"button"` type and `text` with `dropdownType="text"`.
1446
+ Fold custom styling into `dropDownButtonStyle`, not `buttonProps.sx`.
1447
+
1448
+ ### Every `Search` grabs a page-wide Ctrl+K by default
1449
+
1450
+ Each mounted `Search` registers its own `window` Ctrl+K listener, so two on one view race for the
1451
+ keypress. **Apply:** pass `shortcut={false}` on all but one. `showShortcutHint={false}` only hides
1452
+ the hint; the listener stays.
1453
+
1454
+ The same applies to a launcher: `NavLauncher` and `LauncherTrigger` bind no chord to *open* (once open,
1455
+ the launcher uses Cmd/Ctrl+K and `/` only to refocus its own field), and the library
1456
+ reserves `mod+k` for the app's own palette. The app must pass `shortcut={false}` on every page
1457
+ `Search`, or claim the chord in capture phase (`keydown` on `window` with `capture: true`) before
1458
+ the `Search` listeners see it — otherwise the first mounted `Search` takes Ctrl+K.
1459
+
1460
+ ### `NavLauncher` — the app owns routing, registry, query and chord
1461
+
1462
+ - **`linkAs` must forward `className`, `ref`, `onClick`, `href`, `target`, `rel`, `tabIndex` and
1463
+ `aria-hidden`** to its anchor. Dropping `className` loses all row styling; dropping `onClick` means
1464
+ a click never closes the launcher.
1465
+ - **`onNavigate` fires for keyboard opens only** (Enter, mod+Enter). Pointer clicks follow the
1466
+ rendered links, so a router `linkAs` must do the navigation.
1467
+ - **Controlled `query`:** the launcher still calls `onQueryChange("")` when it closes; the app must
1468
+ apply it or the stale query reopens.
1469
+ - **Search rows are not nested links.** The visible label is a text-only `role="option"`; the real
1470
+ anchor is an `aria-hidden`, `tabIndex={-1}` overlay (so copy-link and mod-click work) and pin / ↗
1471
+ are `aria-hidden` siblings. Screen readers use Enter / mod+Enter. Do not nest links inside the
1472
+ option — axe `nested-interactive` fails.
1473
+ - **The apps section decides "compact" with `matchMedia("(min-width: 48em)")`, the layout with
1474
+ `(min-width: 62em)`** (`lg`). Both fall back to desktop (apps hidden, two panes) where `matchMedia`
1475
+ is missing (SSR, jsdom), so tests must stub both to see the apps section or the tab bar.
1476
+ - **Below `lg` only the selected tab's panel is mounted.** Pinned / Frequently visited / Recent
1477
+ (Quick access tab) and the apps list (Apps tab) are not in the DOM until their tab is clicked; the
1478
+ Quick access tab is omitted when it would be empty, and a single remaining tab hides the bar. The
1479
+ search view is different: no tab bar, stacked results plus the Quick access rail. A phone or tablet
1480
+ consumer test that looks for an app or a pin must click the tab first.
1481
+ - **`P` on a focused NavLauncher row pins it.** Any other printable key pressed on a row, tab or
1482
+ button (not Space, no modifier) is appended to the query and focuses the field; in the field `P`
1483
+ types the letter.
1484
+ - **Esc is handled by the launcher, not the Drawer** (`closeOnEsc` is off): it clears a non-empty
1485
+ query and keeps focus in the field, and closes only when the query is empty. The keydown is stopped inside
1486
+ the launcher, so a consumer `Escape` listener on `document` never sees it.
1487
+ - **The dialog's accessible name is always `labels.title`** (a hidden heading, through `Drawer`'s
1488
+ `aria-labelledby`); the search value, scope chips and `headerActions` no longer join it. A consumer
1489
+ test asserting the old "Menu leave" style name must assert `labels.title` instead.
1490
+ - **The result count is `aria-hidden`; the announcement is a separate visually hidden `aria-live="polite"`
1491
+ node, deliberately not `role="status"`**, so `getByRole("status")` still matches only the no-results
1492
+ message and the loading skeleton.
1493
+ - **Left/Right/Home/End in the search field edit the caret** until a result has been navigated by
1494
+ arrow/Page keys (→ at the end of the text enters the grid); any change to the query hands them back
1495
+ to the caret. Do not "fix" this by binding them to results.
1496
+ - **`NavLauncher` `suggestions` empty falls back to `noResultsHint`** instead of showing chips.
1497
+ - **`PinToggle` / `NewTabLink` are opacity 0 until row hover or focus-within**, so a consumer's own row must carry `data-group` (or `role="group"`) to reveal them.
1498
+ - **`LauncherLabels.screensGroup` is unused** by search now (sections replaced the flat group); kept so label objects still type-check.
1499
+ - **`LauncherLabels` gained required keys** (`hintClickNewTab`, `newTabTip`, `resultsCount`, `tabsLabel`,
1500
+ `tabMenu`, `tabQuickAccess`, `tabApps`). The `labels` prop is `Partial<LauncherLabels>` and is fine;
1501
+ a consumer that annotates a *full* `LauncherLabels` object fails to compile.
1502
+ - **`openShortcutHint` and `labels.hintOpenMenu` are deprecated no-ops:** the open chord is no longer
1503
+ shown in the footer. Drop them; the footer's hints are arrows, ENTER, ⌘ ENTER, ⌘ + click, P, ESC.
1504
+ Both are optional, so a full `LauncherLabels` object needs no `Omit<LauncherLabels, "hintOpenMenu">`.
1505
+ - **`apps` is data-driven.** Gate by plan by changing the array or setting `locked` / `lockedReason`;
1506
+ keep `id`s stable (hues and `key` derive from them), and pass `color` on an app whose mark must not
1507
+ shift when siblings are added or removed. Locked rows are not links, not focusable, `aria-disabled`,
1508
+ tooltip = `lockedReason`. Pass `appsVisibility="always"` to show them above `md`.
1509
+ - **Never use `:has()` in an emotion style.** jsdom's (nwsapi) `getComputedStyle` can throw ("not a valid selector") and takes every consumer test that opens a
1510
+ Drawer down with it. The launcher marks row focus with a `data-row-focus` attribute instead. If you
1511
+ hit that error in your own tests on a newer jsdom, report it with the selector.
1512
+ - **Launcher rows are CSS containers** (`container-type: inline-size`, name `launcher-row`); jsdom
1513
+ drops `@container` rules, so tests assert the style objects (`titleInset`, `WIDE_ROW`), not the
1514
+ stylesheet.
1515
+ - **A search row without `href` (an action with `run`) cannot open in a new tab:** any click, with or
1516
+ without Cmd/Ctrl, runs it and closes the launcher, same as Enter.
1517
+ - **Spotlight search is opt-in (`searchMode="spotlight"`).** Without it matching, ranking and row
1518
+ order are exactly as before; `scopes`, `quickActions`, `answers`, `facts` and `groupLimit` work in
1519
+ both modes. Facts are searchable in spotlight only.
1520
+ - **Two search models, and classic never matches a screen on its module.** Classic (the default) runs
1521
+ `searchLauncherSections`: registry order, no ranking, and every query word must appear in one row's
1522
+ own label or keywords. "leave balance" therefore finds nothing unless one screen's keywords carry
1523
+ both words. Spotlight ranks and also matches a screen on its module and section labels, so the same
1524
+ query finds Leave › Balances. The exported `searchLauncher` (one flat Screens group) is legacy and
1525
+ `@deprecated`; the component never calls it.
1526
+ - **Scope chips live in the header row and are always shown** (their own header row below `md`);
1527
+ while a query is active each chip's name carries its count ("People, 3 results"), so a test that
1528
+ types first must match `getByRole("radio", { name: /^People/ })`, not the bare label.
1529
+ - **Picking a chip other than All or Screens with an empty field lists that scope** exactly as
1530
+ passed: its `actions` or `extraResults` groups, so a remote group with nothing loaded yet shows
1531
+ `labels.scopeEmpty`. Load the scope's items when `onScopeChange` fires if it should list them.
1532
+ - **Quick actions show only under All with an empty query, as the first block of the menu** (not
1533
+ while `isLoading`); only the first 5 render.
1534
+ - **Closing resets the scope to "all"** and calls `onScopeChange("all")`; a controlled `activeScope`
1535
+ must apply it, like `onQueryChange("")`.
1536
+ - **`facts` swap the Quick access rail for a Preview pane at `lg`** whenever any visible result has
1537
+ facts; below `lg` the active result's facts dock under the list. Copy buttons are never inside an
1538
+ `option` or the listbox (axe `nested-interactive`, `aria-required-children`).
1539
+ - **An answer without `run` or `href` copies `answer.value` on Enter/click**; answers show in the
1540
+ All scope only.
1541
+ - **`extraResults` groups are not filtered** unless `matchLocally: true`; remote rows the query does not
1542
+ match stay listed (score 0) and can never be the Top hit.
1543
+ - **`LauncherSearchEngine` searches what it is given.** It has no React, DOM or network; build the
1544
+ index with `createIndex` once per data change, not per keystroke.
1545
+ - **`LauncherTrigger` does not bind its shortcut**; `shortcut={null}` removes the hint and
1546
+ `aria-keyshortcuts`. An explicit `aria-label` hides the visible label from assistive tech, so keep
1547
+ the visible text inside the label (WCAG 2.5.3). `display="icon"` has no visible text: the label is
1548
+ its accessible name and tooltip.
1549
+
1550
+ ### `Header`'s desktop submenus open on hover only — no keyboard or click trigger
1551
+
1552
+ Dropdown children are gated on local hover state (`onMouseEnter`/`onMouseLeave`), with no `onFocus`.
1553
+ A keyboard user tabbing to a parent item can never open its children on the desktop layout — the
1554
+ identical data renders as a click-toggled accordion on mobile.
1555
+
1556
+ **Apply:** don't put anything a keyboard user must reach behind `children` on desktop; use `rightSlot`
1557
+ (real focusable buttons) for critical actions until this gets a keyboard path.
1558
+
1559
+ ### `WorkspaceWindow`'s `state="maximized"` is indistinguishable from `"medium"`
1560
+
1561
+ The component only branches on `state === "minimized"` — size is always the same fixed constant, and
1562
+ `onMedium`/`onMaximize` are `@deprecated` callbacks that are never invoked anywhere in the component.
1563
+
1564
+ **Apply:** treat `state` as effectively two-valued (open vs. `"minimized"`); don't wire a maximize
1565
+ control expecting `onMaximize` to fire.
1566
+
1567
+ ### `FilterSidebar`'s `selected` without `onChange` makes every filter silently inert
1568
+
1569
+ Passing `selected` alone (uncontrolled companion `onChange` omitted) computes the next filter state
1570
+ on every click and discards it — checkboxes visibly never check, forever, with no error. Separately,
1571
+ `onApply`, `headerPadding`, and `sliderMode` are all typed and accepted but have zero effect, as is
1572
+ `FilterSection.checkboxes` (all four are `@deprecated`); radio-vs-checkbox mode is actually decided by
1573
+ `type === "radio" || section.radio`.
1574
+
1575
+ **Apply:** always pass `selected` and `onChange` together, or omit `selected` and let `FilterSidebar`
1576
+ own its state.
1577
+
1578
+ Separately, `FilterSidebar` skips re-rendering sections whose `section` object is unchanged, so build `sidebarOptions`
1579
+ once (module constant or `useMemo`); fresh section objects every render re-render every section on each range drag. Don't reach for `onApply`/`headerPadding`/`sliderMode`/`FilterSection.checkboxes` —
1580
+ none of them do anything.
1581
+
1582
+ ### `Breadcrumbs`' `isLastChild` prop is accepted but never read
1583
+
1584
+ It's declared on the type (`@deprecated`) but omitted from the component's destructure entirely.
1585
+
1586
+ **Apply:** don't pass it expecting it to mark or style the final crumb — there's nothing it can do.
1587
+
1588
+ With `overflow="wrap" | "truncate"` each crumb is `noOfLines={1}` with a `title`, so one very long
1589
+ label ellipsizes; the default `"nowrap"` is unchanged.
1590
+
1591
+ ### `Accordion`'s `items[].buttonProps` replaces, not merges, the expanded/hover highlight
1592
+
1593
+ It spreads after the built-in `bg`/`_hover` that encode `isExpanded` state — passing `bg` or
1594
+ `_hover` there silently kills that item's expanded indication. An `sx` inside `buttonProps` or
1595
+ `itemProps` is always overwritten by `customStyles`.
1596
+
1597
+ **Apply:** style around the defaults via `customStyles` (merged through `sx`) when the highlight
1598
+ must survive.
1599
+
1600
+ ### `Table`: memoise `columns` if users can hide or reorder columns without `savePreferences`
1601
+
1602
+ A new `columns` identity re-applies the column defaults and discards those local changes. Passing an
1603
+ equal array again no longer costs a re-render, but the reset still happens.
1604
+
1605
+ **Apply:** define `columns` at module level or in `useMemo`.
1606
+
1607
+ ### `Table`'s `LeftFilterPane` Clear All only re-applies filters in `"sidebar"` mode
1608
+
1609
+ `handleClear` calls `onClear` unconditionally, but only calls `onApply(cleared)` when
1610
+ `filterMode === "sidebar"` — in `"modal"` mode, Clear All visually unchecks every filter but never
1611
+ tells the parent the selection changed, so a consumer whose `onClear` doesn't itself reset
1612
+ applied/query state keeps serving pre-clear filtered data.
1613
+
1614
+ **Apply:** when using `filterMode="modal"`, drive your data refetch from `onClear`, not `onApply` —
1615
+ don't assume `onApply` fires on every Clear All.
1616
+
1617
+ ### `ScrollToTop` watches one `parentElement` hop, not "the nearest scrollable ancestor"
1618
+
1619
+ It reads `scrollTop` off its immediate DOM parent only, with no upward search for an `overflow:
1620
+ auto/scroll` element. Wrap it in one extra layout `<div>` and the button silently never appears — no
1621
+ error, no warning, `scrollTop` on a non-scrolling parent just stays `0` forever.
1622
+
1623
+ **Apply:** `ScrollToTop`'s JSX parent must be the actual scroll container, or pass `useWindow` when
1624
+ the page itself scrolls.
1625
+
1626
+ ### `ProfilePhotoViewer`'s PDF detection breaks the moment a file is picked, and a new `photoUrl` discards the preview
1627
+
1628
+ PDF detection is a literal `.endsWith(".pdf")` check — picking a file through the built-in editor
1629
+ replaces the value with a base64 data URI that never ends in `.pdf`, so a freshly-picked PDF renders
1630
+ as a broken image instead of the intended file badge (only the original URL prop is detected
1631
+ correctly). Separately, a changed `photoUrl` re-syncs the component and replaces any locally picked
1632
+ preview (a same-URL re-render keeps it), so a parent that updates `photoUrl` before the upload has
1633
+ finished makes the preview vanish mid-upload.
1634
+
1635
+ **Apply:** don't use the built-in edit flow for PDF documents; detect kind from `File.type` in your
1636
+ own handler instead. Update `photoUrl` only once the upload has finished. `key={photoUrl}` is no
1637
+ longer needed.
1638
+
1639
+ ### `Tabs` link mode needs `href` on every item, and has no default current item
1640
+
1641
+ One item without `href` makes the whole thing a normal tablist and `href` is ignored everywhere (a
1642
+ dev-only `console.warn` is the only signal). Button tabs select the first enabled item when `value`
1643
+ is missing; link tabs mark nothing `aria-current` until you pass `value`. A plain left-click calls
1644
+ `onChange` but never `preventDefault`s; modifier and middle clicks only open the link. `isDisabled`
1645
+ link items render as a non-link `span`.
1646
+
1647
+ **Apply:** `Tabs items=[{ id, label, href }] linkAs={RouterLink} value={currentId}` with `value`
1648
+ derived from the route, and never hand-build `Box as={Link}` tabs.
1649
+
1650
+ ### `BulkSelectionBar` renders nothing at `selectedCount` 0, and `sticky` needs a scroll ancestor
1651
+
1652
+ With no persistent live region it announces count changes itself (the node mounts empty and fills in
1653
+ an effect), so don't also announce from your own region. `placement="sticky"` pins only inside an
1654
+ ancestor scroll container — an ancestor with `overflow: hidden` silently disables it. Combining it
1655
+ with `Table`'s `headerActions` gives two action sets for one selection.
1656
+
1657
+ ### `SectionRail` chooses rail vs `Select` with `matchMedia` at render time
1658
+
1659
+ It renders the rail when `matchMedia` is missing (SSR). In the `Select` branch a dirty section's
1660
+ option reads `"Label (dirtyHint)"` — a native `<option>` cannot hold a dot.
1661
+
1662
+ ### `CalendarGrid` is fully controlled, ignores time of day, and `renderDayCell` turns multi-day bars off
1663
+
1664
+ Without `onDateChange` / `onViewChange` the toolbar's Today/Prev/Next and the view switcher are
1665
+ hidden and arrow keys stop at the edge of the visible range, so the grid looks static — wire both.
1666
+ `start` / `end` are read as local calendar dates (`end` inclusive): a UTC-midnight `Date` shows the
1667
+ previous day in a negative-offset zone, so build date-only values with `new Date(y, m, d)`.
1668
+ `renderDayCell` replaces each cell's chips wholesale: a 3-day event is passed to it for all 3 days
1669
+ but is no longer drawn as one bar, and `onEventClick` never fires from your own content. A cell is named by
1670
+ its date and count followed by everything inside it, your content included, so keep that content short.
1671
+
1672
+ ### `AudioRecorder` needs a secure context, and `onRecorded` is not called after unmount
1673
+
1674
+ `getUserMedia` is undefined on plain http (except localhost), so the component shows its
1675
+ "unsupported" state there, not "permission denied". A parent that navigates away mid-recording gets
1676
+ no `onRecorded` call (the mic is released instead), and an empty recording never calls it either.
1677
+
1678
+ ### `FilePreview` infers file kind from `fileName`, not `fileUrl`, and never resets zoom/rotation on its own
1679
+
1680
+ Once `fileName` is set, `fileUrl`'s own extension is never consulted — a friendly display name with
1681
+ no extension forces the "preview unavailable" fallback even when `fileUrl` points at a perfectly
1682
+ renderable file. Separately, cycling `fileUrl` while the modal stays open (a gallery next/prev)
1683
+ carries the previous image's zoom/rotation into the new one.
1684
+
1685
+ **Apply:** keep the real extension on `fileName`, or pass `fileType` explicitly to skip inference.
1686
+ Remount via `key={fileUrl}` when swapping the file in place instead of just changing the prop.
1687
+
1688
+ ### An overflowing `ScrollbarBox` is a tab stop — give it an `aria-label`
1689
+
1690
+ While its content overflows a scrollable axis (more than 1px) and holds no button, link or field, the
1691
+ box takes `tabIndex={0}` so a keyboard user can scroll it, and rings on `:focus-visible` only. A box that
1692
+ fits, scrolls `hidden`, or already holds something focusable gets no stop, and a mouse click shows no ring.
1693
+ Without `aria-label` the stop is unnamed (no `role="region"` either), so a screen reader announces nothing
1694
+ useful at it.
1695
+
1696
+ **Apply:** pass `aria-label` ("Recent deals") on every `ScrollbarBox` that can overflow, and don't wrap one
1697
+ around a list of controls just to get a stop.
1698
+
1699
+ ### `StageProgress`'s `tooltipThreshold`/`minStageWidth` no-op under `variant="stepper"`, and a stale `value` blanks the tracker
1700
+
1701
+ Both props stop having any effect the moment a tracker switches to the stepper variant. Separately,
1702
+ if `value` matches no `stage.id` (e.g. `stages` was filtered/re-derived and went stale), every stage
1703
+ silently renders as `"upcoming"` — no stage is ever active or completed, with no error. The match is
1704
+ also a strict `===`: a numeric `stage.id` compared against a string `value` (or vice versa) never
1705
+ matches either, even when the "same" stage is clearly intended.
1706
+
1707
+ **Apply:** don't rely on either prop once on the stepper variant. Re-validate `value` against the
1708
+ current `stages` list whenever it's filtered, and keep `id`/`value` the same primitive type at every
1709
+ call site.
1710
+
1711
+ ### A `StageProgress` strip is a tab stop only when no stage is a button — name it with `aria-label`
1712
+
1713
+ At a narrow width the strip scrolls sideways. Stage buttons already let a keyboard user reach every stage,
1714
+ so an interactive strip gets no extra stop. A strip with nothing focusable (`isReadOnly`, or every stage
1715
+ disabled) takes `tabIndex={0}` while it overflows and rings on `:focus-visible` only; nothing changes at
1716
+ rest, on a mouse click, or while the stages fit. Without `aria-label` the stop is unnamed. A `stepper`
1717
+ keeps its `ol` role, so its `aria-label` names the list rather than a region.
1718
+
1719
+ **Apply:** pass `aria-label` ("Deal stages") on every read-only `StageProgress` that can overflow.
1720
+
1721
+ ### `Table`'s `isVisiblity`, `tableSettings`, `handleExportChange`/`exportOptions`/`exportLabel`, `onColumnFilter`, `headerBgColor`/`tableBorderColor`, and a column's `isSearch` are dead props — all `@deprecated`
1722
+
1723
+ Grepped account-frontend, tickets, crm-frontend, hrms and social-frontend: zero consumers set any of
1724
+ the `TableProps` ones. Every prop below carries `@deprecated` in `TableProps.tsx` (eight on `TableProps`,
1725
+ plus `isSearch` on the column definition `TableHeaderProps`) rather than being removed outright, in case
1726
+ an app outside those five repos relies on one. None of them does anything in the current implementation,
1727
+ despite being typed (and some documented on the demo page):
1728
+
1729
+ - `isVisiblity` — `Table`'s own destructure never lists it, so a consumer's value is dropped. It's
1730
+ hardcoded `true` into both `Pagination` call sites regardless, and `Pagination` doesn't read it
1731
+ either. It is a misspelling of `isVisibility`, but do not rename it (breaking change) — and do not
1732
+ expect it to do anything if you do.
1733
+ - `tableSettings` (`{filters, filterSelected, onFilterSelection}`) — `Table` passes it to
1734
+ `TableSettings`, but `TableSettings`'s function signature never destructures it.
1735
+ - `handleExportChange` / `exportOptions` / `exportLabel` — `Table` renders no export UI at all; none
1736
+ of the three are read anywhere.
1737
+ - `onColumnFilter` — `Table.tsx` never references it.
1738
+ - `headerBgColor` / `tableBorderColor` — the header paints the variant's own background; neither is read.
1739
+ - column `isSearch` (on `TableHeaderProps`) — every column gets the filter popover regardless.
1740
+
1741
+ **Apply:** don't reach for any of these expecting an effect. Column visibility is driven by
1742
+ `isTableSettings` (shows the Settings gear) + `preferences` (server persistence) + the Manage
1743
+ Columns tab — not by `isVisiblity`/`tableSettings`.
1744
+
1745
+ ### `Table`'s `preferences` prop is silent-by-default, not required
1746
+
1747
+ Omitting `preferences` (or leaving `preferences.url` empty, the default) does not throw or disable
1748
+ the table — the persistence hooks both early-return when the base URL is falsy. The table works
1749
+ fully in memory; it just never persists column order/visibility, density, or grouping across
1750
+ reloads. When you do wire a `url`, `token` is sent as a **raw** `Authorization` header value — do
1751
+ not prefix it with `"Bearer "` yourself expecting the hook to strip it.
1752
+
1753
+ **Apply:** treat `preferences` as opt-in persistence, not a required config block. If settings
1754
+ aren't surviving a refresh, check `preferences.url` is actually set before assuming a bug.
1755
+
1756
+ ### `SearchSelect`'s `height` prop only resizes the `insideSelect` segment, not the field
1757
+
1758
+ Despite the name, `height` is read only to size the nested `insideSelect` trigger. The main
1759
+ control's height always comes from `size`'s token set — passing `height` with no `insideSelect`
1760
+ configured has no visible effect at all.
1761
+
1762
+ **Apply:** to change the main field's height, change `size`; `height` only matters when
1763
+ `insideSelect` is also passed.
1764
+
1765
+ ### `SearchSelect`'s `pagination` now takes an explicit "has more" signal — prefer it at an exact-multiple total
1766
+
1767
+ Without `pagination.hasMore`/`pagination.totalRecords`, `hasMore` still falls back to guessing from
1768
+ `options.length % (pagination.limit ?? 10) === 0`. A total that's an exact multiple of `limit`
1769
+ (30 items, limit 10) still looks like "more pages exist" for the *first* extra scroll, firing one
1770
+ empty `onScroll` call — after that empty response, `SearchSelect` stops asking (it no longer loops
1771
+ forever the way earlier versions did).
1772
+
1773
+ **Apply:** pass `pagination.hasMore` (a boolean) or `pagination.totalRecords` (a count) so the field
1774
+ never fires that one avoidable empty request; both take precedence over the `limit` guess.
1775
+
1776
+ ### `RolesPermission`'s `RoleData.permission`/`designation`/`makeSuperAdmin`/`automation`/`trackLocation`/`show_records` are dead weight in this component
1777
+
1778
+ None of these fields are read by `RolesPermission` — the roles list only renders
1779
+ `roleName`/`createdBy`/`created_at`/`roles_id`. They exist solely to be round-tripped unchanged
1780
+ through `onViewRole`/`onEditRole` so the consumer can prefill its own edit form. Setting them has no
1781
+ visible effect inside this component.
1782
+
1783
+ **Apply:** treat these fields as pass-through-only storage — populate them for your own edit form,
1784
+ not to change anything `RolesPermission` itself renders.
1785
+
1786
+ ### `OrganizationDetails`' `OrganizationItem.uiInvite` is never read
1787
+
1788
+ Active vs. invited organizations are decided purely by which array (`activeOrganizations` vs
1789
+ `invitedOrganizations`) an item is placed in — `uiInvite` is carried on the type but
1790
+ `OrganizationDetails` never inspects it.
1791
+
1792
+ **Apply:** don't rely on `uiInvite` to control which section an item renders in — move the item
1793
+ between the two arrays instead.
1794
+
1795
+ ### `OrganizationDetails`' `onSetDefault`/`onAcceptInvite`/`onDeclineInvite` are fire-and-forget despite their `Promise<void>` signature
1796
+
1797
+ Unlike `onCreateOrganization`/`onEditOrganization`/`onDeleteOrganization` (all awaited), these three
1798
+ are called without `await` — the `switchingOrgIds`/`respondingOrgIds` spinner arrays are entirely
1799
+ consumer-managed state, not driven by this component resolving the promise.
1800
+
1801
+ **Apply:** don't assume symmetry with the awaited callbacks in the same props interface; manage your
1802
+ own loading state for these three around the promise you return.
1803
+
1804
+ ### `OrganizationDetails`' `CreateOrgFormValues.default`/`defaultOrg` are dead fields — now `@deprecated`
1805
+
1806
+ The built-in `CreateOrgModal`'s internal state and submit handler never set or forward them, and the
1807
+ public `onCreateOrganization` callback's parameter type doesn't declare them at all — populating
1808
+ them in a custom create form has no effect on the built-in flow. account-frontend, the only real
1809
+ consumer of `OrganizationDetails`, never reads either field. Both are now `@deprecated` in
1810
+ `OrganizationDetailsProps.tsx`.
1811
+
1812
+ **Apply:** don't rely on these two fields to pre-mark a newly created org as default.
1813
+
1814
+ ### `SideBar`'s `selectedSubMenu` prop is accepted but never read — now `@deprecated`
1815
+
1816
+ `SidebarProps.selectedSubMenu` is threaded through `SideBar` → `MenuItems` → `MenuItemBox`, but the
1817
+ component's destructure never includes it — passing it has no effect of any kind. Zero consumers set
1818
+ it; now `@deprecated` in `SideBarProps.tsx`.
1819
+
1820
+ **Apply:** don't pass `selectedSubMenu` expecting it to highlight a submenu row.
1821
+
1822
+ ### `SideBar` pinned rows, `autoCollapse` and `collapseTransition`
1823
+
1824
+ - **`autoCollapse={false}` also silences the `open` prop** (`open` works by calling `changeToggle`).
1825
+ Drive collapse with `toggle` only.
1826
+ - **A pinned id highlights only in the pinned block** while `activePinnedId` matches, and the parent
1827
+ submenu of a pinned child does not auto-open. An `activePinnedId` past `pinnedLimit` expands the
1828
+ list so the active state never disappears.
1829
+ - **Pinned rows are anchors with `href={url}`**: a plain click calls `handleMenuClick` (and closes the
1830
+ overlay), modified clicks fall through to the browser. Unpin is a sibling button, never nested.
1831
+ - **`collapseTransition` affects the `lg`+ inline rail only** — overlay slide, drag and `mobileNav`
1832
+ are untouched.
1833
+ - **The rail focus ring is lifted per surface** (`sidebarFocus.ts`) because `colors.focusRing.ring` is
1834
+ derived for the page canvas and fails 3:1 on the rail for five light brands. The lasting fix is a
1835
+ `sidebar.focusRing` theme token.
1836
+
1837
+ ### `KanbanBoard`'s `kanbanSelect`/`onOpen` don't check `permissions` — decision: accepted as-is
1838
+
1839
+ Looked like an asymmetry with the gated `kanbanEdit`/`kanbanCreate`/`onDelete`, but on inspection
1840
+ `kanbanSelect` is a header filter dropdown (`options`/`onSelectChange`/`value`) — a view-level
1841
+ affordance, not a mutation trigger — and `onOpen` (opening a card) is a view action too. Both are
1842
+ already covered by the existing `permissions.isViewable` gate: the whole board (including the
1843
+ header) returns `null` before rendering when `isViewable` is `false`, so a viewer who can't see the
1844
+ board can't reach either. Gating them a second time against `isEditable`/`isCreatable`/`isDeletable`
1845
+ would be wrong — filtering/opening isn't an edit, create, or delete. No code change made.
1846
+
1847
+ **Apply:** if you need `kanbanSelect` or `onOpen` gated on something narrower than view access, gate
1848
+ it yourself (e.g. `isSelect: canEdit`); the component won't do it for you.
1849
+
1850
+ ### `SideBar`'s `locked` menu-item flag — decision: fixed to actually block interaction
1851
+
1852
+ Previously `locked` only swapped in a padlock icon; the click handler checked `disabled`, not
1853
+ `locked`, so a `locked: true` item still fully navigated. Zero consumers set `locked: true` in
1854
+ account-frontend, tickets, crm-frontend, hrms, social-frontend or crm-mobile, so there was no
1855
+ working behavior to preserve — the misleading name was a trap waiting for the first adopter. As of
1856
+ this release, `locked` blocks clicks/expansion the same way `disabled` does, in both the expanded
1857
+ sidebar (`MenuItemBox`) and the collapsed-sidebar flyout (`MenuPopoverContent`), for both top-level
1858
+ and submenu items. `disabled` is unchanged and still works independently.
1859
+
1860
+ **Apply:** `locked: true` alone now prevents interaction; you no longer need to also set
1861
+ `disabled: true`.
1862
+
1863
+ **Follow-up (same trap, missed spot): `SecondaryBar` still ignored `locked`.** `SecondaryBar.tsx`'s
1864
+ `CollapsedItem`/`ExpandedItem` render the same `MenuProps` shape via a top-level item's
1865
+ `secondaryItems`, but their click guards checked only `menuDisabled(item)` — never `item.locked` —
1866
+ and neither rendered the lock icon, so a locked secondary item stayed fully clickable and looked
1867
+ identical to an unlocked one. Fixed the same way as `MenuItemBox`/`MenuPopoverContent`. Also added
1868
+ `lockedReason?: string` (`MenuProps`) — an optional per-item tooltip, shown on hover/focus of a
1869
+ locked row anywhere in `SideBar` (rail row, submenu row, both collapsed-rail flyouts, and
1870
+ `SecondaryBar`), via the library's own `ToolTip`.
1871
+
1872
+ ### `SideBar` menu-item labels clipped the bottom of descenders (g/y/p/q/j) — fixed
1873
+
1874
+ `TextTruncation.tsx`'s label used `overflow="hidden"` (both axes) with `lineHeight="1"`, so the line
1875
+ box was exactly font-size tall and any glyph descender got clipped flat — reported live on
1876
+ lfour.pixelizetech.com ("Legal Requests").
1877
+
1878
+ **An earlier fix here did not work and shipped looking correct.** It paired `overflowX="hidden"`
1879
+ (needed for the ellipsis) with `overflowY="clip"` + `sx={{ overflowClipMargin: "3px" }}`. CSS
1880
+ discards that: when one axis is `clip` and the other is a non-`clip`, non-`visible` value, `clip`
1881
+ computes to `hidden` — the mirror of the `visible`→`auto` rule. Measured in Chrome 152,
1882
+ `overflow-x: hidden; overflow-y: clip` computes to `hidden`/`hidden`, so `overflow-clip-margin` was
1883
+ inert on all 177 elements carrying it.
1884
+
1885
+ The working fix is vertical padding to grow the clip box, cancelled by an equal negative margin so
1886
+ the label's layout height is unchanged: `py="0.35em" my="-0.35em"`. The padding must suit the
1887
+ line-height — `0.35em` clears `lineHeight: 1`, while `Tag`'s label needs only `0.2em` at
1888
+ `lineHeight: 1.45` (a bigger box there would push its focus ring outside the pill).
1889
+
1890
+ **Apply:** nothing to do — this was a rendering bug, not a prop. Building another truncated
1891
+ single-line label? Use the `py`/negative-`my` pair. `overflow-clip-margin` only works when **both**
1892
+ axes are `clip`, which `text-overflow: ellipsis` rules out.
1893
+
1894
+ ### `SideBar` nav list showed a bare, unthemed scrollbar when items overflowed — fixed
1895
+
1896
+ `SideBar.tsx`'s `#sidebar-scroll-container` used `Constants/Sidebar.ts`'s `FlexCss`, which only set
1897
+ the `::-webkit-scrollbar-*` pseudo-elements — never the standard `scrollbar-width`/`scrollbar-color`
1898
+ properties. Chromium honors the webkit pseudo-elements, but any engine that reads the standard
1899
+ properties first, or doesn't support the pseudo-elements at all, fell back to the browser's default
1900
+ scrollbar: a plain bar with no relation to the dark sidebar theme, showing up the moment a nav list
1901
+ (enough sections/items) overflowed the viewport. Fixed by switching to the already-written
1902
+ `cssForScrollBar(theme)` (same file), which sets `scrollbarWidth`/`scrollbarColor` **and** the
1903
+ webkit pseudo-elements, themed to `sidebar.background[500]` / `sidebar.mutedIcon`/`mutedLabel`,
1904
+ hidden until hover. `FlexCss` is removed — `cssForScrollBar` is now the only scrollbar treatment
1905
+ the SideBar uses. (2026-09-29: the thumb was briefly brand `primary[500]`/`[700]` — since fixed to
1906
+ the neutral tokens shown above; `SecondaryBar`'s own scroll panel got the same styling and a
1907
+ duplicate-id fix in the same pass.)
1908
+
1909
+ **Apply:** nothing to do. If a nav list is long enough to scroll, the bar now stays invisible until
1910
+ hovered, in the sidebar's own colors, on every engine — not just Chromium.
1911
+
1912
+ ### `SideBar` contrast pass — badge dot, hover fills, missing-icon fallback, default avatar/logo (2026-09-29) — fixed
1913
+
1914
+ A themed-UI audit found six real defects, none of them behavior changes: the collapsed-rail
1915
+ notification dot (`red[400]`) is now `sidebar.semanticText.error`, which stays legible against the
1916
+ rail in both modes instead of drifting; six `whiteAlpha.100` hover/rest fills that sat below the
1917
+ sidebar's own perceptible-step floor are now `whiteAlpha.200`, matching every other row's hover;
1918
+ the collapsed-flyout submenu (`MenuPopoverContent`) no longer shows Chakra's built-in "?" glyph for
1919
+ a sub-item with no `icon` — it draws the same small dot the always-visible inline submenu already
1920
+ used; hovering an *active* flyout row no longer gets visibly lighter-then-darker (it now steps
1921
+ `.300` -> `.400`, like every other active row); and the default (no `logo`/`avatarUrl`) header logo
1922
+ tile and footer avatar initials no longer paint a raw `primary` fill, which was within ~1:1 of the
1923
+ rail — invisible — on zinc, skyline and storefront.
1924
+
1925
+ **Apply:** nothing to do — same props, same markup, visuals only. If you rendered a `SideBar` or
1926
+ `SecondaryBar` with a screenshot baseline captured before 2026-09-29, expect the badge dot color,
1927
+ some hover states, and the default logo/avatar tile to look different.
1928
+
1929
+ ### `SideBar` contrast pass round 2 — muted icon/label under a hover fill, inline-submenu state (2026-09-29) — fixed
1930
+
1931
+ A follow-up audit found `sidebar.mutedIcon`/`mutedLabel` could dip under WCAG AA when sitting on
1932
+ top of an active or hovered row (the whiteAlpha overlay steps), even though the same token cleared
1933
+ AA against the bare rail — the token was never resolved against that combined surface. Also, the
1934
+ expanded rail's always-visible inline submenu only swapped an active row's label to white with no
1935
+ fill or accent bar, unlike every other active row in the family (top-level rows, the
1936
+ collapsed-flyout submenu). Both fixed with no prop or markup changes.
1937
+
1938
+ **Apply:** nothing to do — same props, visuals only. Expect a muted icon/label under a hover/active
1939
+ row to read slightly lighter than before on some brands, and an active inline-submenu item to now
1940
+ show a fill and left accent bar matching the rest of the sidebar's active-row styling.
1941
+
1942
+ ### `KanbanBoard`'s `permissions.isViewable: false` hides everything, including header actions
1943
+
1944
+ Not just the columns — the select/edit/create header bar disappears too, since the whole component
1945
+ returns `null` before rendering anything.
1946
+
1947
+ **Apply:** there's no prop for hiding only the board body while keeping header actions visible.
1948
+
1949
+ ### `Switch` was forced to 200px even with no labels — it overflowed a narrow cell
1950
+
1951
+ `Switch` (`leftText`/`rightText`) kept a 12.5rem minimum width regardless of whether any label was
1952
+ set. Used as a boolean toggle — the wrong component for that, but the mistake shipped live in
1953
+ tickets' project custom-fields page — an unlabelled instance rendered as two unlabelled brand-filled
1954
+ pills at 200px inside a 120px table cell, overflowing by 80px. The width floor now only applies once
1955
+ `leftText`/`rightText` is actually set; an unlabelled instance shrinks to fit (~58px measured).
1956
+
1957
+ **Apply:** for a single on/off field use `ToggleSwitch`, not `Switch`, even now that it no longer
1958
+ overflows — a two-option segmented control still announces as `role="radiogroup"`, not
1959
+ `role="switch"`. Swapping `Switch` for `ToggleSwitch` changes `getByRole("radio", …)` queries to
1960
+ `getByRole("switch", …)` — the same test break the `InputSwitch` → `ToggleSwitch` migration caused.
1961
+
1962
+ ### A `SearchSelect`/`Select` custom row node inherits the row's font size and padding — don't restate them
1963
+
1964
+ `SearchSelect`'s `option.view` and `Select`'s `renderOption` render straight inside the option row,
1965
+ which now carries its own `fontSize`/`px`/`py` so a plain-text row is legible with no extra markup.
1966
+ A custom node that also sets its own `px`/`py`/`fontSize` stacks on top of the row's rather than
1967
+ replacing it — this is what made rows in crm-frontend render 57–75px tall instead of the ~30px every
1968
+ other row uses.
1969
+
1970
+ **Apply:** size a custom `option.view`/`renderOption` node yourself only when it needs something
1971
+ *different* from the row default — inherit by default, don't restate it.
1972
+
1973
+ ### A custom option row's sub-line must not use `colors.textMuted` directly
1974
+
1975
+ A selected row sits on a tinted fill, and the hovered-selected rung is the busiest one in the
1976
+ ladder. In dark mode `surfaceRaised` carries only ~0.86 of contrast headroom above AA, so raw
1977
+ `textMuted` on that rung measures **4.00–4.22:1** in 6 of 9 brands — under the 4.5:1 a 12px
1978
+ sub-line needs. The library's own rows no longer use it.
1979
+
1980
+ **Apply:** in a `SearchSelect` `option.view` or `Select` `renderOption` node, read the sub-line ink
1981
+ from `optionRowDescriptionInk(theme.colors)` (exported from the package root) rather than
1982
+ `theme.colors.textMuted`. It is a no-op in light mode. The row's main label is
1983
+ `optionRowInk(theme.colors, isSelected)` with `optionRowWeight(isSelected)` — never brand ink.
1984
+
1985
+ ### A custom option list must not fill the selected row
1986
+
1987
+ `listRowBackgrounds(colors).selected` and `.active` sit within 1.02:1 of each other on every brand
1988
+ and mode, so a list that fills both the selected row and the hovered row shows two identical fills
1989
+ and the user cannot tell which one is chosen. Library option lists paint one fill — the cursor's —
1990
+ and mark selection with `optionRowWeight` plus a trailing `Check` in `colors.accentText`. (`Select`'s own popup
1991
+ additionally fills the selected row (neutral grey rungs in both modes, identical on every brand; not exported); a custom list keeps one fill.)
1992
+
1993
+ **Apply:** `bg={optionRowFill(listRowBackgrounds(colors), isActive)}` for an index-driven list, or
1994
+ `{...optionRowCursorSx(listRowBackgrounds(colors))}` for rows that take DOM focus; both are exported
1995
+ from the package root. Text is `optionRowInk(colors, isSelected)`, unchanged on hover.
1996
+
1997
+ ### `Table`'s node column `label` needs `labelText` unless its text is plain children
1998
+
1999
+ `columns[].label` accepts a node (an icon, a tooltip trigger) as well as a string or number. Every
2000
+ place that cannot render a node — the sort and filter button names, Manage Columns, the Group
2001
+ picker, filter chips, saved preferences and `onRowClick`'s `header.label` — uses a plain-text name
2002
+ instead: `labelText` if set, else the node's literal text children, else the column `id`. A node
2003
+ whose text comes from inside a component (`<MyHeader title="Revenue" />`, a `t()` call inside a
2004
+ child) has no literal children, so those places silently read the raw `id`.
2005
+
2006
+ A wide node header is also **clipped, not ellipsized** — the header's ellipsis only works on bare
2007
+ text. Column widths come from the rendered DOM, never from label length, so sizing is unaffected.
2008
+
2009
+ **Apply:** set `labelText` on every node label; put an `isTruncated` `Text` inside the node if it
2010
+ can outgrow the column. An icon-only tooltip trigger inside the node is a native `button`, not a `span`
2011
+ with `aria-label` (see the `ToolTip` gotcha above).
2012
+
2013
+ ### `FormField`, `IconButton`, `SkipLink`: what their props do not hint at
2014
+
2015
+ - **`FormField` + library fields:** `TextInput` inherits FormField's `error` and `isRequired` because it checks
2016
+ for a parent `FormControl`. `InputTextArea`, `NumberInput`, `Select`, the date pickers and `PhoneNumberInput`
2017
+ wrap themselves in their own and do **not**: pass `error`/`isRequired` to those directly, and never give a
2018
+ wrapped field its own `label` as well, or it renders two.
2019
+ - **`FormField isRequired` sets native `required` on Chakra-based controls** (as Chakra's `FormControl` does), so
2020
+ the browser blocks an empty submit. Add `noValidate` to the `<form>` if you validate yourself. Native children
2021
+ get `aria-required` only.
2022
+ - **`FormField` children:** pass one element or a function. A Fragment is rendered untouched and gets no wiring.
2023
+ `id` is the control's id (the root takes none); a child's own `id` is adopted when FormField has none.
2024
+ - **`IconButton` warns once per mount in development without `aria-label`/`aria-labelledby`.** `title` does not
2025
+ count. Size the icon yourself (xs 12 · sm 14 · md 16 · lg 18): the button does not resize it.
2026
+ - **`SkipLink`** must be the first focusable element on the page. Its target gains `tabindex="-1"` if it is not
2027
+ focusable, and keeps it. A missing target falls back to the browser's hash jump (and warns in development).
2028
+
2029
+ ### `formatDate`, `TimePicker`, `TagInput`: what their props do not hint at
2030
+
2031
+ - `formatDate` reads a bare `YYYY-MM-DD` as that calendar day, not UTC midnight. Pass a `Date` only when you mean
2032
+ an instant. Epoch *seconds* are not detected: multiply by 1000 first.
2033
+ - `TimePicker` fires `onChange` with a `Date` on the day of `value` (else `baseDate`, else today). It never clears
2034
+ to `null` on its own: pass `onClear` to make "--" pickable once a time is set (it then fires instead of `onChange`).
2035
+ - For free-text chips that are not email addresses use `TagInput`: same look as `MultiSelect`, any text, with
2036
+ your own `validate`. Its rejection messages and add/remove announcements are English by default; translate them
2037
+ with `labels` (functions, e.g. `duplicate: (entry) => ...`), including `labels.remove` for each chip's remove button
2038
+ (default `Remove <tag>`).
2039
+ - **Button press scale matches a real `:active` only.** A `MenuButton as={Button}` held open by Chakra's
2040
+ `data-active` keeps the darker pressed fill but does not stay at 0.98. A consumer `_active={{ transform }}`
2041
+ loses to the press rule while the pointer is down; use `variant="unstyled"` or an `sx` `&:active` with
2042
+ `!important`.
2043
+
2044
+ ### `Card` is borderless by default (`elevated`)
2045
+
2046
+ A Card that frames a table or a list of rows needs `variant="outline"`. `borderColor` alone shows nothing, because
2047
+ the default border width is 0, and the outline rule is Chakra `gray[200]`, not `boxborder[200]`. Paint the page with
2048
+ `backgroundColor.base`: on `backgroundColor.main` a borderless card can be white on white.
2049
+
2050
+ ### `Select` / `SearchSelect` multi rows have no checkbox role
2051
+
2052
+ Query rows with `getAllByRole("option")` and check `aria-selected`. The row's checkbox is decorative and no longer
2053
+ exposes `role="checkbox"`, so `getByRole("checkbox")` finds nothing inside the popup.
2054
+
2055
+ ### Page behind an open `WorkspaceWindow` is `aria-hidden`
2056
+
2057
+ While a window is open (not minimized) role queries for background elements need `{ hidden: true }` or a test id.