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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (482) hide show
  1. package/CHANGELOG.md +437 -13
  2. package/COMPONENT-GOTCHAS.md +150 -91
  3. package/DESIGN-GUIDE.md +47 -7
  4. package/README.md +37 -3
  5. package/dist/Components/Accordion/Accordion.js +11 -8
  6. package/dist/Components/Accordion/AccordionProps.d.ts +4 -0
  7. package/dist/Components/Accordion/accordionColors.js +1 -2
  8. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
  9. package/dist/Components/Apexcharts/ApexLineChart/ApexLineChartProps.d.ts +2 -2
  10. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts +1 -1
  11. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
  12. package/dist/Components/Apexcharts/ApexPieChart/ApexPieChartProps.d.ts +3 -1
  13. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.d.ts +2 -0
  14. package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.js +13 -0
  15. package/dist/Components/AppSwitcher/AppSwitcher.js +6 -3
  16. package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +3 -1
  17. package/dist/Components/AppSwitcher/AppSwitcherProps.js +18 -11
  18. package/dist/Components/AppSwitcher/pixelizeSuite.d.ts +24 -0
  19. package/dist/Components/AppSwitcher/pixelizeSuite.js +71 -0
  20. package/dist/Components/AppearanceSettings/AppearanceSettings.js +3 -3
  21. package/dist/Components/AppearanceSettings/AppearanceSettingsProps.d.ts +2 -2
  22. package/dist/Components/Avatar/avatarColorway.d.ts +2 -2
  23. package/dist/Components/Avatar/avatarColorway.js +7 -6
  24. package/dist/Components/Breadcrumbs/BreadcrumbsProps.d.ts +1 -1
  25. package/dist/Components/Button/Button.styles.js +5 -2
  26. package/dist/Components/Button/ButtonProps.d.ts +2 -4
  27. package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
  28. package/dist/Components/CalendarGrid/CalendarGrid.js +5 -3
  29. package/dist/Components/CalendarGrid/CalendarGridProps.d.ts +1 -1
  30. package/dist/Components/Card/Card.d.ts +1 -0
  31. package/dist/Components/Card/Card.js +1 -0
  32. package/dist/Components/Checkbox/Checkbox.styles.js +3 -1
  33. package/dist/Components/CheckoutKit/selectable.d.ts +3 -1
  34. package/dist/Components/CheckoutKit/selectable.js +10 -7
  35. package/dist/Components/CheckoutKit/tonalHover.d.ts +2 -0
  36. package/dist/Components/CheckoutKit/tonalHover.js +6 -0
  37. package/dist/Components/ChoiceCard/ChoiceCard.d.ts +1 -1
  38. package/dist/Components/ChoiceCard/ChoiceCard.js +2 -1
  39. package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +6 -0
  40. package/dist/Components/Common/FieldMessage.d.ts +1 -0
  41. package/dist/Components/Common/FormLabel.d.ts +1 -1
  42. package/dist/Components/Common/FormLabel.js +4 -3
  43. package/dist/Components/Common/HelperText.d.ts +2 -2
  44. package/dist/Components/Common/HelperText.js +1 -2
  45. package/dist/Components/Common/activationKey.d.ts +5 -0
  46. package/dist/Components/Common/activationKey.js +12 -0
  47. package/dist/Components/Common/dataAttributes.d.ts +4 -0
  48. package/dist/Components/Common/fieldMessageStyles.js +2 -1
  49. package/dist/Components/Common/findSlot.d.ts +2 -0
  50. package/dist/Components/Common/findSlot.js +24 -0
  51. package/dist/Components/Common/surfaceFocusRing.d.ts +1 -0
  52. package/dist/Components/Common/surfaceFocusRing.js +7 -0
  53. package/dist/Components/ConfirmDialog/ConfirmDialog.js +17 -5
  54. package/dist/Components/ConfirmDialog/ConfirmDialogProps.d.ts +38 -10
  55. package/dist/Components/CopyButton/CopyButton.d.ts +1 -0
  56. package/dist/Components/CopyButton/CopyButton.js +3 -6
  57. package/dist/Components/CouponField/CouponField.js +5 -2
  58. package/dist/Components/CustomModulesTable/CustomModulesTable.js +3 -1
  59. package/dist/Components/DatePicker/CalendarPanel.d.ts +1 -0
  60. package/dist/Components/DatePicker/CalendarPanel.js +3 -1
  61. package/dist/Components/DatePicker/DatePicker.js +24 -26
  62. package/dist/Components/DatePicker/DatePickerProps.d.ts +8 -0
  63. package/dist/Components/DatePicker/PickerPortal.js +1 -1
  64. package/dist/Components/DatePicker/RangeDatePicker.d.ts +7 -0
  65. package/dist/Components/DatePicker/RangeDatePicker.js +10 -29
  66. package/dist/Components/DatePicker/SingleDatePicker.js +5 -21
  67. package/dist/Components/DatePicker/TimeOnlyPicker.js +2 -20
  68. package/dist/Components/DescriptionList/DescriptionList.js +1 -1
  69. package/dist/Components/DetailSections/DetailSections.js +2 -1
  70. package/dist/Components/Divider/Divider.d.ts +3 -3
  71. package/dist/Components/Divider/Divider.js +3 -3
  72. package/dist/Components/Drawer/Drawer.d.ts +2 -0
  73. package/dist/Components/Drawer/Drawer.js +23 -25
  74. package/dist/Components/Dropdown/DropDown.js +6 -21
  75. package/dist/Components/Editor/Editor.js +6 -2
  76. package/dist/Components/Editor/EditorProps.d.ts +17 -1
  77. package/dist/Components/Editor/editorLabels.js +1 -0
  78. package/dist/Components/Editor/editorTokenStyles.d.ts +8 -0
  79. package/dist/Components/Editor/editorTokenStyles.js +9 -1
  80. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +1 -1
  81. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +9 -2
  82. package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +15 -1
  83. package/dist/Components/EmptyState/EmptyStateProps.d.ts +21 -0
  84. package/dist/Components/EmptyState/FilteredEmptyState.d.ts +5 -0
  85. package/dist/Components/EmptyState/FilteredEmptyState.js +23 -0
  86. package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +1 -0
  87. package/dist/Components/FilePreview/FilePreview.js +7 -3
  88. package/dist/Components/FilePreview/FilePreviewProps.d.ts +2 -1
  89. package/dist/Components/FileUpload/FileUpload.js +8 -9
  90. package/dist/Components/FileUpload/FileUploadProps.d.ts +2 -2
  91. package/dist/Components/FileUploader/FileUploader.js +5 -6
  92. package/dist/Components/FilterSidebar/FilterSidebar.d.ts +7 -9
  93. package/dist/Components/FilterSidebar/FilterSidebar.js +90 -233
  94. package/dist/Components/FilterSidebar/OptionsSection.d.ts +14 -0
  95. package/dist/Components/FilterSidebar/OptionsSection.js +46 -0
  96. package/dist/Components/FilterSidebar/RangeSection.d.ts +17 -0
  97. package/dist/Components/FilterSidebar/RangeSection.js +80 -0
  98. package/dist/Components/FilterSidebar/SectionHeader.d.ts +13 -0
  99. package/dist/Components/FilterSidebar/SectionHeader.js +29 -0
  100. package/dist/Components/FilterSidebar/useStableCallback.d.ts +1 -0
  101. package/dist/Components/FilterSidebar/useStableCallback.js +12 -0
  102. package/dist/Components/Form/FormWrapper.d.ts +7 -7
  103. package/dist/Components/Form/FormWrapper.js +5 -3
  104. package/dist/Components/FormField/FormField.js +1 -1
  105. package/dist/Components/Header/Header.js +1 -1
  106. package/dist/Components/Header/HeaderActions.js +4 -2
  107. package/dist/Components/IconButton/IconButtonProps.d.ts +2 -1
  108. package/dist/Components/Input/TextInput.js +2 -2
  109. package/dist/Components/Input/TextInputProps.d.ts +3 -1
  110. package/dist/Components/KanbanBoard/AccountCard.js +1 -1
  111. package/dist/Components/KanbanBoard/KanbanBoard.d.ts +1 -1
  112. package/dist/Components/KanbanBoard/KanbanBoard.js +11 -7
  113. package/dist/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  114. package/dist/Components/LazyWrapper/LazyWrapper.d.ts +2 -1
  115. package/dist/Components/LazyWrapper/LazyWrapper.js +1 -1
  116. package/dist/Components/MediaViewer/MediaViewer.js +4 -3
  117. package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  118. package/dist/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  119. package/dist/Components/MediaViewer/components/MediaScrubber.js +7 -2
  120. package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  121. package/dist/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  122. package/dist/Components/MediaViewer/hooks/useFileViewer.d.ts +1 -0
  123. package/dist/Components/MediaViewer/mediaItems.d.ts +1 -0
  124. package/dist/Components/MediaViewer/mediaItems.js +5 -0
  125. package/dist/Components/Modal/Modal.d.ts +1 -0
  126. package/dist/Components/Modal/Modal.js +7 -25
  127. package/dist/Components/Modal/warnDroppedSlotChildren.d.ts +1 -1
  128. package/dist/Components/Modal/warnDroppedSlotChildren.js +7 -3
  129. package/dist/Components/NavLauncher/LauncherTabs.js +2 -1
  130. package/dist/Components/NavLauncher/NavLauncher.js +44 -22
  131. package/dist/Components/NavLauncher/NavLauncherProps.d.ts +6 -4
  132. package/dist/Components/NavLauncher/ScopeBar.js +4 -2
  133. package/dist/Components/NavLauncher/engine/engine.js +2 -1
  134. package/dist/Components/NavLauncher/engine/fold.js +2 -1
  135. package/dist/Components/NavLauncher/launcherParts.d.ts +12 -0
  136. package/dist/Components/NavLauncher/launcherParts.js +45 -11
  137. package/dist/Components/NavLauncher/searchLayout.d.ts +1 -0
  138. package/dist/Components/NavLauncher/searchLayout.js +3 -1
  139. package/dist/Components/NavLauncher/spotlightParts.d.ts +6 -2
  140. package/dist/Components/NavLauncher/spotlightParts.js +22 -9
  141. package/dist/Components/NavLauncher/useCopiedFlash.d.ts +6 -0
  142. package/dist/Components/NavLauncher/useCopiedFlash.js +21 -0
  143. package/dist/Components/NavigationBar/NavigationBar.js +6 -5
  144. package/dist/Components/NoteTextArea/NoteTextArea.js +12 -17
  145. package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +5 -3
  146. package/dist/Components/Notification/Notification.js +19 -21
  147. package/dist/Components/Notification/NotificationProps.d.ts +1 -1
  148. package/dist/Components/NotificationBell/notificationHelpers.d.ts +16 -1
  149. package/dist/Components/NotificationBell/notificationHelpers.js +13 -7
  150. package/dist/Components/OffersList/OffersList.js +4 -2
  151. package/dist/Components/OptionChip/OptionChip.js +3 -2
  152. package/dist/Components/OptionChip/optionInk.js +4 -2
  153. package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  154. package/dist/Components/OrgSwitcher/OrgSwitcher.js +13 -6
  155. package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +1 -1
  156. package/dist/Components/OrganizationDetails/OrganizationDetails.js +4 -7
  157. package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +4 -2
  158. package/dist/Components/PdfViewer/PdfViewer.d.ts +1 -0
  159. package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +1 -1
  160. package/dist/Components/PlanPill/PlanPill.js +4 -2
  161. package/dist/Components/PlanPill/PlanPillProps.d.ts +1 -1
  162. package/dist/Components/ProductCard/ProductCardAction.js +2 -1
  163. package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
  164. package/dist/Components/ProductDetails/ProductDetails.js +2 -1
  165. package/dist/Components/ProfileCard/ProfileCard.d.ts +1 -0
  166. package/dist/Components/ProfileCard/ProfileCard.js +12 -26
  167. package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  168. package/dist/Components/ProgressBar/ProgressBar.js +2 -1
  169. package/dist/Components/QuantityStepper/QuantityStepper.js +5 -2
  170. package/dist/Components/QueryState/QueryStateBoundary.d.ts +1 -1
  171. package/dist/Components/QueryState/QueryStateBoundary.js +5 -1
  172. package/dist/Components/QueryState/QueryStateProps.d.ts +6 -2
  173. package/dist/Components/RadioButton/RadioButton.js +2 -3
  174. package/dist/Components/RolesPermission/RolesPermission.js +12 -8
  175. package/dist/Components/ScrollToTop/ScrollToTop.d.ts +1 -0
  176. package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +4 -1
  177. package/dist/Components/ScrollbarBox/ScrollbarBox.js +10 -4
  178. package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -1
  179. package/dist/Components/SearchSelect/SearchSelect.js +8 -5
  180. package/dist/Components/SearchSelect/SearchSelectProps.d.ts +3 -3
  181. package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
  182. package/dist/Components/SegmentedControl/SegmentedControl.js +1 -1
  183. package/dist/Components/Select/Select.js +6 -0
  184. package/dist/Components/Select/SelectNative.d.ts +16 -0
  185. package/dist/Components/Select/SelectPopup.js +170 -63
  186. package/dist/Components/Select/SelectProps.d.ts +30 -2
  187. package/dist/Components/Select/groupedWindow.d.ts +21 -0
  188. package/dist/Components/Select/groupedWindow.js +50 -0
  189. package/dist/Components/SelectSearch/SelectSearch.d.ts +1 -1
  190. package/dist/Components/SelectSearch/SelectSearch.js +48 -38
  191. package/dist/Components/SelectSearch/SelectSearchProps.d.ts +3 -3
  192. package/dist/Components/SelectV2/SelectV2.d.ts +1 -1
  193. package/dist/Components/SelectV2/SelectV2.js +1 -1
  194. package/dist/Components/SelectV2/SelectV2Props.d.ts +3 -3
  195. package/dist/Components/SideBar/SecondaryBar.js +3 -2
  196. package/dist/Components/SideBar/components/MenuItemBox.js +3 -2
  197. package/dist/Components/SideBar/components/MenuItems.js +1 -1
  198. package/dist/Components/SideBar/components/OtherApps.js +2 -2
  199. package/dist/Components/SideBar/components/PinnedSection.js +1 -1
  200. package/dist/Components/SideBar/sidebarScale.d.ts +2 -2
  201. package/dist/Components/SideBar/sidebarScale.js +2 -2
  202. package/dist/Components/SignInActivityTable/SignInActivityTable.js +7 -2
  203. package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +1 -1
  204. package/dist/Components/SignInActivityTable/scrollRegionRing.d.ts +10 -0
  205. package/dist/Components/SignInActivityTable/scrollRegionRing.js +14 -0
  206. package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -1
  207. package/dist/Components/Slider/Slider.d.ts +2 -0
  208. package/dist/Components/Slider/Slider.js +5 -4
  209. package/dist/Components/StageProgress/StageItem.js +2 -1
  210. package/dist/Components/StageProgress/StageProgress.js +8 -2
  211. package/dist/Components/StageProgress/StageProgressProps.d.ts +2 -0
  212. package/dist/Components/StageProgress/StepperStage.js +2 -1
  213. package/dist/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  214. package/dist/Components/Table/Table.js +5 -3
  215. package/dist/Components/Table/components/HeaderActions.js +5 -3
  216. package/dist/Components/Table/components/TableBody.js +13 -8
  217. package/dist/Components/Table/components/TableGroupRow.js +2 -1
  218. package/dist/Components/Table/components/TableHeader.js +14 -20
  219. package/dist/Components/Table/components/rowDetail.js +3 -2
  220. package/dist/Components/Table/filters/ActiveFilters.js +6 -3
  221. package/dist/Components/Table/filters/CompactSelect.js +2 -1
  222. package/dist/Components/Table/filters/FilterDatePicker.d.ts +6 -0
  223. package/dist/Components/Table/filters/FilterDatePicker.js +61 -0
  224. package/dist/Components/Table/filters/LeftFilterPane.d.ts +1 -0
  225. package/dist/Components/Table/filters/LeftFilterPane.js +14 -6
  226. package/dist/Components/Table/hooks/useTable.js +11 -7
  227. package/dist/Components/Table/settings/ManageColumns.js +4 -3
  228. package/dist/Components/Table/settings/TableSettings.js +4 -4
  229. package/dist/Components/Tabs/Tabs.d.ts +1 -0
  230. package/dist/Components/Tabs/Tabs.js +1 -0
  231. package/dist/Components/Tabs/components/CountBadge.d.ts +1 -0
  232. package/dist/Components/Tabs/components/TabList.d.ts +1 -0
  233. package/dist/Components/Tabs/components/TabList.js +1 -0
  234. package/dist/Components/Tabs/components/TabPanel.d.ts +1 -0
  235. package/dist/Components/Tabs/components/TabPanel.js +1 -0
  236. package/dist/Components/Tabs/tabStyles.js +4 -2
  237. package/dist/Components/Tag/Tag.js +5 -4
  238. package/dist/Components/Tag/Tag.styles.js +5 -4
  239. package/dist/Components/Tag/TagProps.d.ts +4 -1
  240. package/dist/Components/Tag/tagDot.js +10 -3
  241. package/dist/Components/TagInput/TagInput.js +6 -5
  242. package/dist/Components/TagInput/TagInputProps.d.ts +15 -0
  243. package/dist/Components/TagInput/tagEntries.d.ts +7 -1
  244. package/dist/Components/TagInput/tagEntries.js +18 -5
  245. package/dist/Components/TimePicker/TimePicker.js +7 -3
  246. package/dist/Components/TimePicker/TimePickerProps.d.ts +2 -0
  247. package/dist/Components/Timeline/Timeline.js +13 -9
  248. package/dist/Components/Toaster/Toaster.js +2 -1
  249. package/dist/Components/Toggle/TableToggle.d.ts +1 -1
  250. package/dist/Components/Toggle/TableToggle.js +1 -1
  251. package/dist/Components/UpgradeButton/UpgradeButton.js +3 -2
  252. package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +1 -1
  253. package/dist/Components/UserDetails/UserDetails.js +5 -7
  254. package/dist/Components/WishlistToggle/WishlistToggle.js +2 -1
  255. package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +11 -1
  256. package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +3 -1
  257. package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +14 -7
  258. package/dist/Hooks/useOutsideMouseDown.d.ts +11 -0
  259. package/dist/Hooks/useOutsideMouseDown.js +30 -0
  260. package/dist/Hooks/usePreferences.js +30 -12
  261. package/dist/Hooks/useScrollableRegion.d.ts +17 -0
  262. package/dist/Hooks/useScrollableRegion.js +36 -0
  263. package/dist/Hooks/useSidebarPrefs.d.ts +1 -0
  264. package/dist/Theme/chakra/Menu.styles.d.ts +4 -0
  265. package/dist/Theme/chakra/Menu.styles.js +6 -0
  266. package/dist/Theme/chakra/componentStyles.d.ts +4 -0
  267. package/dist/Theme/chakra/componentStyles.js +1 -1
  268. package/dist/Theme/chakra/createBrandTheme.d.ts +1 -0
  269. package/dist/Theme/chakra/focusRing.styles.d.ts +1 -1
  270. package/dist/Theme/chakra/focusRing.styles.js +3 -3
  271. package/dist/Theme/chakra/paletteFromTheme.d.ts +2 -1
  272. package/dist/Theme/chakra/paletteFromTheme.js +18 -4
  273. package/dist/Theme/provider/PixelizeThemeProvider.d.ts +1 -0
  274. package/dist/Theme/provider/ThemeSwitcher.d.ts +1 -0
  275. package/dist/Theme/provider/ThemeSwitcher.js +1 -1
  276. package/dist/Theme/testing/testPalette.d.ts +1 -0
  277. package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +1 -0
  278. package/dist/Theme/tokens/builders/filledSurface.js +3 -2
  279. package/dist/Theme/tokens/builders/focusRing.js +4 -1
  280. package/dist/Theme/tokens/builders/paletteScale.d.ts +2 -0
  281. package/dist/Theme/tokens/builders/paletteScale.js +10 -0
  282. package/dist/Theme/tokens/types.d.ts +1 -0
  283. package/dist/Utils/accountHandoff.d.ts +3 -0
  284. package/dist/Utils/price.d.ts +1 -0
  285. package/dist/Utils/tabular.d.ts +30 -0
  286. package/dist/Utils/tabular.js +61 -0
  287. package/dist/esm/Components/Accordion/Accordion.js +11 -8
  288. package/dist/esm/Components/Accordion/accordionColors.js +2 -3
  289. package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +2 -1
  290. package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
  291. package/dist/esm/Components/Apexcharts/ApexPieChart/pieImageTexture.js +10 -0
  292. package/dist/esm/Components/AppSwitcher/AppSwitcher.js +6 -3
  293. package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +18 -11
  294. package/dist/esm/Components/AppSwitcher/pixelizeSuite.js +67 -0
  295. package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +3 -3
  296. package/dist/esm/Components/Avatar/avatarColorway.js +4 -4
  297. package/dist/esm/Components/Button/Button.styles.js +5 -2
  298. package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
  299. package/dist/esm/Components/CalendarGrid/CalendarGrid.js +5 -3
  300. package/dist/esm/Components/Card/Card.js +1 -0
  301. package/dist/esm/Components/Checkbox/Checkbox.styles.js +3 -1
  302. package/dist/esm/Components/CheckoutKit/selectable.js +10 -7
  303. package/dist/esm/Components/CheckoutKit/tonalHover.js +2 -0
  304. package/dist/esm/Components/ChoiceCard/ChoiceCard.js +2 -1
  305. package/dist/esm/Components/Common/FormLabel.js +4 -3
  306. package/dist/esm/Components/Common/HelperText.js +1 -2
  307. package/dist/esm/Components/Common/activationKey.js +7 -0
  308. package/dist/esm/Components/Common/fieldMessageStyles.js +2 -1
  309. package/dist/esm/Components/Common/findSlot.js +17 -0
  310. package/dist/esm/Components/Common/surfaceFocusRing.js +3 -0
  311. package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +18 -6
  312. package/dist/esm/Components/CopyButton/CopyButton.js +3 -6
  313. package/dist/esm/Components/CouponField/CouponField.js +5 -2
  314. package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +3 -1
  315. package/dist/esm/Components/DatePicker/CalendarPanel.js +3 -1
  316. package/dist/esm/Components/DatePicker/DatePicker.js +25 -27
  317. package/dist/esm/Components/DatePicker/PickerPortal.js +2 -2
  318. package/dist/esm/Components/DatePicker/RangeDatePicker.js +10 -29
  319. package/dist/esm/Components/DatePicker/SingleDatePicker.js +5 -21
  320. package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -20
  321. package/dist/esm/Components/DescriptionList/DescriptionList.js +1 -1
  322. package/dist/esm/Components/DetailSections/DetailSections.js +2 -1
  323. package/dist/esm/Components/Divider/Divider.js +3 -3
  324. package/dist/esm/Components/Drawer/Drawer.js +19 -18
  325. package/dist/esm/Components/Dropdown/DropDown.js +7 -22
  326. package/dist/esm/Components/Editor/Editor.js +7 -3
  327. package/dist/esm/Components/Editor/editorLabels.js +1 -0
  328. package/dist/esm/Components/Editor/editorTokenStyles.js +7 -0
  329. package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +8 -4
  330. package/dist/esm/Components/EmptyState/FilteredEmptyState.js +18 -0
  331. package/dist/esm/Components/FilePreview/FilePreview.js +8 -4
  332. package/dist/esm/Components/FileUpload/FileUpload.js +8 -9
  333. package/dist/esm/Components/FileUploader/FileUploader.js +6 -7
  334. package/dist/esm/Components/FilterSidebar/FilterSidebar.js +94 -237
  335. package/dist/esm/Components/FilterSidebar/OptionsSection.js +41 -0
  336. package/dist/esm/Components/FilterSidebar/RangeSection.js +78 -0
  337. package/dist/esm/Components/FilterSidebar/SectionHeader.js +23 -0
  338. package/dist/esm/Components/FilterSidebar/useStableCallback.js +8 -0
  339. package/dist/esm/Components/Form/FormWrapper.js +5 -3
  340. package/dist/esm/Components/FormField/FormField.js +1 -1
  341. package/dist/esm/Components/Header/Header.js +1 -1
  342. package/dist/esm/Components/Header/HeaderActions.js +6 -4
  343. package/dist/esm/Components/Input/TextInput.js +2 -2
  344. package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -1
  345. package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
  346. package/dist/esm/Components/KanbanBoard/KanbanBoard.js +11 -7
  347. package/dist/esm/Components/LauncherTrigger/LauncherTrigger.js +1 -1
  348. package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -1
  349. package/dist/esm/Components/MediaViewer/MediaViewer.js +5 -4
  350. package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
  351. package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +19 -8
  352. package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +7 -2
  353. package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
  354. package/dist/esm/Components/MediaViewer/components/ViewerIconButton.js +3 -1
  355. package/dist/esm/Components/MediaViewer/mediaItems.js +4 -0
  356. package/dist/esm/Components/Modal/Modal.js +2 -17
  357. package/dist/esm/Components/Modal/warnDroppedSlotChildren.js +7 -3
  358. package/dist/esm/Components/NavLauncher/LauncherTabs.js +2 -1
  359. package/dist/esm/Components/NavLauncher/NavLauncher.js +47 -25
  360. package/dist/esm/Components/NavLauncher/ScopeBar.js +4 -2
  361. package/dist/esm/Components/NavLauncher/engine/engine.js +2 -1
  362. package/dist/esm/Components/NavLauncher/engine/fold.js +2 -1
  363. package/dist/esm/Components/NavLauncher/launcherParts.js +40 -8
  364. package/dist/esm/Components/NavLauncher/searchLayout.js +1 -0
  365. package/dist/esm/Components/NavLauncher/spotlightParts.js +23 -10
  366. package/dist/esm/Components/NavLauncher/useCopiedFlash.js +17 -0
  367. package/dist/esm/Components/NavigationBar/NavigationBar.js +6 -5
  368. package/dist/esm/Components/NoteTextArea/NoteTextArea.js +12 -17
  369. package/dist/esm/Components/Notification/Notification.js +20 -22
  370. package/dist/esm/Components/NotificationBell/notificationHelpers.js +12 -6
  371. package/dist/esm/Components/OffersList/OffersList.js +4 -2
  372. package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
  373. package/dist/esm/Components/OptionChip/optionInk.js +4 -2
  374. package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
  375. package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -7
  376. package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -8
  377. package/dist/esm/Components/PlanPill/PlanPill.js +4 -2
  378. package/dist/esm/Components/ProductCard/ProductCardAction.js +2 -1
  379. package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
  380. package/dist/esm/Components/ProductDetails/ProductDetails.js +2 -1
  381. package/dist/esm/Components/ProfileCard/ProfileCard.js +6 -17
  382. package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
  383. package/dist/esm/Components/ProgressBar/ProgressBar.js +2 -1
  384. package/dist/esm/Components/QuantityStepper/QuantityStepper.js +5 -2
  385. package/dist/esm/Components/QueryState/QueryStateBoundary.js +5 -1
  386. package/dist/esm/Components/RadioButton/RadioButton.js +2 -3
  387. package/dist/esm/Components/RolesPermission/RolesPermission.js +12 -8
  388. package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -3
  389. package/dist/esm/Components/SearchSelect/SearchSelect.js +8 -5
  390. package/dist/esm/Components/SegmentedControl/SegmentedControl.js +1 -1
  391. package/dist/esm/Components/Select/Select.js +6 -0
  392. package/dist/esm/Components/Select/SelectPopup.js +171 -64
  393. package/dist/esm/Components/Select/groupedWindow.js +44 -0
  394. package/dist/esm/Components/SelectSearch/SelectSearch.js +49 -39
  395. package/dist/esm/Components/SelectV2/SelectV2.js +1 -1
  396. package/dist/esm/Components/SideBar/SecondaryBar.js +3 -2
  397. package/dist/esm/Components/SideBar/components/MenuItemBox.js +3 -2
  398. package/dist/esm/Components/SideBar/components/MenuItems.js +1 -1
  399. package/dist/esm/Components/SideBar/components/OtherApps.js +2 -2
  400. package/dist/esm/Components/SideBar/components/PinnedSection.js +1 -1
  401. package/dist/esm/Components/SideBar/sidebarScale.js +2 -2
  402. package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +8 -3
  403. package/dist/esm/Components/SignInActivityTable/scrollRegionRing.js +9 -0
  404. package/dist/esm/Components/Slider/Slider.js +6 -5
  405. package/dist/esm/Components/StageProgress/StageItem.js +2 -1
  406. package/dist/esm/Components/StageProgress/StageProgress.js +8 -2
  407. package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
  408. package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -1
  409. package/dist/esm/Components/Table/Table.js +8 -6
  410. package/dist/esm/Components/Table/components/HeaderActions.js +7 -5
  411. package/dist/esm/Components/Table/components/TableBody.js +13 -8
  412. package/dist/esm/Components/Table/components/TableGroupRow.js +2 -1
  413. package/dist/esm/Components/Table/components/TableHeader.js +15 -21
  414. package/dist/esm/Components/Table/components/rowDetail.js +3 -2
  415. package/dist/esm/Components/Table/filters/ActiveFilters.js +8 -5
  416. package/dist/esm/Components/Table/filters/CompactSelect.js +2 -1
  417. package/dist/esm/Components/Table/filters/FilterDatePicker.js +20 -0
  418. package/dist/esm/Components/Table/filters/LeftFilterPane.js +14 -6
  419. package/dist/esm/Components/Table/hooks/useTable.js +11 -7
  420. package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
  421. package/dist/esm/Components/Table/settings/TableSettings.js +4 -4
  422. package/dist/esm/Components/Tabs/Tabs.js +1 -0
  423. package/dist/esm/Components/Tabs/components/TabList.js +1 -0
  424. package/dist/esm/Components/Tabs/components/TabPanel.js +1 -0
  425. package/dist/esm/Components/Tabs/tabStyles.js +5 -3
  426. package/dist/esm/Components/Tag/Tag.js +5 -4
  427. package/dist/esm/Components/Tag/Tag.styles.js +5 -4
  428. package/dist/esm/Components/Tag/tagDot.js +10 -3
  429. package/dist/esm/Components/TagInput/TagInput.js +8 -7
  430. package/dist/esm/Components/TagInput/tagEntries.js +16 -4
  431. package/dist/esm/Components/TimePicker/TimePicker.js +7 -3
  432. package/dist/esm/Components/Timeline/Timeline.js +14 -10
  433. package/dist/esm/Components/Toaster/Toaster.js +2 -1
  434. package/dist/esm/Components/Toggle/TableToggle.js +1 -1
  435. package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -2
  436. package/dist/esm/Components/UserDetails/UserDetails.js +5 -7
  437. package/dist/esm/Components/WishlistToggle/WishlistToggle.js +2 -1
  438. package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +12 -2
  439. package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +3 -1
  440. package/dist/esm/Hooks/useOutsideMouseDown.js +26 -0
  441. package/dist/esm/Hooks/usePreferences.js +30 -12
  442. package/dist/esm/Hooks/useScrollableRegion.js +33 -0
  443. package/dist/esm/Theme/chakra/Menu.styles.js +6 -0
  444. package/dist/esm/Theme/chakra/componentStyles.js +1 -1
  445. package/dist/esm/Theme/chakra/focusRing.styles.js +3 -3
  446. package/dist/esm/Theme/chakra/paletteFromTheme.js +16 -3
  447. package/dist/esm/Theme/provider/ThemeSwitcher.js +1 -1
  448. package/dist/esm/Theme/tokens/builders/filledSurface.js +3 -2
  449. package/dist/esm/Theme/tokens/builders/focusRing.js +4 -1
  450. package/dist/esm/Theme/tokens/builders/paletteScale.js +6 -0
  451. package/dist/esm/Utils/tabular.js +56 -0
  452. package/dist/esm/index.js +16 -24
  453. package/dist/index.d.ts +54 -2
  454. package/dist/index.js +33 -29
  455. package/package.json +3 -1
  456. package/dist/Components/Buttons/Buttons.d.ts +0 -3
  457. package/dist/Components/Buttons/Buttons.js +0 -9
  458. package/dist/Components/Buttons/ButtonsProps.d.ts +0 -12
  459. package/dist/Components/Common/ErrorComponent.d.ts +0 -7
  460. package/dist/Components/Common/ErrorComponent.js +0 -16
  461. package/dist/Components/Common/FormattedDescription.d.ts +0 -7
  462. package/dist/Components/Common/FormattedDescription.js +0 -62
  463. package/dist/Components/Common/Label.d.ts +0 -9
  464. package/dist/Components/Common/Label.js +0 -12
  465. package/dist/Components/Input/Input/Input.d.ts +0 -4
  466. package/dist/Components/Input/Input/Input.js +0 -75
  467. package/dist/Components/Input/Input/InputProps.d.ts +0 -24
  468. package/dist/Components/Input/Input/InputProps.js +0 -2
  469. package/dist/Components/ProductCard/productCardFixtures.d.ts +0 -7
  470. package/dist/Components/ProductCard/productCardFixtures.js +0 -61
  471. package/dist/esm/Components/Buttons/Buttons.js +0 -4
  472. package/dist/esm/Components/Common/ErrorComponent.js +0 -14
  473. package/dist/esm/Components/Common/FormattedDescription.js +0 -60
  474. package/dist/esm/Components/Common/Label.js +0 -10
  475. package/dist/esm/Components/Input/Input/Input.js +0 -37
  476. package/dist/esm/Components/Input/Input/InputProps.js +0 -1
  477. package/dist/esm/Components/ProductCard/productCardFixtures.js +0 -58
  478. package/dist/esm/services/feedback.js +0 -15
  479. package/dist/services/feedback.d.ts +0 -12
  480. package/dist/services/feedback.js +0 -18
  481. /package/dist/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
  482. /package/dist/esm/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
package/CHANGELOG.md CHANGED
@@ -3,9 +3,9 @@
3
3
  All notable changes to `pixelize-design-library`.
4
4
 
5
5
  Versions follow semver. The `beta` dist-tag is released manually from the active feature branch;
6
- `latest` is published by CI from `develop`. **Pin a prerelease exactly** (`2.4.2-beta.43`, never
7
- `^2.4.2-beta.43`) — a caret range on a prerelease is satisfied by the next stable publish, which
8
- silently downgrades you.
6
+ `latest` is published by CI from `develop`. **Pin a prerelease exactly** (`X.Y.Z-beta.N`, never
7
+ `^X.Y.Z-beta.N`) — a caret range on a prerelease is satisfied by that version's stable release as
8
+ soon as it exists, which silently downgrades you.
9
9
 
10
10
  Found a bug or a gap? Report it as a GitHub issue and track it to closure — see
11
11
  [COMPONENT-GOTCHAS.md](COMPONENT-GOTCHAS.md#found-a-gap-or-a-bug-report-it-then-track-it). A fix's
@@ -18,9 +18,66 @@ next major.
18
18
 
19
19
  ### Added
20
20
 
21
+ - **Development warning for an unthemed `colorScheme`.** `Tag` (dot), `RadioButton` and every style that resolves a scale
22
+ by name now log one `console.warn` per unknown name outside production, then fall back exactly as before (gray, or
23
+ primary for `RadioButton`). Nothing throws and production is silent.
24
+ - **Six prop types reach the package root.** `CopyButtonProps`, `FilterSidebarProps`, `LazyWrapperProps`,
25
+ `ScrollToTopProps`, `FieldSelectModalProps` and `ThemedSwitchProps` (the props of `InputSwitch`) were declared beside
26
+ their exported components but not re-exported. Type-only, additive.
27
+ - **`Tag` `removeLabel` and `TagInput` `labels.remove`.** Name the chip remove button in your own language: `removeLabel`
28
+ takes a string or a function of the label, `labels.remove` a function of the tag. Both default to `Remove <label>`, so
29
+ existing output is unchanged.
30
+ - **`TextInput` `onRightIconClick`**: the correctly spelt name for the right-icon button handler. It wins when both
31
+ names are set; omitted, the output is exactly as before.
32
+ - **`TimePicker` `onClear`**: makes the "--" option pickable once a time is set; choosing it in any select calls `onClear`
33
+ instead of `onChange` (which still only emits a `Date`). Omitted, the output is exactly as before.
34
+ - **`Slider` `showPauseControl`** (default off) adds a play/pause button for the auto-advance (WCAG 2.2.2). It shows only
35
+ while the timer can run (`interval` > 0, two or more slides, no reduced motion). Omitted, the output is exactly as before.
36
+ - **`formatRelativeTime` takes `{ labels, locale }`.** `labels` ({`justNow`, `minutesAgo(n)`, `hoursAgo(n)`, `daysAgo(n)`})
37
+ replaces the English wording and `locale` sets the short date shown past a week (default `en-US`). Omitted, the output is
38
+ exactly as before.
39
+ - **`Tag` and `IconButton` accept any typed `data-*` prop.** The type moved from `Button` to `Common/dataAttributes.ts`; `Tag`
40
+ now puts every `data-*` prop on its root (chip and dot), not only `data-testid`. Omitted, the output is exactly as before.
41
+ - **`ChoiceCardGroup` `columns` and `gap`; `ChoiceCard` `isDisabled`.** `columns` (default `1`, today's column) lays the
42
+ cards out in an equal-width grid, `gap` sets the space between them, and `isDisabled` is an alias of `disabled`
43
+ (either disables the card and skips it for the tab stop). Omitted, the output is exactly as before.
44
+ - **`VerifyEmailOtp` `subtitle` and `labels`**: `subtitle` replaces the hardcoded second line "your new Pixel Account"
45
+ (`""` drops it); `labels` ({`verificationCode`, `digit(index, total)`, `didntReceive`, `resend`}) replaces the English
46
+ UI text. Both optional; omitted, the text is exactly as before.
47
+ - **`WorkspaceTrayPreview` render-prop children**: `{({ triggerProps }) => <button {...triggerProps} />}` hands the one
48
+ focusable trigger `aria-expanded`, plus `aria-controls` and `aria-describedby` pointing at the card while it is open.
49
+ Plain `ReactNode` children work as before and get no ARIA (a bare wrapper `div` cannot hold `aria-expanded`).
50
+ - **`Select` (`native={false}`) gains nine additive props, all default-off.** Search: `searchFields`
51
+ (`["label","description"]` makes the description searchable) and `filterOption(option, query)` (replaces the
52
+ substring match). Multi: `isSelectAll` (Select All / Unselect All row over the rows the filter shows, skipping
53
+ disabled ones), `chipMaxLength`, `isChipRemovable`. Trigger: `rightIcon` (static, or a labelled button via
54
+ `onClick` + `ariaLabel`) and `isFieldLoading` (spinner in the trailing slot, `aria-busy`). Create: `createWhen`
55
+ (`"no-exact-match"` offers Create beside partial matches) and `footerAction` (a persistent last row that calls
56
+ `onSelect(query)` and closes). The Select All, Create and footer rows are keyboard stops.
57
+ - **`TagInput` `labels`**: translate the rejection messages (`maxTags`, `duplicate`, `invalid`) and the live-region announcements
58
+ (`added`, `removed`); omitted keys keep today's English text. The chips' `Remove <tag>` buttons are named by `Tag` and stay English.
59
+
60
+ - **`FilteredEmptyState`, and `QueryStateBoundary` `isFiltered` / `filteredEmpty`.** The "nothing matches your filters" panel:
61
+ `filterCount`, `onClearFilters`, `onRemoveLastFilter` (+ `removeLastFilterLabel`, `clearLabel`), `scale` `"page" | "card"`,
62
+ `title`, `description`. On the boundary, `isEmpty` + `isFiltered` shows it instead of `empty`/`emptyFallback`; omitted, the
63
+ boundary is unchanged.
64
+
65
+ - **`ConfirmDialog` consequences.** `entityName` / `entityKind` (default title `Delete leave type "Sabbatical"?`), `dependents`,
66
+ `consequence` (defaults to "This cannot be undone." with `entityName`), `alternative` (`label`, `description`, `onSelect`,
67
+ `isLoading`; Confirm turns outline, focus still opens on Cancel) and `isConfirmDisabled`. `iconBg` / `iconColor` are now
68
+ optional and derive a soft tint from `tone`; `title` is optional when `entityName` is set. Existing call sites render as before.
69
+
70
+ - **`PIXELIZE_SUITE`, `resolveSuiteApps` and `buildSuiteApps` `devFallbackBaseUrl`.** One catalogue of the six suite apps with
71
+ per-app `preRelease` and `overrides`; `devFallbackBaseUrl` lets a plain-`localhost` host derive the other apps from a labelled
72
+ dev URL instead of throwing (the throw stays the default).
73
+
74
+ - **`RangeDatePicker` `presets`**: `{ label, range: { from, to } }[]` replaces the five built-in shortcuts; `[]` hides the row.
75
+ Omitted, the list is unchanged.
76
+
21
77
  - **`WorkspaceTray` is usable over an open modal.** It is portalled above the modal layer, labelled as a live region
22
78
  (so Chakra's modal aria-hidden skips it) and outside the focus trap, so a window minimised over a wizard can be
23
- restored without closing the wizard. New props: `placement` (`"bottom-end"` | `"bottom-start"`), `offset`,
79
+ restored by pointer without closing the wizard; Tab does not reach the tray until the modal closes. New props:
80
+ `placement` (`"bottom-end"` | `"bottom-start"`), `offset`,
24
81
  `closeLabel(item)`, `dirtyLabel`, `label`; `WorkspaceTrayItem` gains `isDirty` (unsaved dot) and `subtitle`.
25
82
  `WorkspaceWindow` gains `labels` ({minimize, close, openFullPage}) and `finalFocusRef`.
26
83
  The tray now renders in a portal, so a test that queries inside its render container must query `document.body`.
@@ -340,9 +397,53 @@ next major.
340
397
  - **`RangeSlider`** as an owned dual/single-thumb component with a `marks` prop.
341
398
  - `resolveFilledSurface(scale, colors)` — picks readable ink for any filled surface.
342
399
  - `size="2xs"` (16px) on `Avatar`, and `getInitials` to override the built-in derivation.
400
+ - **`Drawer` / `FormDrawer` warn in development when an open drawer has no accessible name.** A drawer with no
401
+ `DrawerHeader`, `aria-label` or `aria-labelledby` is announced as an unnamed dialog; it now logs
402
+ `UNNAMED_DRAWER_WARNING` once per mount (production is silent and unchanged).
403
+ - **77 prop types now reach the package root**, so a consumer can type a wrapper without a deep import of `dist/`:
404
+ `AccordionProps`, the `Apex*ChartProps` and their variant unions, `PaymentCardProps` (+ `Plan` as `PaymentCardPlan`),
405
+ `DropdownProps`, `FilePreviewProps`, `NoteTextAreaProps`, `NotificationProps`, the `NotificationBell*` family,
406
+ `PhoneNumberInputProps`, `Reorder*`, `Select{Single,Multi,Field}Props`, `SelectV2{Single,Multi}Props`, the Drawer, Modal
407
+ and ProfileCard slot props, `UpgradeButtonProps`, `CustomThemeProps` and more (type-only, no runtime change).
408
+ `src/index.propTypes.test.ts` now fails when a prop type in a `*Props` file is neither exported nor marked internal.
409
+ - **`toCsv`, `downloadBlob`, `safeFileName` and the `TabularCell` / `TabularColumn` / `ToCsvOptions` types** (`Utils/tabular.ts`):
410
+ RFC 4180 CSV with a formula-injection guard (a leading `=`, `+`, `-`, `@` gets a `'`, plain signed numbers excepted) and an
411
+ optional BOM; a browser download that revokes its object URL; a file name safe on every OS. Port of the Mobile library's
412
+ `core/files/tabular.ts`. No `.xlsx` and no `Table` export button yet.
413
+ - **Editor token helpers on the root:** `fieldToken`, `extractTokens`, `unknownTokens`, `chipHtml`, `chipify`, `serializeChips`
414
+ and the `ChipContext` type, so an app no longer copies `chipHtml`. `EditorMergeField` gains optional `object`,
415
+ `objectDescription`, `description`, `example`, `source` and `image` for a field browser; `Editor` itself ignores them.
416
+ - **`DarkPaletteOptions` and `DarkPlanes` types** are exported, so the options of `buildDarkPalette` can be named.
417
+ - **README Exports index.** Every value the package root exports is listed in `README.md`, grouped as components,
418
+ hooks, constants and helpers, so a developer or LLM with only this package can find any export. It is generated
419
+ (`UPDATE_README_EXPORTS=1 npx jest src/readmeExportsIndex.test.ts`) and `readmeExportsIndex.test.ts` fails when it
420
+ drifts from `src/index.ts`. `DESIGN-GUIDE.md` gains the type ramp (`textStyle`, `NUMERIC_TEXT`), radius by role,
421
+ the `Table` studio default and a table of parts that belong to a parent (`DrawerBody`, `ProfileCardFooter`,
422
+ `StageItem`, `MediaScrubber`, `LazyWrapper`, `AppearanceSettings`, `ApexPolarChart` and the rest).
423
+ - **Repo tooling, no package change.** `mouseOnlyHandlers.test.ts` is a lower-only ratchet on click-only elements (host
424
+ elements and Chakra layout primitives with `onClick` and no `role`, `tabIndex` or key handler).
425
+ - **Repo tooling, no package change.** `npm run size:web` bundles the root barrel with esbuild and fails over the beta.65
426
+ size +3% (opt-in, not wired to CI).
427
+ - **Repo tooling, no package change.** `scripts/verify-consumers.sh` now covers `lfour/frontend`, finds consumers from a git
428
+ worktree (`CONSUMERS_ROOT`), writes nothing in a consumer, and exits non-zero when nothing was compared or `tsc` rejected
429
+ its own config, instead of printing a clean pass.
343
430
 
344
431
  ### Changed
345
432
 
433
+ - **`ProfileCard` shares the dropped-slot dev warning with `Modal` and `Drawer`.** The helper takes any owner name and
434
+ warns once per owner and type (previously one set across owners); `ProfileCard` keeps its own message text.
435
+ - **`MediaViewer` image pan no longer re-renders the viewer on every pointer move.** The pan offset is held in a ref and
436
+ written to the image's transform directly, so dragging a zoomed photo re-renders nothing (the toolbar and its five
437
+ tooltip-wrapped buttons used to re-render per move). Zooming out or resetting mid-drag now ends the drag.
438
+ - **`MediaViewer` no longer loads `date-fns`** for its one "Uploaded" date; `Intl.DateTimeFormat` prints the same
439
+ `Oct 12, 2026` text (-5.6 KB gzip for an app that does not also use `DatePicker`).
440
+ - **NavLauncher** search rows are `memo` with stable handlers: moving the active option with the arrow keys or the pointer re-renders the 2 rows that change instead of every row (80 rows: 80 renders before, 2 after); the consumer's `onClose`, `onNavigate` and `onTogglePin` may be inline functions without defeating it. Pixel-identical.
441
+ - **`ProfileCard` warns in development when it drops a child**, once per dropped type, like `Drawer` and `Modal`: anything
442
+ that is not a `ProfileCardHeader`/`Body`/`Footer` (or a Fragment of them) never renders.
443
+ - **`Table` rows render once on mount, not three times.** Measured column widths and the select slot's width only feed frozen columns and the row-detail chevron, but a fresh offsets array on every measurement re-rendered every row. Tables without a frozen column or `renderRowDetail` now keep a stable offsets array; frozen and detail tables still update when widths settle. No visual change.
444
+ - **`Table`, `Button` and `Toaster` hairlines and small text read the tokens.** 18 `0.063rem` borders now use `BORDER_WIDTHS.hairline` and 12 pixel font sizes use the `fontSizes` keys; the token-ownership baselines drop to match (`remHairline` 24 to 6, `fontSizePx` 54 to 42). Computed styles and layout of the demo page, filter pane, chips and settings sheet are identical before and after, in light and dark.
445
+ - **`KanbanBoard` cards no longer re-render when `onOpen` or `onDelete` is an inline arrow.** The board hands cards stable wrappers that call the latest prop, so a parent re-render leaves every card alone and a click still reaches the current handler. No visual change.
446
+ - **`Table` header controls skip renders they do not need.** Each column's sort, search and filter-open handlers keep their identity, so hovering a header or sorting one column no longer re-renders every other column's sort icon and filter control. No visual change.
346
447
  - **Performance, no visual change** (web premium/perf campaign):
347
448
  - Theme colour math is memoised (`resolveFilledSurface`, `liftToContrast`, `softenToContrast`,
348
449
  `resolveSoftTone`, luminance) in bounded, content-keyed caches: the hot calls are 5-20x faster and
@@ -451,9 +552,63 @@ next major.
451
552
  `colorScheme` (any brand/global scale, via `resolveFilledSurface`), `isReadOnly` with real
452
553
  `aria-readonly`, and `m`/`mt`/`mb`/`ml`/`mr`/`mx`/`my` on the wrapper. `InputSwitch` is now a
453
554
  genuine thin wrapper — no prop it previously accepted is silently dropped.
555
+ - `jsdoc/require-jsdoc` now also covers exported `*Props` / `*Options` types outside `*Props` files; around 30 types gained a one-line doc.
454
556
 
455
557
  ### Changed (visual)
456
558
 
559
+ - **`NavLauncher` text snaps to the type scale.** The trigger, panel and spotlight (`NavLauncher`, `launcherParts`, `spotlightParts`) read
560
+ `xs-plus` (13px) where they drew `12.5px` and `xs-minus` (11px) where they drew `11.5px`; the `13.5px` sizes stay. Each size moves by 0.5px.
561
+ - **Disabled `Button` dims to the shared 0.5.** The base style drew `opacity: 0.6` while every other disabled control reads
562
+ `DISABLED_OPACITY` (0.5); disabled buttons, and the `IconButton`s that inherit them, now read slightly dimmer.
563
+ - **`Toaster` card no longer slides twice.** The card added a 24px `x` slide on top of Chakra's own wrapper slide (400ms), so a toast travelled twice and settled late. The card now only fades; the wrapper's slide is the only one.
564
+ - **Focus on dark chrome draws the library's two-band ring.** `Header` edit/create buttons, the `MediaViewer` controls (icon buttons, scrubber, volume and seek thumbs) and the `Dropdown` option rows replace a single 2px band with halo + ring (`surfaceFocusRing` on the dark surface; `insetFocusRingShadow` for the rows), so the ring is 4px at its outer edge like every other control.
565
+ - **Overlay and card elevation read the shadow tokens.** The `AppSwitcher` and `OrgSwitcher` panels use `shadows.float` (was a single `0 10px 30px` layer), `SignInActivityTable` uses `shadows.sm`, and the `SearchSelect` open-state inset border and `Timeline` node rings are `BORDER_WIDTHS.hairline` (1px) instead of `0.063rem`.
566
+ - **Hover fades and small transforms take the motion tokens.** `CopyButton`, `CustomModulesTable`, `UserDetails`, `SignInActivityTable`, `RolesPermission`, `OrgSwitcher`, `AppSwitcher`, `NavigationBar`, `ButtonGroupIcon`, `DatePicker` days, `Checkbox`, `PlanPill`, `FilePreview` and `MediaViewer` replace literal `0.12s` / `0.15s` / `0.2s` with `transitionFor`: fades are 150ms and `PlanPill` / zoom are 200ms, on the standard curve (the `ease-out` drags use the out curve). Differences are at most 30ms.
567
+ - **`PlanPill` and the `SideBar` chrome snap to the type scale.** `12.5px` becomes `13px` (`xs-plus`; `PlanPill` label, `SIDEBAR_CHROME.titleFontSize`) and `11.5px` / `9.5px` become `11px` (`xs-minus`; `SIDEBAR_CHROME.labelFontSize`, section captions in `MenuItems`, `OtherApps`, `PinnedSection`). Sizes change by at most 0.5px; `10px` and `15px` stay as they are.
568
+ - **Hover lift and the `Timeline` divider use whole pixels.** `KanbanBoard` account cards and clickable `Timeline` cards lift by `-1px` (was `-0.063rem`, 1.008px at the default root size, which anti-aliases a transform), and the `Timeline` divider is `BORDER_WIDTHS.hairline` tall.
569
+ - **Disabled and blocked rows dim to `DISABLED_OPACITY` (0.5).** `CouponField` options, `CheckoutKit` selectable cards, `SideBar` blocked items (primary and secondary), `StageProgress` / `StepperStage` and `UpgradeButton` dimmed to 0.6 or 0.55; they now match `Tag` and the token. Busy-state dims are unchanged.
570
+ - **NavLauncher Top hit and answer cards show their ENTER chip only while active.** Both drew "ENTER" (and an answer its "copy" hint) permanently, so while another row was active two results claimed Enter; search rows already showed the chip on the active row only. The chip is hidden with `visibility`, so nothing shifts, and a card that just copied still shows "Copied".
571
+ - **NavLauncher footer stays one row on a tablet.** Between `md` and `lg` (768-1023px) the legend plus the footer note wrapped to two rows, 53px; the "+ click for new tab" hint (a mouse hint) now shows from `lg` up, so the footer is 32px at 768px and 820px. Unchanged from `lg` up.
572
+ - **NavLauncher footer legend follows the active entry on a Show more option and for copy-only answers.** ENTER read "open here" while a Show N more row was active although Enter expands the group; it now reads `labels.hintExpand` (new, default "expand"). The ⌘ ENTER "new tab" hint dims while the active result cannot open in a tab (a copy-only answer, an action, Show more). The ENTER label reserves the widest of its three texts, so nothing after it moves.
573
+ - **Inset focus ring: ring on the outer edge, halo inside.** `insetFocusRingShadow` drew them the other way round, so a child
574
+ covering the inner band left only the surface-coloured halo. It now matches `Accordion` (unchanged). Affects NoteTextArea,
575
+ CalendarGrid, SearchSelect, SelectSearch, MediaGallery and the FilterSidebar range and options sections.
576
+ - **Focus ring settles against the table header band.** `focusRing.ring` is now also lifted to 3:1 on the table header band
577
+ (raw and as stepped): rosewood light and lavender, meadow, skyline and slate dark move one or two lightness steps from
578
+ 2.97-2.99:1; every other brand and mode keeps its ring.
579
+ - **`Timeline` attachment chip hover ink clears AA in light.** The hovered chip kept the rest ink on the darker
580
+ `primary[100]` fill (3.86:1 radiant, 4.05:1 lavender, 4.39:1 slate); the ink is now picked against the hover fill in
581
+ both modes. Only light hover on brands whose rest ink fell short changes.
582
+ - **Commerce hover fills are a visible step in dark.** `OffersList`, `CouponField`, `DetailSections`, `StickyBuyBar` (notify), `QuantityStepper`, `WishlistToggle` (soft, ghost), `ProductCard`'s off-photo action, `ProductDetails`' share button, selectable `AddressCard`/`PaymentOption` and `OptionChip` hovered `background[100]` to `[200]` (`[300]` to `[400]` for the chip), 1.05-1.08:1 in dark. The hover now steps 1.15:1 or more off the resting fill; light is unchanged.
583
+ - **`ApexPieChart` `variant="pie-with-image"` no longer calls imgur** (two hard-coded URLs that answered 403, so the slices
584
+ painted nothing). Each slice now gets an inline striped texture in its own colour, light and dark. New optional
585
+ `images?: string[]` supplies your own sources (one per slice; the first repeats past the end).
586
+ - **`ApexLineChart` toolbar and its "Download SVG/PNG/CSV" menu are themed in dark.** The chart never told ApexCharts the
587
+ canvas mode, so its menu rendered light text on a white panel (1.13:1); it now follows the palette (15:1). Light is unchanged.
588
+ - **`FilterSidebar`'s rules inside the card use the in-card weight** (`cardRule`): the section dividers, the Filters header rule,
589
+ the cards-variant section edge, the range track and the range value chips. Dark lifts them off the card; light is unchanged.
590
+ The outer container outline keeps `boxborder[200]`.
591
+ - **`SelectSearch`'s separator above the bottom action** uses the overlay rule (`raisedRule`) like the action row below it,
592
+ not Chakra's default border colour. Dark gets the in-card weight; light moves by a few channel values.
593
+ - **`SelectSearch` colour-option swatch** uses the `full` radius token instead of `50%`. The dot is the same circle; Chromium
594
+ anti-aliases its edge pixels slightly differently.
595
+ - **`Notification` countdown label keeps counting.** It was computed once at first render and stayed at "due in 5
596
+ hours" for the life of the card; it now refreshes every minute while a `dueDate` or `endDate` is set (no timer
597
+ otherwise, cleared on unmount).
598
+ - **`NoteTextArea` dark footer band separates from the note area.** In dark the active band under the note was 1.11:1
599
+ against it and read as one slab; it now steps to 1.19:1, and the attachment chip fill, its remove-hover and the control
600
+ hover follow so a chip keeps a visible step and its text stays above 4.5:1. Light mode is byte-identical.
601
+ - **`Notification` overdue label** reads "Task overdue by 3 hours", without the trailing "ago".
602
+ - **`Notification` dismiss control** shows the focus ring on keyboard focus, like the title button beside it. It was
603
+ focusable with no visible indicator.
604
+ - **`WorkspaceWindow` header and `WorkspaceTrayPreview` card rule in dark**: the header strip read 1.08:1 off the raised
605
+ window and its rule 1.00-1.07:1; both now step off `surfaceRaised` (`bandOn`, `raisedRule`) to 1.16:1 and about 1.35:1.
606
+ The preview card's border takes the same rule. Light is unchanged.
607
+ - **`Table` settings sheet option cards and column-row hover outline are visible in dark.** The Density and Group option cards and the Manage Columns row hover used `boxborder[200]` on the raised surface (about 1.0-1.07:1); they now use `raisedRule`. Light is unchanged.
608
+ - **`Table` filter pane rules and expanded row are visible in dark.** The pane's edge, header, search and Apply-bar rules use `cardRule` instead of `boxborder[200]` (1.08-1.16:1 on the lifted card), and an expanded section steps off the card with `bandOn`. Light is unchanged.
609
+ - **`Table` active-filter strip reads as a band in dark.** The strip behind the filter chips was 1.06:1 from the card; it now uses `bandOn` (about 1.19:1), and the chip tone and Clear All ink are derived against that strip. Light is unchanged.
610
+ - **`Table` bulk-action hover fill is visible in dark.** The hover on Delete and Mass Update used `background[100]`, which sits about 1.06:1 from the card; it now steps off the card with `bandOn` and the accent ink is re-derived against the lifted fill. Light is unchanged.
611
+ - **`Table`'s date filter loads on demand.** The filter pane's `DatePicker` (and date-fns) no longer ships in `Table`'s static graph: the Table's initial JS drops about 7.5 KB gzip (51.9 to 44.4 KB measured with peers external) and the picker loads as its own 8.8 KB chunk, preloaded when the pane has a date item. Once loaded the control is pixel-identical; a control-height skeleton shows only if it renders before the chunk arrives.
457
612
  - **Dark surfaces are hue-neutral on every brand.** The canvas, card, overlay, named `backgroundColor` ladder,
458
613
  `background[50-900]` and `table.hover` no longer take a brand tint (`SURFACE_SAT` 14 to 0): all 9 brands share
459
614
  canvas `#121212`, card `#212121` (1.163:1 over the canvas) and overlay `#2c2c2c` (1.153:1 over the card), so
@@ -552,9 +707,155 @@ next major.
552
707
  - **Light page canvas (`backgroundColor.base`) sits 1.09:1 below the card on all 9 brands**, so a borderless card keeps
553
708
  its top edge (zinc and slate `#fafafa` to `#f5f5f5`, lavender `#fbfafd` to `#f5f4f8`). `main` and every other token
554
709
  are unchanged.
710
+ - **`NavLauncher` outlines stay visible on the dark overlay.** Scope chips and arrows, the Top hit and answer cards,
711
+ suggestion chips, pinned tiles, the Pin buttons, the tab bar, section rules and the rail and preview-pane edges were
712
+ `boxborder[200]`, 1.00-1.07:1 against `surfaceRaised` in dark (zinc 1.07, the other eight under 1.03). They now use
713
+ `raisedRule`: 1.32-1.39:1 against the overlay and 1.64-1.73:1 where a recessed pane meets it. Section rules inside the
714
+ recessed rail use `ruleOn` against `backgroundColor.subtle` (1.31-1.36:1, was 1.17-1.26:1). Measured on all 9 brands;
715
+ light mode is pixel-identical, since both helpers return `boxborder[200]` there.
716
+ - **`NavLauncher` confirms a copy on screen.** Enter or a click on a copy-only answer swaps the hint on its card and in
717
+ the preview pane (`ENTER copy`) to `labels.copied` in `accentText` for 1.5 s, then restores it; only a visually hidden
718
+ live region announced a copy before. The swap reserves the longer label's width, so nothing shifts, and its fade is
719
+ off under `prefers-reduced-motion`. The live region still announces each copy once, focus stays in the field and a
720
+ blocked clipboard never shows "Copied". On touch (`hover: none`), where the hint is hidden, the label alone pins over
721
+ the card's right edge for the same 1.5 s.
722
+ - **`NavLauncher` drops the keyboard-hint row below `md`.** At 390px wide the legend wrapped to three rows (63.8px) and
723
+ made the footer 100px tall, over a footer note that needs 32px; the footer is now 32px there, so the scrolling area
724
+ (results, then the Pinned block) gains 68px. Touch devices already hid the legend at any width, and from `md` up it
725
+ is unchanged.
726
+ - **`Button` `outline` / `ghost` / `link` ink clears AA on the light page canvas too.** The ink was lifted against the
727
+ canvas, a card and an overlay but not `backgroundColor.base` (the canvas the example pages and any borderless-card layout
728
+ sit on, 1.09:1 under the card), where it measured 4.21-4.49:1. It now steps one rung darker in 21 brand/scheme pairs, light
729
+ mode only: zinc `gray` and `secondary` `#71717a` to `#52525b`, slate `primary` `#6b7280` to `#4b5563`, emerald and
730
+ storefront `gray` `#617474` to `#5e7070`, `purple` `#805ad5` to `#6b46c1` on 8 brands, `green` `#198341` to `#136533` on 7,
731
+ zinc `yellow` `#887425` to `#68591c`. Dark mode and every other `Button` pair are byte-identical.
732
+ - **`Tabs` selected ink clears AA on the light page canvas.** The selected `outline`, `ghost` and `line` ink was lifted
733
+ against the tab canvas only, not `backgroundColor.base`, where slate measured 4.43:1 (record detail). On slate, light
734
+ mode only, that ink, the `outline` border and the `line` indicator step from `#6b7280` to `#4b5563` (6.93:1). Every
735
+ other brand and mode is byte-identical.
736
+ - **`Tabs variant="ghost"` selected ink clears AA on its own tint.** The ink was lifted against the canvas, but a
737
+ selected ghost tab paints its own gray tint and the ink sits on that, where it measured 4.21-4.31:1 on radiant (light),
738
+ emerald (dark) and rosewood (dark). It now steps one rung: radiant light `#b84533` to `#983628`, emerald dark
739
+ `#0f9d8a` to `#14e3c7`, rosewood dark `#cb6b94` to `#ce91ab`. The other 15 brand and mode pairs are byte-identical.
740
+ - **`FilterSidebar`'s Clear control, range triggers and value rows, and rating rows draw the focus ring on keyboard focus
741
+ only.** The shared halo and ring (`focusVisibleRing`), drawn inset on the value and rating rows because their panel
742
+ clips overflow. Rest and mouse click look exactly as before.
743
+ - **`FilePreviewTrigger` shows its preview scrim and a focus ring on keyboard focus.** The eye-icon scrim that hover
744
+ reveals now also appears when the thumbnail takes keyboard focus, with the shared halo and ring (`focusVisibleRing`).
745
+ Rest, hover and mouse click look exactly as before.
746
+ - **`SelectSearch`'s `isBottomIcon` footer draws the focus ring on keyboard focus only.** The shared halo and ring
747
+ (`insetFocusRingShadow`), drawn inset because the popup panel clips overflow. Rest, hover and mouse click look
748
+ exactly as before.
749
+ - **`Editor`'s editing area joins the Tab order and its frame shows focus** (axe `scrollable-region-focusable`, WCAG
750
+ 2.1.1 and 2.4.7). Jodit ships the surface at `tabindex="-1"`, so a keyboard could not reach the text and a
751
+ scrollable read-only editor could not be scrolled. `Editor` now sets `tabIndex: 0` (a `config.tabIndex` you pass
752
+ wins), and while focus is inside it the Jodit frame takes the field focus look: a `primary[500]` border and the soft
753
+ bloom, light and dark. At rest nothing changes. Each editor adds one Tab stop between its toolbar and its status bar.
754
+ - **`OrganizationDetails`' header avatar is the library's own `Avatar`** (it rendered a raw Chakra one). Chakra picked
755
+ the initials ink by a brightness threshold: dark mode measured 1.98:1 (zinc 2.17:1) on all 9 brands and emerald and
756
+ storefront 4.26:1 in light, at 9.6px. The fill now follows the brand and mode like every other avatar and the ink
757
+ clears AA on all 9 brands in both modes. The avatar renders only with `userName`, since the owned `name` is required:
758
+ without it the grey placeholder icon is gone.
759
+ - **`Header`'s bar row is `min-height` 4.3rem instead of a fixed `height`**, so a nav that wraps (many items, or
760
+ `HeaderActions` labels in a narrow bar) grows the bar around it. The fixed height let the wrapped row hang off the
761
+ bar onto the page canvas, where its count badge measured 1.55-1.91:1 on all 9 brands in light (axe `color-contrast`,
762
+ `/header`). A bar whose nav fits on one row is pixel-identical, and 4.3rem is still its height.
763
+ - **`ScrollbarBox` is a keyboard stop while it scrolls.** A box whose content overflows a scrollable axis (more than
764
+ 1px) and holds nothing focusable now takes `tabIndex={0}`, so a keyboard user can scroll it, and draws the library
765
+ focus ring on `:focus-visible` only. A box that fits, scrolls `hidden`, or holds a button or link is unchanged, as
766
+ is a mouse click. The new optional `aria-label` names the stop as a `region`; without it the stop has no name.
767
+ Closes axe `scrollable-region-focusable` on `/scrollbarBox` (6 regions).
768
+ - **`StageProgress`'s strip is a keyboard stop while it scrolls with nothing focusable in it.** At phone width a
769
+ read-only strip (or one with every stage disabled) overflows and a keyboard user could not scroll it; it now takes
770
+ `tabIndex={0}` and draws the library focus ring on `:focus-visible` only. A strip with a stage button, or whose
771
+ stages fit, is unchanged, as is a mouse click. The new optional `aria-label` names the stop as a `region`, or names
772
+ the list when `variant="stepper"`. Closes axe `scrollable-region-focusable` on `/stageProgress` (`[data-stage-strip]`).
773
+ - **`SignInActivityTable`'s scroll area is a keyboard stop while the table scrolls.** At phone width the three columns
774
+ overflow the card and a keyboard user could not scroll them; the wrapper now takes `tabIndex={0}`, is a `region`
775
+ named by `labels.title`, and draws a 2px ring on `:focus-visible` only. The ring is an outline in `focusRing.ring`
776
+ (lifted until it clears 3:1 on the header band, on all 9 brands in both modes), because the library's inset shadow
777
+ hides under the opaque header. A table that fits, a mouse click and the rest state are unchanged. Closes axe
778
+ `scrollable-region-focusable` on `/signInActivityTable`.
779
+ - **`Menu` dividers keep their full weight in dark.** Chakra's stock divider carries `opacity: 0.6`, which pulled the
780
+ `NavigationBar` avatar menu and `ThemeSwitcher` rules down to 1.17-1.21:1 on the overlay; the `divider` part now
781
+ draws `raisedRule(colors)` at full opacity in dark (1.32-1.39:1) and stays at 0.6 in light, which is unchanged.
782
+ - **`Timeline` attachment-chip hover steps off the chip in dark.** The hover fill (`primary[100]`) sat 1.01-1.07:1 off
783
+ the resting chip on meadow, emerald and storefront and kept the resting ink, 3.82-4.29:1 on it; it now uses `bandOn`
784
+ (1.17-1.20:1 on those three) with an `accentTextOnCanvas` ink above 4.5:1 on every brand. Light is unchanged.
785
+ - **`Timeline` note box and "from" change pill step off the card in dark.** Both painted `gray[50]` on the event card
786
+ at 1.11:1; they now use `bandOn(gray[50], background[50])` (1.19:1), and the note's attachment chip, edit hover and
787
+ icon ink re-derive against the lifted box so they keep their step and AA ink. Light is unchanged.
788
+ - **`Timeline` rules inside the event card use the card rule in dark.** The note box outline and the divider above the
789
+ notes drew `boxborder[200]` at 1.13-1.16:1 on the card (1.08:1 on zinc); both now read `cardRule(colors)` (1.31-1.34:1).
790
+ The card's own outline and the date chips on the page canvas are unchanged. Light is unchanged.
791
+ - **`OrgSwitcher` search-header rule is visible in dark.** The rule under the search field was `gray[100]`, 1.11:1 on
792
+ the raised popover; it now reads `raisedRule(colors)` (1.32-1.39:1). Light keeps `gray[100]`.
793
+ - **`ProfilePhotoViewer` view-button hover steps off the button in dark.** The hover fill (`gray[50]`) sat 1.11:1 off
794
+ the resting `background[50]` button; it now uses `bandOn` (1.19:1) with the accent ink re-derived against it. The PDF
795
+ fallback tile (`gray[100]`, 1.27:1) already steps and is unchanged. Light is unchanged.
796
+ - **`RolesPermission` header band and in-card rules are visible in dark.** The table header band (`background[100]`) sat
797
+ 1.06:1 off the card and the rules inside the card (card header, table rows, footer divider) drew `boxborder[200]` at
798
+ 1.08-1.16:1; the band now uses `bandOn` (1.19:1) and the rules `cardRule(colors)` (1.31-1.34:1). The card's own
799
+ outline is unchanged. Light is unchanged.
800
+ - **`SearchSelect` `insideSelect` divider is visible in dark.** The rule between the nested picker and the input drew
801
+ `boxborder[200]` at 1.22-1.25:1 on the trigger (eight of nine brands); it now reads `ruleOn` that plane (1.31:1+).
802
+ The popup outlines are unchanged. Light is unchanged.
555
803
 
556
804
  ### Fixed
557
805
 
806
+ - **`FileUploader` revokes its `blob:` preview URLs on unmount.** Images still listed when the component unmounted kept their
807
+ object URLs alive for the life of the page; removal, `maxFiles` overflow and `maxTotalSize` rejection already revoked.
808
+ - **`SearchSelect`'s "Clear all" button no longer opens the menu.** Its click bubbled to the control, so Enter, Space or a
809
+ click on it cleared the value and then opened the list; the click is now stopped at the button, as the chip remove
810
+ button already did.
811
+ - **`DescriptionList` stacked values wrap long unbroken strings.** A token or URL with no break opportunity overflowed
812
+ its cell; stacked values now carry `overflow-wrap: anywhere`. Only strings that overflowed before change; the inline
813
+ layout keeps its single-line truncation.
814
+ - **`FilterSidebar`'s section Clear control is no longer nested inside the accordion header button** (axe
815
+ `nested-interactive`). `Accordion` items gain `headerAction` (a control beside the header button, which keeps the header
816
+ hover lit) and `customStyles.headerActionStyle`; rest, hover and focus render the same pixels. The header button's
817
+ accessible name is now the section label alone, and a click on Clear no longer reaches the header.
818
+ - **`FilterSidebar`'s maximum range picker is portalled like the minimum one.** Only the minimum picker was, so a host
819
+ that clips or stacks over the sidebar (a positioned `overflow` ancestor) could cut the maximum list off. Both now share one picker.
820
+ A range drag or an option toggle also re-renders only its own section instead of the whole sidebar.
821
+ - **`SelectSearch` popup keyboard and axe defects.** The sticky `isBottomIcon` footer no longer covers the row Arrow keys
822
+ focus last (the panel reserves its height as scroll padding). An empty or loading panel is no longer a `listbox` with
823
+ no options (axe `aria-required-children`); it keeps its text and drops the role. Tab out of the popup now closes it.
824
+ Picking an option with the keyboard returns focus to the input instead of dropping it to `body`, and Escape in the
825
+ input no longer swallows the next Tab-in open.
826
+ - **`NoteTextArea` Save stays disabled while either field is over its word cap.** Two effects each wrote the disabled
827
+ state, so whichever field was edited last decided it: a long title could be saved after editing the note, and a long
828
+ note after editing the title. Save is now derived from both counts.
829
+ - **`FormWrapper` forwards `id`, `data-*`, `aria-*`, `className` and handlers to its outer wrapper** instead of dropping
830
+ them, and `icon` accepts a rendered element (`<FiUser />`) as well as a component reference; an element used to throw
831
+ "Element type is invalid".
832
+ - **`VerifyEmailOtp` cells now offer one-time-code autofill.** `otp` is passed to the pin input, so the cells carry
833
+ `autocomplete="one-time-code"` instead of `"off"` and the browser or OS can suggest the emailed code. The resend link
834
+ is the owned `Button`.
835
+ - **`WorkspaceTrayPreview` no longer closes while the pointer sits on its trigger.** Moving from the card back onto the
836
+ trigger ran the card's own leave handler and closed the preview after the grace delay; the wrapper alone now owns
837
+ open and close.
838
+ - **`Select` `virtualizeAfter` now windows grouped lists.** It used to switch itself off whenever any option had a
839
+ `group`, rendering every row; headers now take part in the window.
840
+ - **`Select`: Enter and Space on the clear (x) or a chip's remove button did nothing from the keyboard.** The trigger
841
+ swallowed them to open the popup; keys from a nested button now reach the button.
842
+ - **The date, range and time picker popovers and `FilePreview` honour `prefers-reduced-motion`**: the popover slide/scale and the preview
843
+ scale-in are skipped when the user asks for reduced motion.
844
+
845
+ - **The required `*` is hidden from screen readers** in `FormField` and every `TextLabel` label (it was read as "star" and
846
+ became part of the field's accessible name). The control's own `aria-required` still announces it; sighted users see no change.
847
+
848
+ - **Legacy `DatePicker` (Table filter pane) no longer puts `aria-expanded` on a non-focusable wrapper `div`.** It anchors the
849
+ popover like `SingleDatePicker` and the input carries `aria-haspopup="dialog"`; Escape on the focused field now closes the
850
+ calendar. Looks and click behaviour are unchanged.
851
+
852
+ - **`Table` filter pane search box honours reduced motion.** The search field no longer slides in over 200 ms when the user prefers reduced motion; it appears in place.
853
+ - **`Table` notices when replaced rows gain or lose `content`, `onLink`, `onEdit` or `onDelete`.** The row-action and expand columns were decided from the row count and first id only, so a same-sized reload with the same first row kept a stale layout.
854
+ - **`ThemeSwitcher variant="segmented"`** is one tab stop, on the selected mode, like the radiogroup it declares.
855
+ All three modes were separate tab stops. Arrow keys still move focus and selection together; a Tab from outside
856
+ lands on the selected mode.
857
+ - **`LazyWrapper`** `fallback={null}` now renders nothing while loading, as written. `??` swapped the built-in
858
+ spinner in for an explicit `null`; only an omitted `fallback` (`undefined`) selects the spinner now.
558
859
  - **`WorkspaceTrayPreview`** reports `onOpenChange(false)` only after the card actually opened (it used to fire when
559
860
  the pointer left before the open delay).
560
861
  - **`FileUploader`** revokes the blob URL of an image the moment it is removed, and of images it rejects (over the total
@@ -571,8 +872,55 @@ next major.
571
872
  control. No visual change.
572
873
  - **`SearchSelect`'s open listbox and `Select`'s popup dialog have an accessible name**, from `label`, then
573
874
  `aria-label`, then `placeholder`.
875
+ - **Unnamed controls now have names, with no visual change.** `NoteTextArea`'s remove-attachment button is
876
+ named `Remove <file name>`; the legacy `DatePicker` that `Table`'s filter pane renders names its month buttons
877
+ (`Previous month`, `Next month`) and its two selects (`Month`, `Year`), as `CalendarPanel` does.
878
+ - **`FilterSidebar`'s Clear control, range triggers and value rows, and rating rows work from the keyboard.** They were
879
+ mouse-only. Each is now a named control that Enter and Space operate (`Clear <section>`, `<section> minimum: <value>`,
880
+ `<section>: N stars & up`), the open range picker is a named dialog, and the current value or rating reports
881
+ `aria-pressed`. A test that counts `getAllByRole("button")` inside a `FilterSidebar` sees more of them. Rest and
882
+ click look as before, except that opening a range picker with the mouse no longer paints a focus ring around the
883
+ popover: the trigger now takes focus first, so the popover's own focus move is no longer keyboard-visible.
884
+ - **`FilePreviewTrigger` is a real button, named `Preview <file name>`** (`Preview file` without one). It was a click-only
885
+ `role="group"` div the keyboard could not reach. Tab now lands on it, Enter and Space open the preview, and closing the
886
+ preview returns focus to it. A test that found it by `role="group"` must query the button. Rest, hover and a mouse
887
+ close look as before; opening the preview with the mouse no longer paints a stray focus ring on its first toolbar
888
+ button, because the thumbnail now takes focus first.
889
+ - **`SelectSearch`'s `isBottomIcon` footer works from the keyboard.** It was a click-only div. It is now the last
890
+ `option` of the listbox, named by its text: ArrowDown, ArrowUp, Home and End reach it, Enter and Space run
891
+ `handleBottomClick` with the popup left open, Escape closes the list, and it is the only stop while nothing matches or
892
+ the options load. `getByRole("listbox")` now contains the footer, and a test that counts `getAllByRole("option")`
893
+ with `isBottomIcon` sees one more. Rest and click look as before.
574
894
  - **`WorkspaceWindow`'s dialog is named by its visible title**; while a window is open the page behind it is
575
895
  `aria-hidden`, as for any modal.
896
+ - **`UpgradeButton`, `PlanPill` and `PlanBadge` are named by what they show** (WCAG 2.5.3, axe
897
+ `label-content-name-mismatch`). The fixed `aria-label` left out the subtitle, the status chip and, on phones, the
898
+ `mobileLabel`. Without an `ariaLabel` the name now comes from the content: `Pro 5d left`, where it was
899
+ `Pro — 5d left`. A passed `ariaLabel` still wins and should contain the visible text. A test that looks the
900
+ button up by the old dashed name needs the new one. Nothing changes visually.
901
+ - **`OrgSwitcher` names its trigger by what it shows** (WCAG 2.5.3, axe `label-content-name-mismatch`). The full
902
+ layout was named by `ariaLabel` alone (`Switch organization`) and the avatar layout by the name without its
903
+ initials, so neither held the visible text. Both now read `${ariaLabel}, ${shown organization}` (the placeholder
904
+ when none is active). The avatar initials are `aria-hidden` generated content (`data-initials`), no longer text,
905
+ which also takes them out of each dropdown row's name. A test that finds the initials with `getByText` must query
906
+ `[data-initials]`; one that looks the trigger up by the exact name `Switch organization` needs the longer name.
907
+ Nothing changes visually.
908
+ - **`CalendarGrid` day cells are named by what they show** (WCAG 2.5.3, axe `label-content-name-mismatch`). A
909
+ cell's `aria-label` (`Monday, October 5, 2026, 1 event`) left out the event chips and `renderDayCell` content it
910
+ displays. The cell now has no `aria-label`: a visually hidden date and count (`labels.eventCount`) come first and
911
+ the cell's own content follows, so the name reads `Monday, October 5, 2026, 1 event Payroll cut-off`. A test that
912
+ finds a cell by its old exact name needs a pattern or `data-date`. No layout change.
913
+ - **`FileUpload`'s progress bars are named** (axe `aria-progressbar-name`). Each `progress` entry rendered a
914
+ `progressbar` with no name; it is now `Upload progress for <file name>`.
915
+ - **`FileUpload`'s drop zone is named by what it shows** (WCAG 2.5.3, axe `label-content-name-mismatch`).
916
+ `label`, or `inputAriaLabel` (default `Upload files`), was the whole name, so it left out the visible `Drag and
917
+ drop files here` and the type and size limits. The name is now `${label ?? inputAriaLabel}, Drag and drop files
918
+ here .jpg, .png up to 5.00 MB`: a passed `inputAriaLabel` still leads. A test that looks the zone up by the old
919
+ exact name needs a pattern. No visual change.
920
+ - **`Editor`'s editing area is named** (axe `aria-input-field-name`). Without a visible `label` the
921
+ `role="textbox"` surface had no name at all; it is now `labels.editor` (default `Rich text editor`), and still
922
+ `label` when one is given. A read-only editor also exposes `aria-readonly`. Give each unlabelled editor on a page
923
+ its own `labels.editor`. No visual change.
576
924
  - **`CustomModulesTable`'s edit-module field is named** by `labels.moduleNamePlaceholder`.
577
925
  - **`StageProgress` no longer scrolls the page when it mounts**: the active stage was revealed with
578
926
  `scrollIntoView`, which also scrolled every ancestor, so a tracker below the fold pulled the page down
@@ -608,6 +956,11 @@ next major.
608
956
  - **`Table` column search shows the current search when reopened**, instead of stale text.
609
957
  - **`NavLauncher` search rows shorten the `· keyword` hint before the label**, so a long keyword list
610
958
  no longer cuts "Apply for leave" down to "Apply…".
959
+ - **`NavLauncher`'s preview pane says what Enter does on a copy-only answer**: for an answer with no `run` or `href` it
960
+ showed `labels.hintOpen` ("open here") while Enter copied the value; it now shows `labels.hintCopy`, as the answer card does.
961
+ - **`NavLauncher`'s footer legend says what Enter does**: it read `labels.hintOpen` ("open here") on every result, also while
962
+ Enter copied a copy-only answer. It now follows the active result and shows `labels.hintCopy` while Enter copies. The
963
+ other hints do not shift when it flips.
611
964
  - **`NavigationBar` right cluster no longer overflows onto the avatar at phone widths.** The title
612
965
  truncates first (overflow-only tooltip when it is a string); the `moreIcon` cluster can shrink, while
613
966
  the sidebar toggle, back button and avatar menu never do. (HRMS, beta.60 launcher trigger overflow)
@@ -850,11 +1203,46 @@ next major.
850
1203
  - `sidebar.hoverBg` no longer shares `sidebar.divider`'s value.
851
1204
  - `InputSwitch`'s `colorScheme` was destructured and discarded — every switch rendered `primary`
852
1205
  regardless of the prop. Now forwarded to `ToggleSwitch` and actually applied.
1206
+ - **The `NavLauncher` search engine no longer puts Indic characters in a consumer's minified bundle.** Tamil final-ma and
1207
+ the Devanagari anusvara are built from code points, so hrms's first-load budget gate (it counts Tamil and Devanagari
1208
+ characters) stops reading the engine as locale data. `src/index.indicLiterals.test.ts` bundles the package root with
1209
+ esbuild and fails on any code point in U+0900 to U+0DFF.
1210
+ - **`Table` / `KanbanBoard` saved preferences refetch when `orgId`, `authToken`, `page`, `key` or `name` change after mount.**
1211
+ The fetch depended on `baseUrl` alone, so a switched organisation kept the previous one's saved columns. A slow
1212
+ earlier response can no longer overwrite a newer one, the render a re-key lands is already `loading: true` with no
1213
+ stale data, and `useSavePreferences` clears `error` after a later success.
1214
+ - **`KanbanBoard` re-hydrates its collapsed columns when `orgId` or `token` changes.** The reset effect listed `baseurl`,
1215
+ `page`, `key` and `name` only, so after an organisation switch the previous one's collapsed columns stayed.
1216
+ - **`resolveFilledSurface` / `darkerFillRung`** no longer throw for a scale whose only white-carrying rung is `[50]`. The
1217
+ hover and active steps walked to rungs `150` and `250`, which do not exist; a step now moves along the rung table and
1218
+ clamps at both ends. Every scale that already worked resolves to the same rungs.
1219
+ - **Playground demos stop touching the network and clear their axe findings** (demo-only, nothing here ships in the
1220
+ package). `/charts`, `/avatar`, `/editor` and `/examples/template-editor` no longer request imgur, a dead host or cdnjs;
1221
+ `/contactForm` no longer POSTs to the dev API. `/switch` names its narrow-cell options, the `/chartTheme` legend and the
1222
+ `/wishlistToggle` glass caption clear AA, and `/notification`'s colour override follows dark mode. `visuallyHidden`,
1223
+ `skipLink` and `productDetails` gain a Playground.
1224
+
1225
+ ### Removed
1226
+
1227
+ Nothing exported from the package root. These files were never exported and nothing in the repo imported them; they are
1228
+ gone from `dist/`, so a deep import of one no longer resolves. Measured 2026-10-14: no file in hrms, crm-frontend,
1229
+ account-frontend, tickets, lfour, social-frontend or commerce deep-imports any of them.
1230
+
1231
+ - `services/feedback.ts` (use `FeedbackForm`), the legacy `Input/Input` field (`Input.tsx`, `InputProps.tsx`; use
1232
+ `TextInput`), `Common/ErrorComponent` (use `ErrorMessage` or `FieldMessage`), `Common/FormattedDescription`,
1233
+ `Common/Label` (use `TextLabel`) and `Buttons` (`Buttons.tsx`, `ButtonsProps.ts`; use `Button`).
853
1234
 
854
1235
  ### Deprecated
855
1236
 
856
- Nothing is removed yet — each of these still ships its full implementation.
1237
+ Each of these still ships its full implementation.
857
1238
 
1239
+ - **`OrganizationDetails` `uiInvite` is now optional and ignored.** The component never read it (active vs. invited is
1240
+ decided by which array an organization is in); callers that still pass it compile unchanged, and new ones can drop it.
1241
+ - **`TextInput` `onRightIconclick`** (lower-case `c`): use `onRightIconClick`. Behaviour is unchanged; tagged `@deprecated` in JSDoc.
1242
+ - **`NoteTextArea` callback arguments that are never passed**: `handleCancel`'s `isActive` (always `false`) and
1243
+ `handleSubmit`'s fourth `resetState`. Behaviour is unchanged; both are tagged `@deprecated` in JSDoc.
1244
+ - **`Skeletons` `alignSelf` and `flexShrink`** are marked `@deprecated` in the type: they have never been applied, and
1245
+ applying them now would move layout for anyone passing them. Wrap the skeleton in an element that sets them.
858
1246
  - `UploadedFile.type` (FileUploader) — never set; read the extension from `name`.
859
1247
  - `ProfileCard` `color` — no visual effect; Card styles never read a colour scheme.
860
1248
  - `NotificationData.status` — never read; the status dot colour comes from `dueDate`/`endDate`.
@@ -870,21 +1258,60 @@ Nothing is removed yet — each of these still ships its full implementation.
870
1258
  - `SelectV2` — use `Select` with `native={false}`; it is already a thin wrapper over it.
871
1259
  - `SearchSelect`, `SelectSearch` are **no longer `@deprecated`.** Both now say "prefer `Select`
872
1260
  for new work" instead: `@deprecated` claimed a migration that loses real capabilities
873
- (`insideSelect`, `isSelectAll`, `addNew`, field-level loading; and `SelectSearch`'s combobox is
874
- the text input itself, a different ARIA pattern). The marker returns once `Select` absorbs them.
1261
+ (`insideSelect`; and `SelectSearch`'s combobox is the text input itself, a different ARIA
1262
+ pattern). The marker returns once `Select` absorbs them.
875
1263
  - `Dropdown` is **no longer deprecated.** The marker was an artifact of the Select-consolidation
876
1264
  pass; `Dropdown` is a `role="menu"` action menu, never a value picker, and nothing replaces it.
877
1265
  - `Notification` is **no longer deprecated.** `NotificationItem` cannot replace it —
878
1266
  `formatRelativeTime` clamps every future date to "Just now", so a countdown card silently
879
1267
  renders wrong text through it.
1268
+ - `FilterSidebar` `onApply`, `headerPadding`, `sliderMode` and `FilterSection.checkboxes` — dead, never read.
1269
+ Every change is already live through `onChange`, the range slider is always native, and radio mode comes
1270
+ from `type: "radio"` or `radio`.
880
1271
  - Dead props now marked rather than silently ignored: `Checkbox.variant`, `ProgressBar.variant`,
881
1272
  `Table.isVisiblity` and its export props, `SideBar.selectedSubMenu`, `InputSwitch.variant`/
882
1273
  `.spacing`/`.isFocusable`, and nine native-only `Select` props that are inert under
883
1274
  `native={false}` (these now warn in dev).
884
- - `disabled` → `isDisabled` on `SideBar`, `Buttons`, `StageProgress`, `Input`, `DatePicker`. Both
1275
+ - `disabled` → `isDisabled` on `SideBar`, `StageProgress`, `DatePicker` and `TimePicker`. Both
885
1276
  are accepted; `isDisabled` wins.
886
1277
  - `MultiSelctOPtions` → `MultiSelectOption` (two typos in a shipped public type name).
887
1278
 
1279
+ Also tagged `@deprecated` in the JSDoc, by component; each tag names its replacement. None is removed in this release.
1280
+
1281
+ - `AlertDialog` `addRole`, `colorScheme`, `size`, `status`, `variant` and `key` — never read. The dialog is always
1282
+ `role="alertdialog"` at Chakra's default size; use `tone` for the colour props, and React strips `key`.
1283
+ - `ApexLineChart` `variant="realtime"` — does not animate the data it is given: it appends `Math.random()` values every
1284
+ second. No replacement ships; `"basic"`, the default, plots your `data`.
1285
+ - `Breadcrumbs` `isLastChild` — never read, no effect.
1286
+ - `ButtonGoupIconProps` (misspelled file path, a one-line re-export) — import `ButtonGroupIconProps`.
1287
+ - `Card` `colorScheme` and `color` — no visual effect, Card styles read no colour scheme. `dividercolor`,
1288
+ `dividersize` and `dividervariant` — never rendered, Card draws no divider.
1289
+ - `DatePicker` `placeholderText` — use `placeholder`; `placeholder` wins when both are set.
1290
+ - `Drawer` `vaiant` — typo of `variant`, kept as an alias; `variant` wins.
1291
+ - `Dropdown` `optionsSize` — use `size`.
1292
+ - `InputSwitch` and `ThemedSwitchProps` — use `ToggleSwitch`; `InputSwitch` is a thin wrapper around it.
1293
+ - `MediaViewerLabels` `photoCount`, `videoCount`, `documentCount`, `youtubeCount` and `shortcuts`, and the `loading`
1294
+ label of `MediaAudioPlayerLabels` and `MediaVideoPlayerLabels` — defined but never read.
1295
+ - `OrganizationDetails` `OrganizationItem.uiInvite` — never read (active vs. invited comes from which array an item is in)
1296
+ but still required, so keep passing it. `CreateOrgFormValues` `default` and `defaultOrg` — never populated by the
1297
+ built-in create modal.
1298
+ - `STATUS_INK` (`PlanPill`) — use `colors.white` from `useCustomTheme()`.
1299
+ - `ProfileCardVariantLegacy` (`variant="outlein"`) — misspelling kept for existing callers; use `"outline"`.
1300
+ - `ProgressBar` `color` — use `colorScheme`; `color` is still honoured while `colorScheme` is unset.
1301
+ - `Search` `onclose` — use `onClear`; same behaviour, consistent casing.
1302
+ - `SearchSelect` `onSelect` — use `onChange`, same payload. `virtualization` — not implemented, the list never
1303
+ virtualizes; page large datasets with `pagination`. `SelectSearch` `isSearchEnabled` and `BottomIconStyle` — never read.
1304
+ - `chakraSelectProps` — the deep-import name of `SelectProps`; import `SelectProps` from the package root.
1305
+ - `SelectV2SingleProps`, `SelectV2MultiProps` and `SelectV2Props` — use `SelectSingleProps`, `SelectMultiProps` and
1306
+ `SelectProps` with `native={false}`.
1307
+ - `Switch` and `SwitchProps` — two labelled choices; use `SegmentedControl`, or `ToggleSwitch` for a single on/off field.
1308
+ - `Table` `handleExportChange`, `exportOptions`, `exportLabel`, `headerBgColor`, `tableBorderColor`, `onColumnFilter`,
1309
+ `tableSettings` and the column-level `isSearch` — dead, never read.
1310
+ - `Timeline` `events` and its `TimelineEvent` type — use `timelineEvents`. `TimelineNote.logs_id` is never read;
1311
+ `TimelineEvents.primary_id` and `is_from` are never read but still required, so keep passing them.
1312
+ - `Toaster` `showToast({ children })` — never rendered; pass `description`.
1313
+ - `avatarFillFor` — use `resolveAvatarColorway(seed, colors)`; different arity, returns `{ bg, color }`.
1314
+
888
1315
  ### Breaking — staged for the next major, not yet released
889
1316
 
890
1317
  **`ProductCard` / `ProductDetails` props are replaced, and `ProductImageSlider` is gone.** Zero
@@ -916,9 +1343,8 @@ differ, so `tsc` names each site and nothing must be found by hand.
916
1343
  - `Avatar`/`AvatarGroup` keep their names but narrow their props: `name` is required, Chakra style
917
1344
  props are rejected, and `AvatarGroup` takes a `people` array instead of `Avatar` children.
918
1345
 
919
- **Blast radius concentrates in `hrms`, with a long tail in `social-frontend`, `tickets`,
920
- `account-frontend`, `spare-cart` and `lfour`.** `crm-frontend` and `commerce/frontend` import no
921
- affected name at all.
1346
+ **Blast radius is measured per consumer and stated once**, in the repository's `CLAUDE.md` section 7, rather
1347
+ than copied here where it can drift.
922
1348
 
923
1349
  Get the current number from `scripts/verify-consumers.sh check`, which typechecks every consumer
924
1350
  against a real build — **do not estimate it by grep.** A grep conflates names that were removed
@@ -936,8 +1362,6 @@ Consumers pin published versions, so none of this bites until a repo upgrades.
936
1362
 
937
1363
  Tracked in `.cursor/plans/deferred-breaking-changes.md` (repo-only). The ones a consumer can hit:
938
1364
 
939
- - `Select`'s search matches `label` only — no `searchFields` / `filterOption`.
940
- - `Select`'s `virtualizeAfter` silently disables itself when any option has a `group`.
941
1365
  - `Select`'s `onLoadMore` is zero-arg with no `hasMore` gate, unlike `SearchSelect.pagination`.
942
1366
  - Migrating `SearchSelect` → `Select` by hand: `SearchSelect.onSearch` debounces **1000 ms**;
943
1367
  `Select.searchDebounceMs` defaults to **0**. A mechanical rename starts firing the consumer's