pixelize-design-library 2.4.2-beta.64 → 2.4.2-beta.66
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +520 -21
- package/COMPONENT-GOTCHAS.md +187 -95
- package/DESIGN-GUIDE.md +54 -10
- package/README.md +37 -3
- package/dist/Components/Accordion/Accordion.js +11 -8
- package/dist/Components/Accordion/AccordionProps.d.ts +4 -0
- package/dist/Components/Accordion/accordionColors.js +1 -2
- package/dist/Components/Apexcharts/ApexLineChart/ApexLineChart.js +1 -0
- package/dist/Components/Apexcharts/ApexLineChart/ApexLineChartProps.d.ts +2 -2
- package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.d.ts +1 -1
- package/dist/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
- package/dist/Components/Apexcharts/ApexPieChart/ApexPieChartProps.d.ts +3 -1
- package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.d.ts +2 -0
- package/dist/Components/Apexcharts/ApexPieChart/pieImageTexture.js +13 -0
- package/dist/Components/AppSwitcher/AppSwitcher.js +6 -3
- package/dist/Components/AppSwitcher/AppSwitcherProps.d.ts +3 -1
- package/dist/Components/AppSwitcher/AppSwitcherProps.js +18 -11
- package/dist/Components/AppSwitcher/pixelizeSuite.d.ts +24 -0
- package/dist/Components/AppSwitcher/pixelizeSuite.js +71 -0
- package/dist/Components/AppearanceSettings/AppearanceSettings.js +3 -3
- package/dist/Components/AppearanceSettings/AppearanceSettingsProps.d.ts +2 -2
- package/dist/Components/Avatar/avatarColorway.d.ts +2 -2
- package/dist/Components/Avatar/avatarColorway.js +7 -6
- package/dist/Components/Breadcrumbs/BreadcrumbsProps.d.ts +1 -1
- package/dist/Components/Button/Button.styles.js +5 -2
- package/dist/Components/Button/ButtonProps.d.ts +2 -4
- package/dist/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
- package/dist/Components/CalendarGrid/CalendarGrid.js +5 -3
- package/dist/Components/CalendarGrid/CalendarGridProps.d.ts +1 -1
- package/dist/Components/Card/Card.d.ts +1 -0
- package/dist/Components/Card/Card.js +1 -0
- package/dist/Components/Checkbox/Checkbox.styles.js +3 -1
- package/dist/Components/CheckoutKit/selectable.d.ts +3 -1
- package/dist/Components/CheckoutKit/selectable.js +10 -7
- package/dist/Components/CheckoutKit/tonalHover.d.ts +2 -0
- package/dist/Components/CheckoutKit/tonalHover.js +6 -0
- package/dist/Components/ChoiceCard/ChoiceCard.d.ts +1 -1
- package/dist/Components/ChoiceCard/ChoiceCard.js +2 -1
- package/dist/Components/ChoiceCard/ChoiceCardProps.d.ts +6 -0
- package/dist/Components/Common/FieldMessage.d.ts +1 -0
- package/dist/Components/Common/FormLabel.d.ts +1 -1
- package/dist/Components/Common/FormLabel.js +4 -3
- package/dist/Components/Common/HelperText.d.ts +2 -2
- package/dist/Components/Common/HelperText.js +1 -2
- package/dist/Components/Common/activationKey.d.ts +5 -0
- package/dist/Components/Common/activationKey.js +12 -0
- package/dist/Components/Common/dataAttributes.d.ts +4 -0
- package/dist/Components/Common/fieldMessageStyles.js +2 -1
- package/dist/Components/Common/findSlot.d.ts +2 -0
- package/dist/Components/Common/findSlot.js +24 -0
- package/dist/Components/Common/surfaceFocusRing.d.ts +1 -0
- package/dist/Components/Common/surfaceFocusRing.js +7 -0
- package/dist/Components/ConfirmDialog/ConfirmDialog.js +17 -5
- package/dist/Components/ConfirmDialog/ConfirmDialogProps.d.ts +38 -10
- package/dist/Components/CopyButton/CopyButton.d.ts +4 -1
- package/dist/Components/CopyButton/CopyButton.js +5 -8
- package/dist/Components/CouponField/CouponField.js +5 -2
- package/dist/Components/CustomModulesTable/CustomModulesTable.js +3 -1
- package/dist/Components/DatePicker/CalendarPanel.d.ts +1 -0
- package/dist/Components/DatePicker/CalendarPanel.js +3 -1
- package/dist/Components/DatePicker/DatePicker.js +24 -26
- package/dist/Components/DatePicker/DatePickerProps.d.ts +8 -0
- package/dist/Components/DatePicker/PickerPortal.js +1 -1
- package/dist/Components/DatePicker/RangeDatePicker.d.ts +7 -0
- package/dist/Components/DatePicker/RangeDatePicker.js +10 -29
- package/dist/Components/DatePicker/SingleDatePicker.js +5 -21
- package/dist/Components/DatePicker/TimeOnlyPicker.js +2 -20
- package/dist/Components/DescriptionList/DescriptionList.js +1 -1
- package/dist/Components/DetailSections/DetailSections.js +2 -1
- package/dist/Components/Divider/Divider.d.ts +3 -3
- package/dist/Components/Divider/Divider.js +3 -3
- package/dist/Components/Drawer/Drawer.d.ts +3 -1
- package/dist/Components/Drawer/Drawer.js +28 -26
- package/dist/Components/Drawer/DrawerProps.d.ts +4 -0
- package/dist/Components/Dropdown/DropDown.js +6 -21
- package/dist/Components/Editor/Editor.js +6 -2
- package/dist/Components/Editor/EditorProps.d.ts +17 -1
- package/dist/Components/Editor/editorLabels.js +1 -0
- package/dist/Components/Editor/editorTokenStyles.d.ts +8 -0
- package/dist/Components/Editor/editorTokenStyles.js +9 -1
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.d.ts +1 -1
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +9 -2
- package/dist/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtpProps.d.ts +15 -1
- package/dist/Components/EmptyState/EmptyStateProps.d.ts +21 -0
- package/dist/Components/EmptyState/FilteredEmptyState.d.ts +5 -0
- package/dist/Components/EmptyState/FilteredEmptyState.js +23 -0
- package/dist/Components/FieldSelectModal/FieldSelectModal.d.ts +1 -0
- package/dist/Components/FilePreview/FilePreview.js +7 -3
- package/dist/Components/FilePreview/FilePreviewProps.d.ts +2 -1
- package/dist/Components/FileUpload/FileUpload.js +8 -9
- package/dist/Components/FileUpload/FileUploadProps.d.ts +2 -2
- package/dist/Components/FileUploader/FileUploader.js +5 -6
- package/dist/Components/FilterSidebar/FilterSidebar.d.ts +7 -9
- package/dist/Components/FilterSidebar/FilterSidebar.js +90 -233
- package/dist/Components/FilterSidebar/OptionsSection.d.ts +14 -0
- package/dist/Components/FilterSidebar/OptionsSection.js +46 -0
- package/dist/Components/FilterSidebar/RangeSection.d.ts +17 -0
- package/dist/Components/FilterSidebar/RangeSection.js +80 -0
- package/dist/Components/FilterSidebar/SectionHeader.d.ts +13 -0
- package/dist/Components/FilterSidebar/SectionHeader.js +29 -0
- package/dist/Components/FilterSidebar/useStableCallback.d.ts +1 -0
- package/dist/Components/FilterSidebar/useStableCallback.js +12 -0
- package/dist/Components/Form/FormWrapper.d.ts +7 -7
- package/dist/Components/Form/FormWrapper.js +5 -3
- package/dist/Components/FormDrawer/FormDrawer.d.ts +1 -1
- package/dist/Components/FormDrawer/FormDrawer.js +3 -3
- package/dist/Components/FormDrawer/FormDrawerProps.d.ts +2 -0
- package/dist/Components/FormField/FormField.js +1 -1
- package/dist/Components/Header/Header.js +1 -1
- package/dist/Components/Header/HeaderActions.js +4 -2
- package/dist/Components/IconButton/IconButtonProps.d.ts +2 -1
- package/dist/Components/Input/TextInput.js +2 -2
- package/dist/Components/Input/TextInputProps.d.ts +3 -1
- package/dist/Components/KanbanBoard/AccountCard.js +1 -1
- package/dist/Components/KanbanBoard/KanbanBoard.d.ts +1 -1
- package/dist/Components/KanbanBoard/KanbanBoard.js +11 -7
- package/dist/Components/LauncherTrigger/LauncherTrigger.js +1 -1
- package/dist/Components/LazyWrapper/LazyWrapper.d.ts +2 -1
- package/dist/Components/LazyWrapper/LazyWrapper.js +1 -1
- package/dist/Components/MediaViewer/MediaViewer.js +4 -3
- package/dist/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
- package/dist/Components/MediaViewer/components/MediaImageViewer.js +19 -8
- package/dist/Components/MediaViewer/components/MediaScrubber.js +7 -2
- package/dist/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
- package/dist/Components/MediaViewer/components/ViewerIconButton.js +3 -1
- package/dist/Components/MediaViewer/hooks/useFileViewer.d.ts +1 -0
- package/dist/Components/MediaViewer/mediaItems.d.ts +1 -0
- package/dist/Components/MediaViewer/mediaItems.js +5 -0
- package/dist/Components/Modal/Modal.d.ts +1 -0
- package/dist/Components/Modal/Modal.js +7 -25
- package/dist/Components/Modal/dialogNaming.d.ts +8 -0
- package/dist/Components/Modal/dialogNaming.js +21 -0
- package/dist/Components/Modal/warnDroppedSlotChildren.d.ts +1 -1
- package/dist/Components/Modal/warnDroppedSlotChildren.js +7 -3
- package/dist/Components/NavLauncher/LauncherTabs.js +4 -3
- package/dist/Components/NavLauncher/NavLauncher.d.ts +1 -1
- package/dist/Components/NavLauncher/NavLauncher.js +288 -56
- package/dist/Components/NavLauncher/NavLauncherProps.d.ts +83 -5
- package/dist/Components/NavLauncher/ScopeBar.d.ts +14 -0
- package/dist/Components/NavLauncher/ScopeBar.js +139 -0
- package/dist/Components/NavLauncher/engine/distance.d.ts +4 -0
- package/dist/Components/NavLauncher/engine/distance.js +41 -0
- package/dist/Components/NavLauncher/engine/engine.d.ts +84 -0
- package/dist/Components/NavLauncher/engine/engine.js +472 -0
- package/dist/Components/NavLauncher/engine/fold.d.ts +15 -0
- package/dist/Components/NavLauncher/engine/fold.js +84 -0
- package/dist/Components/NavLauncher/engine/index.d.ts +21 -0
- package/dist/Components/NavLauncher/engine/index.js +17 -0
- package/dist/Components/NavLauncher/launcherParts.d.ts +14 -0
- package/dist/Components/NavLauncher/launcherParts.js +51 -13
- package/dist/Components/NavLauncher/match.d.ts +13 -2
- package/dist/Components/NavLauncher/match.js +26 -12
- package/dist/Components/NavLauncher/searchLayout.d.ts +61 -0
- package/dist/Components/NavLauncher/searchLayout.js +110 -0
- package/dist/Components/NavLauncher/spotlight.d.ts +39 -0
- package/dist/Components/NavLauncher/spotlight.js +202 -0
- package/dist/Components/NavLauncher/spotlightParts.d.ts +53 -0
- package/dist/Components/NavLauncher/spotlightParts.js +121 -0
- package/dist/Components/NavLauncher/useCopiedFlash.d.ts +6 -0
- package/dist/Components/NavLauncher/useCopiedFlash.js +21 -0
- package/dist/Components/NavigationBar/NavigationBar.js +6 -5
- package/dist/Components/NoteTextArea/NoteTextArea.js +12 -17
- package/dist/Components/NoteTextArea/NoteTextAreaProps.d.ts +5 -3
- package/dist/Components/Notification/Notification.js +19 -21
- package/dist/Components/Notification/NotificationProps.d.ts +1 -1
- package/dist/Components/NotificationBell/notificationHelpers.d.ts +16 -1
- package/dist/Components/NotificationBell/notificationHelpers.js +13 -7
- package/dist/Components/OffersList/OffersList.js +4 -2
- package/dist/Components/OptionChip/OptionChip.js +3 -2
- package/dist/Components/OptionChip/optionInk.js +4 -2
- package/dist/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
- package/dist/Components/OrgSwitcher/OrgSwitcher.js +13 -6
- package/dist/Components/OrgSwitcher/OrgSwitcherProps.d.ts +1 -1
- package/dist/Components/OrganizationDetails/OrganizationDetails.js +4 -7
- package/dist/Components/OrganizationDetails/OrganizationDetailsProps.d.ts +4 -2
- package/dist/Components/PdfViewer/PdfViewer.d.ts +1 -0
- package/dist/Components/PlanBadge/PlanBadgeProps.d.ts +1 -1
- package/dist/Components/PlanPill/PlanPill.js +4 -2
- package/dist/Components/PlanPill/PlanPillProps.d.ts +1 -1
- package/dist/Components/ProductCard/ProductCardAction.js +2 -1
- package/dist/Components/ProductCard/ProductCardSwatches.js +2 -1
- package/dist/Components/ProductDetails/ProductDetails.js +2 -1
- package/dist/Components/ProfileCard/ProfileCard.d.ts +1 -0
- package/dist/Components/ProfileCard/ProfileCard.js +12 -26
- package/dist/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
- package/dist/Components/ProgressBar/ProgressBar.js +2 -1
- package/dist/Components/QuantityStepper/QuantityStepper.js +5 -2
- package/dist/Components/QueryState/QueryStateBoundary.d.ts +1 -1
- package/dist/Components/QueryState/QueryStateBoundary.js +5 -1
- package/dist/Components/QueryState/QueryStateProps.d.ts +6 -2
- package/dist/Components/RadioButton/RadioButton.js +2 -3
- package/dist/Components/RolesPermission/RolesPermission.js +12 -8
- package/dist/Components/ScrollToTop/ScrollToTop.d.ts +1 -0
- package/dist/Components/ScrollbarBox/ScrollbarBox.d.ts +4 -1
- package/dist/Components/ScrollbarBox/ScrollbarBox.js +10 -4
- package/dist/Components/SearchSelect/SearchSelect.d.ts +1 -1
- package/dist/Components/SearchSelect/SearchSelect.js +8 -5
- package/dist/Components/SearchSelect/SearchSelectProps.d.ts +3 -3
- package/dist/Components/SegmentedControl/SegmentedControl.d.ts +1 -1
- package/dist/Components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/Components/Select/Select.js +6 -0
- package/dist/Components/Select/SelectNative.d.ts +16 -0
- package/dist/Components/Select/SelectPopup.js +170 -63
- package/dist/Components/Select/SelectProps.d.ts +30 -2
- package/dist/Components/Select/groupedWindow.d.ts +21 -0
- package/dist/Components/Select/groupedWindow.js +50 -0
- package/dist/Components/SelectSearch/SelectSearch.d.ts +1 -1
- package/dist/Components/SelectSearch/SelectSearch.js +48 -38
- package/dist/Components/SelectSearch/SelectSearchProps.d.ts +3 -3
- package/dist/Components/SelectV2/SelectV2.d.ts +1 -1
- package/dist/Components/SelectV2/SelectV2.js +1 -1
- package/dist/Components/SelectV2/SelectV2Props.d.ts +3 -3
- package/dist/Components/SideBar/SecondaryBar.js +3 -2
- package/dist/Components/SideBar/components/MenuItemBox.js +3 -2
- package/dist/Components/SideBar/components/MenuItems.js +1 -1
- package/dist/Components/SideBar/components/OtherApps.js +2 -2
- package/dist/Components/SideBar/components/PinnedSection.js +1 -1
- package/dist/Components/SideBar/sidebarScale.d.ts +2 -2
- package/dist/Components/SideBar/sidebarScale.js +2 -2
- package/dist/Components/SignInActivityTable/SignInActivityTable.js +7 -2
- package/dist/Components/SignInActivityTable/SignInActivityTableProps.d.ts +1 -1
- package/dist/Components/SignInActivityTable/scrollRegionRing.d.ts +10 -0
- package/dist/Components/SignInActivityTable/scrollRegionRing.js +14 -0
- package/dist/Components/Skeletons/SkeletonProps.d.ts +5 -1
- package/dist/Components/Slider/Slider.d.ts +2 -0
- package/dist/Components/Slider/Slider.js +5 -4
- package/dist/Components/StageProgress/StageItem.js +2 -1
- package/dist/Components/StageProgress/StageProgress.js +8 -2
- package/dist/Components/StageProgress/StageProgressProps.d.ts +2 -0
- package/dist/Components/StageProgress/StepperStage.js +2 -1
- package/dist/Components/StickyBuyBar/StickyBuyBar.js +2 -1
- package/dist/Components/Table/Table.js +5 -3
- package/dist/Components/Table/components/HeaderActions.js +5 -3
- package/dist/Components/Table/components/TableBody.js +13 -8
- package/dist/Components/Table/components/TableGroupRow.js +2 -1
- package/dist/Components/Table/components/TableHeader.js +17 -21
- package/dist/Components/Table/components/TableLoading.js +8 -2
- package/dist/Components/Table/components/rowDetail.js +3 -2
- package/dist/Components/Table/filters/ActiveFilters.js +6 -3
- package/dist/Components/Table/filters/CompactSelect.js +2 -1
- package/dist/Components/Table/filters/FilterDatePicker.d.ts +6 -0
- package/dist/Components/Table/filters/FilterDatePicker.js +61 -0
- package/dist/Components/Table/filters/LeftFilterPane.d.ts +1 -0
- package/dist/Components/Table/filters/LeftFilterPane.js +14 -6
- package/dist/Components/Table/hooks/useTable.js +11 -7
- package/dist/Components/Table/settings/ManageColumns.js +4 -3
- package/dist/Components/Table/settings/TableSettings.js +4 -4
- package/dist/Components/Tabs/Tabs.d.ts +1 -0
- package/dist/Components/Tabs/Tabs.js +1 -0
- package/dist/Components/Tabs/components/CountBadge.d.ts +1 -0
- package/dist/Components/Tabs/components/TabList.d.ts +1 -0
- package/dist/Components/Tabs/components/TabList.js +1 -0
- package/dist/Components/Tabs/components/TabPanel.d.ts +1 -0
- package/dist/Components/Tabs/components/TabPanel.js +1 -0
- package/dist/Components/Tabs/tabStyles.js +4 -2
- package/dist/Components/Tag/Tag.js +5 -4
- package/dist/Components/Tag/Tag.styles.js +5 -4
- package/dist/Components/Tag/TagProps.d.ts +4 -1
- package/dist/Components/Tag/tagDot.js +10 -3
- package/dist/Components/TagInput/TagInput.js +6 -5
- package/dist/Components/TagInput/TagInputProps.d.ts +15 -0
- package/dist/Components/TagInput/tagEntries.d.ts +7 -1
- package/dist/Components/TagInput/tagEntries.js +18 -5
- package/dist/Components/TimePicker/TimePicker.js +7 -3
- package/dist/Components/TimePicker/TimePickerProps.d.ts +2 -0
- package/dist/Components/Timeline/Timeline.js +13 -9
- package/dist/Components/Toaster/Toaster.js +2 -1
- package/dist/Components/Toggle/TableToggle.d.ts +1 -1
- package/dist/Components/Toggle/TableToggle.js +1 -1
- package/dist/Components/UpgradeButton/UpgradeButton.js +3 -2
- package/dist/Components/UpgradeButton/UpgradeButtonProps.d.ts +1 -1
- package/dist/Components/UserDetails/UserDetails.js +5 -7
- package/dist/Components/WishlistToggle/WishlistToggle.js +2 -1
- package/dist/Components/WizardDialog/WizardDialog.d.ts +1 -1
- package/dist/Components/WizardDialog/WizardDialog.js +15 -3
- package/dist/Components/WizardDialog/WizardDialogProps.d.ts +5 -3
- package/dist/Components/WorkspaceWindow/WorkspaceTrayPreview.js +11 -1
- package/dist/Components/WorkspaceWindow/WorkspaceWindow.js +6 -3
- package/dist/Components/WorkspaceWindow/WorkspaceWindowProps.d.ts +16 -15
- package/dist/Hooks/useOutsideMouseDown.d.ts +11 -0
- package/dist/Hooks/useOutsideMouseDown.js +30 -0
- package/dist/Hooks/usePreferences.js +30 -12
- package/dist/Hooks/useScrollableRegion.d.ts +17 -0
- package/dist/Hooks/useScrollableRegion.js +36 -0
- package/dist/Hooks/useSidebarPrefs.d.ts +1 -0
- package/dist/Theme/chakra/Menu.styles.d.ts +4 -0
- package/dist/Theme/chakra/Menu.styles.js +6 -0
- package/dist/Theme/chakra/componentStyles.d.ts +4 -0
- package/dist/Theme/chakra/componentStyles.js +1 -1
- package/dist/Theme/chakra/createBrandTheme.d.ts +1 -0
- package/dist/Theme/chakra/focusRing.styles.d.ts +1 -1
- package/dist/Theme/chakra/focusRing.styles.js +3 -3
- package/dist/Theme/chakra/paletteFromTheme.d.ts +2 -1
- package/dist/Theme/chakra/paletteFromTheme.js +18 -4
- package/dist/Theme/chakra/ringShadow.d.ts +3 -0
- package/dist/Theme/chakra/ringShadow.js +7 -0
- package/dist/Theme/provider/PixelizeThemeProvider.d.ts +1 -0
- package/dist/Theme/provider/ThemeSwitcher.d.ts +1 -0
- package/dist/Theme/provider/ThemeSwitcher.js +1 -1
- package/dist/Theme/testing/testPalette.d.ts +1 -0
- package/dist/Theme/tokens/builders/buildDarkPalette.d.ts +2 -1
- package/dist/Theme/tokens/builders/buildDarkPalette.js +5 -5
- package/dist/Theme/tokens/builders/filledSurface.js +3 -2
- package/dist/Theme/tokens/builders/focusRing.js +4 -1
- package/dist/Theme/tokens/builders/paletteScale.d.ts +2 -0
- package/dist/Theme/tokens/builders/paletteScale.js +10 -0
- package/dist/Theme/tokens/types.d.ts +1 -0
- package/dist/Utils/accountHandoff.d.ts +3 -0
- package/dist/Utils/price.d.ts +1 -0
- package/dist/Utils/tabular.d.ts +30 -0
- package/dist/Utils/tabular.js +61 -0
- package/dist/esm/Components/Accordion/Accordion.js +11 -8
- package/dist/esm/Components/Accordion/accordionColors.js +2 -3
- package/dist/esm/Components/Apexcharts/ApexLineChart/ApexLineChart.js +2 -1
- package/dist/esm/Components/Apexcharts/ApexPieChart/ApexPieChart.js +6 -5
- package/dist/esm/Components/Apexcharts/ApexPieChart/pieImageTexture.js +10 -0
- package/dist/esm/Components/AppSwitcher/AppSwitcher.js +6 -3
- package/dist/esm/Components/AppSwitcher/AppSwitcherProps.js +18 -11
- package/dist/esm/Components/AppSwitcher/pixelizeSuite.js +67 -0
- package/dist/esm/Components/AppearanceSettings/AppearanceSettings.js +3 -3
- package/dist/esm/Components/Avatar/avatarColorway.js +4 -4
- package/dist/esm/Components/Button/Button.styles.js +5 -2
- package/dist/esm/Components/ButtonGroupIcon/ButtonGroupIcon.js +3 -1
- package/dist/esm/Components/CalendarGrid/CalendarGrid.js +5 -3
- package/dist/esm/Components/Card/Card.js +1 -0
- package/dist/esm/Components/Checkbox/Checkbox.styles.js +3 -1
- package/dist/esm/Components/CheckoutKit/selectable.js +10 -7
- package/dist/esm/Components/CheckoutKit/tonalHover.js +2 -0
- package/dist/esm/Components/ChoiceCard/ChoiceCard.js +2 -1
- package/dist/esm/Components/Common/FormLabel.js +4 -3
- package/dist/esm/Components/Common/HelperText.js +1 -2
- package/dist/esm/Components/Common/activationKey.js +7 -0
- package/dist/esm/Components/Common/fieldMessageStyles.js +2 -1
- package/dist/esm/Components/Common/findSlot.js +17 -0
- package/dist/esm/Components/Common/surfaceFocusRing.js +3 -0
- package/dist/esm/Components/ConfirmDialog/ConfirmDialog.js +18 -6
- package/dist/esm/Components/CopyButton/CopyButton.js +5 -8
- package/dist/esm/Components/CouponField/CouponField.js +5 -2
- package/dist/esm/Components/CustomModulesTable/CustomModulesTable.js +3 -1
- package/dist/esm/Components/DatePicker/CalendarPanel.js +3 -1
- package/dist/esm/Components/DatePicker/DatePicker.js +25 -27
- package/dist/esm/Components/DatePicker/PickerPortal.js +2 -2
- package/dist/esm/Components/DatePicker/RangeDatePicker.js +10 -29
- package/dist/esm/Components/DatePicker/SingleDatePicker.js +5 -21
- package/dist/esm/Components/DatePicker/TimeOnlyPicker.js +2 -20
- package/dist/esm/Components/DescriptionList/DescriptionList.js +1 -1
- package/dist/esm/Components/DetailSections/DetailSections.js +2 -1
- package/dist/esm/Components/Divider/Divider.js +3 -3
- package/dist/esm/Components/Drawer/Drawer.js +24 -19
- package/dist/esm/Components/Dropdown/DropDown.js +7 -22
- package/dist/esm/Components/Editor/Editor.js +7 -3
- package/dist/esm/Components/Editor/editorLabels.js +1 -0
- package/dist/esm/Components/Editor/editorTokenStyles.js +7 -0
- package/dist/esm/Components/EmailCards/VerifyEmailOtp/VerifyEmailOtp.js +8 -4
- package/dist/esm/Components/EmptyState/FilteredEmptyState.js +18 -0
- package/dist/esm/Components/FilePreview/FilePreview.js +8 -4
- package/dist/esm/Components/FileUpload/FileUpload.js +8 -9
- package/dist/esm/Components/FileUploader/FileUploader.js +6 -7
- package/dist/esm/Components/FilterSidebar/FilterSidebar.js +94 -237
- package/dist/esm/Components/FilterSidebar/OptionsSection.js +41 -0
- package/dist/esm/Components/FilterSidebar/RangeSection.js +78 -0
- package/dist/esm/Components/FilterSidebar/SectionHeader.js +23 -0
- package/dist/esm/Components/FilterSidebar/useStableCallback.js +8 -0
- package/dist/esm/Components/Form/FormWrapper.js +5 -3
- package/dist/esm/Components/FormDrawer/FormDrawer.js +3 -3
- package/dist/esm/Components/FormField/FormField.js +1 -1
- package/dist/esm/Components/Header/Header.js +1 -1
- package/dist/esm/Components/Header/HeaderActions.js +6 -4
- package/dist/esm/Components/Input/TextInput.js +2 -2
- package/dist/esm/Components/KanbanBoard/AccountCard.js +1 -1
- package/dist/esm/Components/KanbanBoard/KanbanActions/KanbanActions.js +2 -2
- package/dist/esm/Components/KanbanBoard/KanbanBoard.js +11 -7
- package/dist/esm/Components/LauncherTrigger/LauncherTrigger.js +1 -1
- package/dist/esm/Components/LazyWrapper/LazyWrapper.js +1 -1
- package/dist/esm/Components/MediaViewer/MediaViewer.js +5 -4
- package/dist/esm/Components/MediaViewer/components/MediaAudioPlayer.js +5 -1
- package/dist/esm/Components/MediaViewer/components/MediaImageViewer.js +19 -8
- package/dist/esm/Components/MediaViewer/components/MediaScrubber.js +7 -2
- package/dist/esm/Components/MediaViewer/components/MediaVideoPlayer.js +3 -1
- package/dist/esm/Components/MediaViewer/components/ViewerIconButton.js +3 -1
- package/dist/esm/Components/MediaViewer/mediaItems.js +4 -0
- package/dist/esm/Components/Modal/Modal.js +2 -17
- package/dist/esm/Components/Modal/dialogNaming.js +18 -0
- package/dist/esm/Components/Modal/warnDroppedSlotChildren.js +7 -3
- package/dist/esm/Components/NavLauncher/LauncherTabs.js +4 -3
- package/dist/esm/Components/NavLauncher/NavLauncher.js +291 -59
- package/dist/esm/Components/NavLauncher/ScopeBar.js +136 -0
- package/dist/esm/Components/NavLauncher/engine/distance.js +37 -0
- package/dist/esm/Components/NavLauncher/engine/engine.js +459 -0
- package/dist/esm/Components/NavLauncher/engine/fold.js +75 -0
- package/dist/esm/Components/NavLauncher/engine/index.js +14 -0
- package/dist/esm/Components/NavLauncher/launcherParts.js +46 -10
- package/dist/esm/Components/NavLauncher/match.js +25 -12
- package/dist/esm/Components/NavLauncher/searchLayout.js +101 -0
- package/dist/esm/Components/NavLauncher/spotlight.js +194 -0
- package/dist/esm/Components/NavLauncher/spotlightParts.js +108 -0
- package/dist/esm/Components/NavLauncher/useCopiedFlash.js +17 -0
- package/dist/esm/Components/NavigationBar/NavigationBar.js +6 -5
- package/dist/esm/Components/NoteTextArea/NoteTextArea.js +12 -17
- package/dist/esm/Components/Notification/Notification.js +20 -22
- package/dist/esm/Components/NotificationBell/notificationHelpers.js +12 -6
- package/dist/esm/Components/OffersList/OffersList.js +4 -2
- package/dist/esm/Components/OptionChip/OptionChip.js +3 -2
- package/dist/esm/Components/OptionChip/optionInk.js +4 -2
- package/dist/esm/Components/OrderStatusTimeline/OrderStatusTimeline.js +2 -1
- package/dist/esm/Components/OrgSwitcher/OrgSwitcher.js +14 -7
- package/dist/esm/Components/OrganizationDetails/OrganizationDetails.js +5 -8
- package/dist/esm/Components/PlanPill/PlanPill.js +4 -2
- package/dist/esm/Components/ProductCard/ProductCardAction.js +2 -1
- package/dist/esm/Components/ProductCard/ProductCardSwatches.js +2 -1
- package/dist/esm/Components/ProductDetails/ProductDetails.js +2 -1
- package/dist/esm/Components/ProfileCard/ProfileCard.js +6 -17
- package/dist/esm/Components/ProfilePhotoViewer/ProfilePhotoViewer.js +4 -2
- package/dist/esm/Components/ProgressBar/ProgressBar.js +2 -1
- package/dist/esm/Components/QuantityStepper/QuantityStepper.js +5 -2
- package/dist/esm/Components/QueryState/QueryStateBoundary.js +5 -1
- package/dist/esm/Components/RadioButton/RadioButton.js +2 -3
- package/dist/esm/Components/RolesPermission/RolesPermission.js +12 -8
- package/dist/esm/Components/ScrollbarBox/ScrollbarBox.js +9 -3
- package/dist/esm/Components/SearchSelect/SearchSelect.js +8 -5
- package/dist/esm/Components/SegmentedControl/SegmentedControl.js +1 -1
- package/dist/esm/Components/Select/Select.js +6 -0
- package/dist/esm/Components/Select/SelectPopup.js +171 -64
- package/dist/esm/Components/Select/groupedWindow.js +44 -0
- package/dist/esm/Components/SelectSearch/SelectSearch.js +49 -39
- package/dist/esm/Components/SelectV2/SelectV2.js +1 -1
- package/dist/esm/Components/SideBar/SecondaryBar.js +3 -2
- package/dist/esm/Components/SideBar/components/MenuItemBox.js +3 -2
- package/dist/esm/Components/SideBar/components/MenuItems.js +1 -1
- package/dist/esm/Components/SideBar/components/OtherApps.js +2 -2
- package/dist/esm/Components/SideBar/components/PinnedSection.js +1 -1
- package/dist/esm/Components/SideBar/sidebarScale.js +2 -2
- package/dist/esm/Components/SignInActivityTable/SignInActivityTable.js +8 -3
- package/dist/esm/Components/SignInActivityTable/scrollRegionRing.js +9 -0
- package/dist/esm/Components/Slider/Slider.js +6 -5
- package/dist/esm/Components/StageProgress/StageItem.js +2 -1
- package/dist/esm/Components/StageProgress/StageProgress.js +8 -2
- package/dist/esm/Components/StageProgress/StepperStage.js +2 -1
- package/dist/esm/Components/StickyBuyBar/StickyBuyBar.js +2 -1
- package/dist/esm/Components/Table/Table.js +8 -6
- package/dist/esm/Components/Table/components/HeaderActions.js +7 -5
- package/dist/esm/Components/Table/components/TableBody.js +13 -8
- package/dist/esm/Components/Table/components/TableGroupRow.js +2 -1
- package/dist/esm/Components/Table/components/TableHeader.js +19 -23
- package/dist/esm/Components/Table/components/TableLoading.js +6 -3
- package/dist/esm/Components/Table/components/rowDetail.js +3 -2
- package/dist/esm/Components/Table/filters/ActiveFilters.js +8 -5
- package/dist/esm/Components/Table/filters/CompactSelect.js +2 -1
- package/dist/esm/Components/Table/filters/FilterDatePicker.js +20 -0
- package/dist/esm/Components/Table/filters/LeftFilterPane.js +14 -6
- package/dist/esm/Components/Table/hooks/useTable.js +11 -7
- package/dist/esm/Components/Table/settings/ManageColumns.js +4 -3
- package/dist/esm/Components/Table/settings/TableSettings.js +4 -4
- package/dist/esm/Components/Tabs/Tabs.js +1 -0
- package/dist/esm/Components/Tabs/components/TabList.js +1 -0
- package/dist/esm/Components/Tabs/components/TabPanel.js +1 -0
- package/dist/esm/Components/Tabs/tabStyles.js +5 -3
- package/dist/esm/Components/Tag/Tag.js +5 -4
- package/dist/esm/Components/Tag/Tag.styles.js +5 -4
- package/dist/esm/Components/Tag/tagDot.js +10 -3
- package/dist/esm/Components/TagInput/TagInput.js +8 -7
- package/dist/esm/Components/TagInput/tagEntries.js +16 -4
- package/dist/esm/Components/TimePicker/TimePicker.js +7 -3
- package/dist/esm/Components/Timeline/Timeline.js +14 -10
- package/dist/esm/Components/Toaster/Toaster.js +2 -1
- package/dist/esm/Components/Toggle/TableToggle.js +1 -1
- package/dist/esm/Components/UpgradeButton/UpgradeButton.js +3 -2
- package/dist/esm/Components/UserDetails/UserDetails.js +5 -7
- package/dist/esm/Components/WishlistToggle/WishlistToggle.js +2 -1
- package/dist/esm/Components/WizardDialog/WizardDialog.js +15 -3
- package/dist/esm/Components/WorkspaceWindow/WorkspaceTrayPreview.js +12 -2
- package/dist/esm/Components/WorkspaceWindow/WorkspaceWindow.js +7 -4
- package/dist/esm/Hooks/useOutsideMouseDown.js +26 -0
- package/dist/esm/Hooks/usePreferences.js +30 -12
- package/dist/esm/Hooks/useScrollableRegion.js +33 -0
- package/dist/esm/Theme/chakra/Menu.styles.js +6 -0
- package/dist/esm/Theme/chakra/componentStyles.js +1 -1
- package/dist/esm/Theme/chakra/focusRing.styles.js +3 -3
- package/dist/esm/Theme/chakra/paletteFromTheme.js +16 -3
- package/dist/esm/Theme/chakra/ringShadow.js +3 -0
- package/dist/esm/Theme/provider/ThemeSwitcher.js +1 -1
- package/dist/esm/Theme/tokens/builders/buildDarkPalette.js +5 -5
- package/dist/esm/Theme/tokens/builders/filledSurface.js +3 -2
- package/dist/esm/Theme/tokens/builders/focusRing.js +4 -1
- package/dist/esm/Theme/tokens/builders/paletteScale.js +6 -0
- package/dist/esm/Utils/tabular.js +56 -0
- package/dist/esm/index.js +18 -25
- package/dist/index.d.ts +59 -5
- package/dist/index.js +36 -29
- package/package.json +3 -1
- package/dist/Components/Buttons/Buttons.d.ts +0 -3
- package/dist/Components/Buttons/Buttons.js +0 -9
- package/dist/Components/Buttons/ButtonsProps.d.ts +0 -12
- package/dist/Components/Common/ErrorComponent.d.ts +0 -7
- package/dist/Components/Common/ErrorComponent.js +0 -16
- package/dist/Components/Common/FormattedDescription.d.ts +0 -7
- package/dist/Components/Common/FormattedDescription.js +0 -62
- package/dist/Components/Common/Label.d.ts +0 -9
- package/dist/Components/Common/Label.js +0 -12
- package/dist/Components/Input/Input/Input.d.ts +0 -4
- package/dist/Components/Input/Input/Input.js +0 -75
- package/dist/Components/Input/Input/InputProps.d.ts +0 -24
- package/dist/Components/Input/Input/InputProps.js +0 -2
- package/dist/Components/ProductCard/productCardFixtures.d.ts +0 -7
- package/dist/Components/ProductCard/productCardFixtures.js +0 -61
- package/dist/esm/Components/Buttons/Buttons.js +0 -4
- package/dist/esm/Components/Common/ErrorComponent.js +0 -14
- package/dist/esm/Components/Common/FormattedDescription.js +0 -60
- package/dist/esm/Components/Common/Label.js +0 -10
- package/dist/esm/Components/Input/Input/Input.js +0 -37
- package/dist/esm/Components/Input/Input/InputProps.js +0 -1
- package/dist/esm/Components/ProductCard/productCardFixtures.js +0 -58
- package/dist/esm/services/feedback.js +0 -15
- package/dist/services/feedback.d.ts +0 -12
- package/dist/services/feedback.js +0 -18
- /package/dist/Components/{Buttons/ButtonsProps.js → Common/dataAttributes.js} +0 -0
- /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** (`
|
|
7
|
-
`^
|
|
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,12 +18,82 @@ 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
|
|
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`.
|
|
84
|
+
- **`WorkspaceTray` `renderItem` receives the built-in pill** as a third argument, `renderItem(item, api, pill)`: the pill
|
|
85
|
+
already carries the unsaved dot, subtitle and close button, so a consumer can return it or wrap it (in
|
|
86
|
+
`WorkspaceTrayPreview` for a hover preview, say) instead of rebuilding it. Two-argument callbacks and the default
|
|
87
|
+
pill are unchanged.
|
|
88
|
+
- **`FormDrawer` `isSubmitDisabled`**: disables the primary button and makes the form ignore Enter and any other submit,
|
|
89
|
+
so `onSubmit` never fires, not even from `requestSubmit()` or a dispatched submit event (the drawer is a real
|
|
90
|
+
`<form>`; the button alone does not guard those). Unlike `isSubmitting` it shows no spinner, and Cancel and every
|
|
91
|
+
close path stay live. Omitted, nothing changes.
|
|
92
|
+
- **`WizardDialog` `chrome="inline"`** (default `"modal"`): draws the wizard (title, stepper, step, review, footer) in place
|
|
93
|
+
with no Modal, for a host that is already the dialog, such as a `WorkspaceWindow`: no overlay, focus trap, close X,
|
|
94
|
+
Esc-to-close or `role="dialog"`. It renders nothing while `isOpen` is false, ignores `size`, and Cancel still calls
|
|
95
|
+
`onClose`. It reuses the same flow as the modal (`useWizardFlow`, `validate`, `finishDisabled`, `finishBlockedReason`,
|
|
96
|
+
`stepId`); test ids are `wizard-inline` / `${data-testid}-inline`. `Wizard` does not take the prop.
|
|
27
97
|
- **`optionRowFill(rows, isActive)`** and **`optionRowCursorSx(rows)`** are exported from the package root: the one
|
|
28
98
|
fill an option row paints (the cursor's), and its `:hover`/`:focus` form for roving-focus lists.
|
|
29
99
|
- **`accentTextOnPlanes(scale, planes)`** is exported from the package root: the first accent rung clearing AA on every
|
|
@@ -95,6 +165,53 @@ next major.
|
|
|
95
165
|
document-wide `prefers-reduced-motion` rule; `pz-motion-keep` (`MOTION_KEEP_CLASS`) opts an element out.
|
|
96
166
|
The default is unchanged. `CustomThemeProps` gains `zIndices.popoverNested` and the two font sizes, so
|
|
97
167
|
code that hand-builds a full `CustomThemeProps` needs those keys.
|
|
168
|
+
- **`LauncherSearchEngine.matches` and `.createMatcher`**: the boolean form of the engine for table and list filters.
|
|
169
|
+
`matches(query, ...texts)` is true when every query word hits some text (same folding, typo tolerance and `synonyms`
|
|
170
|
+
option as `search`, no ranking); `createMatcher(query)` compiles the query once for a loop over rows, and an empty query
|
|
171
|
+
matches every row. `LauncherMatcher` is exported as a type.
|
|
172
|
+
- **`LauncherSearchEngine` searches Hindi and Tamil by written letter**: Latin accents, the Devanagari nukta and
|
|
173
|
+
zero-width joiners are ignored, chandrabindu folds into anusvara, and every other combining mark stays part of its
|
|
174
|
+
letter, so a bare vowel sign never matches ("का" does not find "कमाई"). Typo length and distance count letters
|
|
175
|
+
("कम्मचारी" finds "कर्मचारी"), and a Tamil word ending in ம் also finds titles that drop it ("நேரம்" finds "நேர அட்டவணை").
|
|
176
|
+
`editDistance` accepts arrays of letters. Latin results are unchanged. `engine/conformance.fixture.json` is the
|
|
177
|
+
behaviour contract shared with HRMS mobile search, asserted by `engine/conformance.test.ts`.
|
|
178
|
+
- **`NavLauncher` spotlight search** (all additive; an app passing none of these renders as before):
|
|
179
|
+
- `searchMode="spotlight"` ranks every row by relevance (exact > prefix > word > word-prefix >
|
|
180
|
+
initialism > substring > typo > subsequence, label > keyword > context), tolerates typos
|
|
181
|
+
(Damerau-Levenshtein 1 from 4 letters, 2 from 8), folds case and accents, expands `synonyms`
|
|
182
|
+
both ways, boosts `pinnedIds` / `frequentIds` / `recentIds`, and shows the best row first as a
|
|
183
|
+
**Top hit** card naming the keyword or fact that matched. Groups collapse to `groupLimit` rows
|
|
184
|
+
(default 5 in spotlight, unlimited in classic) behind a "Show N more" option.
|
|
185
|
+
- `scopes` + `activeScope` / `onScopeChange`: filter chips in the header row beside the field
|
|
186
|
+
(their own row below `md`), always shown so they say what can be searched; while typing each
|
|
187
|
+
chip shows its live match count and is named "People, 3 results". One Tab stop (radiogroup,
|
|
188
|
+
roving tabindex, arrows / Home / End); the strip scrolls sideways behind an edge fade with a
|
|
189
|
+
mouse page arrow and keeps the selected chip in view, so the field never drops below 15rem (or a
|
|
190
|
+
third of a wide row). "All" is prepended, `screens`
|
|
191
|
+
and `actions` are built in and `LauncherResultGroup.scope` (default its `id`) places any other
|
|
192
|
+
group. A chip other than All / Screens picked with an empty field lists that scope's items as
|
|
193
|
+
passed, with the facts pane; `LauncherScope.placeholder` narrows the field's placeholder.
|
|
194
|
+
- `quickActions`: up to 5 pill buttons at the top of the menu while the query is empty and the
|
|
195
|
+
scope is All.
|
|
196
|
+
- `LauncherSearchItem.facts` (`{ label, value, copyable? }`): a right preview pane at `lg`+ for the
|
|
197
|
+
highlighted row with Copy buttons (blocked clipboard selects the value instead), docked under the
|
|
198
|
+
list below `lg`. `answers` (items with `answer: { label, value, hint? }`) render as direct-answer
|
|
199
|
+
cards above every result; Enter copies an answer that has no `run` / `href`.
|
|
200
|
+
- `LauncherResultGroup.matchLocally`: the launcher filters and ranks a static group itself.
|
|
201
|
+
- `LauncherSearchEngine` — the framework-free engine behind it (`createIndex`, `search`,
|
|
202
|
+
`searchDocuments`, `highlightRanges`, `usageBoosts`, `foldText`, `tokenize`, `editDistance`; options
|
|
203
|
+
`synonyms`, `boosts`, `fuzzy`, `relativeCutoff`, `limit`) for any other list or palette; `highlightSegments` now exported, with an opt-in `{ fuzzy, synonyms }`.
|
|
204
|
+
- New optional `LauncherLabels` keys: `topHit`, `matchedOn`, `answers`, `hintCopy`, `scopes`,
|
|
205
|
+
`scopeAll`, `scopeChanged`, `scopeCount`, `scopeEmpty`, `quickActions`, `showMore`, `preview`,
|
|
206
|
+
`copy`, `copied`, `copySelected`.
|
|
207
|
+
- The dialog is now always named `labels.title`; the search value and `headerActions` no longer
|
|
208
|
+
join its accessible name.
|
|
209
|
+
- Types `LauncherFact`, `LauncherAnswer`, `LauncherScope`, `LauncherSearchMode`, `HighlightOptions`,
|
|
210
|
+
`LauncherSearch*` / `LauncherSynonyms` / `LauncherMatchKind` / `LauncherTokenMatch`.
|
|
211
|
+
- `CopyButton` `onCopyError` — fires when the clipboard is missing or denied, instead of failing silently.
|
|
212
|
+
- `Drawer` `aria-label` / `aria-labelledby` — name the dialog instead of its whole header (a header
|
|
213
|
+
holding a field or buttons otherwise becomes the name); `contentProps["aria-labelledby"]` never
|
|
214
|
+
worked.
|
|
98
215
|
- **HRMS library requests** — a navigation launcher, key caps, a merge-field `Editor`, a wizard and
|
|
99
216
|
smaller gaps found by the HRMS migration:
|
|
100
217
|
- `NavLauncher` — full-height navigation launcher (browse modules, pins, Frequent, Recent, search
|
|
@@ -260,8 +377,9 @@ next major.
|
|
|
260
377
|
library; bring your own.
|
|
261
378
|
|
|
262
379
|
- **Dark mode.** `PixelizeThemeProvider` (defaults to `system`), `useThemeMode`, `ThemeSwitcher`.
|
|
263
|
-
Dark palettes are derived per brand from that brand's own light palette
|
|
264
|
-
|
|
380
|
+
Dark palettes are derived per brand from that brand's own light palette: surfaces are hue-neutral,
|
|
381
|
+
and the brand hue carries through on the accent, ink, rules and rail. `withTheme` stays light-only,
|
|
382
|
+
so existing apps are visually unchanged — dark is opt-in.
|
|
265
383
|
- **`MediaViewer`** — a full-screen viewer for images, video, audio, PDF, Office documents, text
|
|
266
384
|
and archives, with a filmstrip, keyboard navigation and per-kind fallbacks. `index` is optional:
|
|
267
385
|
omit it and the viewer owns navigation itself.
|
|
@@ -279,9 +397,53 @@ next major.
|
|
|
279
397
|
- **`RangeSlider`** as an owned dual/single-thumb component with a `marks` prop.
|
|
280
398
|
- `resolveFilledSurface(scale, colors)` — picks readable ink for any filled surface.
|
|
281
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.
|
|
282
430
|
|
|
283
431
|
### Changed
|
|
284
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.
|
|
285
447
|
- **Performance, no visual change** (web premium/perf campaign):
|
|
286
448
|
- Theme colour math is memoised (`resolveFilledSurface`, `liftToContrast`, `softenToContrast`,
|
|
287
449
|
`resolveSoftTone`, luminance) in bounded, content-keyed caches: the hot calls are 5-20x faster and
|
|
@@ -390,9 +552,71 @@ next major.
|
|
|
390
552
|
`colorScheme` (any brand/global scale, via `resolveFilledSurface`), `isReadOnly` with real
|
|
391
553
|
`aria-readonly`, and `m`/`mt`/`mb`/`ml`/`mr`/`mx`/`my` on the wrapper. `InputSwitch` is now a
|
|
392
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.
|
|
393
556
|
|
|
394
557
|
### Changed (visual)
|
|
395
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.
|
|
612
|
+
- **Dark surfaces are hue-neutral on every brand.** The canvas, card, overlay, named `backgroundColor` ladder,
|
|
613
|
+
`background[50-900]` and `table.hover` no longer take a brand tint (`SURFACE_SAT` 14 to 0): all 9 brands share
|
|
614
|
+
canvas `#121212`, card `#212121` (1.163:1 over the canvas) and overlay `#2c2c2c` (1.153:1 over the card), so
|
|
615
|
+
switching brand no longer recolours the app background. The brand hue stays on the accent, ink, rules and the
|
|
616
|
+
sidebar rail. Light palettes are byte-identical to before (SHA-256 of all 9 resolved light palettes). Muted dark
|
|
617
|
+
text re-derives against the neutral surfaces and shifts a few hex values on lavender, rosewood, slate and zinc
|
|
618
|
+
(lavender `#9f92aa` to `#a498ae`); every muted token still passes the same AA gate. `planes: "flat"` keeps its
|
|
619
|
+
meaning (card = canvas) on the same canvas.
|
|
396
620
|
- **`Table` loading state.** With `isLoading` and no rows, each row now draws one skeleton per column (a checkbox
|
|
397
621
|
placeholder in the checkbox column, blank spacer cells) with the variant's row rule, instead of one bar spanning the
|
|
398
622
|
table. If `columns` is still empty while loading, the header shows four placeholder cells and a disabled select-all
|
|
@@ -461,11 +685,10 @@ next major.
|
|
|
461
685
|
2px on hover; the shadow still deepens.
|
|
462
686
|
- **`Button` (solid, outline, ghost) and `IconButton` scale to 0.98 while pressed** (`MOTION_PRESS_SCALE`).
|
|
463
687
|
Never when disabled or loading, nor under `prefers-reduced-motion`.
|
|
464
|
-
- **Dark planes
|
|
465
|
-
(`
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
lighter so they clear AA on selected list rows.
|
|
688
|
+
- **Dark planes separate by lift.** Cards (`background[50]`) sit one step (1.16:1) above the canvas, with
|
|
689
|
+
overlays (`surfaceRaised`) one step (1.15:1) above the card; every filled mark keeps 3:1 on all three. Light
|
|
690
|
+
mode is unchanged. A brand opts out of the lift with `buildDarkPalette(light, { planes: "flat" })`. `meadow`
|
|
691
|
+
and `rosewood` dark `accentText` move one rung lighter so they clear AA on selected list rows.
|
|
469
692
|
- **`zinc`:** muted text in light mode is `#515157` (was `#27272a`, 14.9:1), settled under a new 8:1 muted
|
|
470
693
|
ceiling; zinc's dark card is no longer darker than its canvas.
|
|
471
694
|
- **A brand's primary never reads as danger.** `radiant`'s danger colour (`red` and `semantic.error`) is
|
|
@@ -484,9 +707,155 @@ next major.
|
|
|
484
707
|
- **Light page canvas (`backgroundColor.base`) sits 1.09:1 below the card on all 9 brands**, so a borderless card keeps
|
|
485
708
|
its top edge (zinc and slate `#fafafa` to `#f5f5f5`, lavender `#fbfafd` to `#f5f4f8`). `main` and every other token
|
|
486
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.
|
|
487
803
|
|
|
488
804
|
### Fixed
|
|
489
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.
|
|
490
859
|
- **`WorkspaceTrayPreview`** reports `onOpenChange(false)` only after the card actually opened (it used to fire when
|
|
491
860
|
the pointer left before the open delay).
|
|
492
861
|
- **`FileUploader`** revokes the blob URL of an image the moment it is removed, and of images it rejects (over the total
|
|
@@ -503,8 +872,55 @@ next major.
|
|
|
503
872
|
control. No visual change.
|
|
504
873
|
- **`SearchSelect`'s open listbox and `Select`'s popup dialog have an accessible name**, from `label`, then
|
|
505
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.
|
|
506
894
|
- **`WorkspaceWindow`'s dialog is named by its visible title**; while a window is open the page behind it is
|
|
507
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.
|
|
508
924
|
- **`CustomModulesTable`'s edit-module field is named** by `labels.moduleNamePlaceholder`.
|
|
509
925
|
- **`StageProgress` no longer scrolls the page when it mounts**: the active stage was revealed with
|
|
510
926
|
`scrollIntoView`, which also scrolled every ancestor, so a tracker below the fold pulled the page down
|
|
@@ -538,6 +954,13 @@ next major.
|
|
|
538
954
|
- **`FileUpload` no longer leaks a blob URL per image thumbnail per render.** Each file gets one URL,
|
|
539
955
|
revoked when the file is removed or the component unmounts.
|
|
540
956
|
- **`Table` column search shows the current search when reopened**, instead of stale text.
|
|
957
|
+
- **`NavLauncher` search rows shorten the `· keyword` hint before the label**, so a long keyword list
|
|
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.
|
|
541
964
|
- **`NavigationBar` right cluster no longer overflows onto the avatar at phone widths.** The title
|
|
542
965
|
truncates first (overflow-only tooltip when it is a string); the `moreIcon` cluster can shrink, while
|
|
543
966
|
the sidebar toggle, back button and avatar menu never do. (HRMS, beta.60 launcher trigger overflow)
|
|
@@ -780,36 +1203,115 @@ next major.
|
|
|
780
1203
|
- `sidebar.hoverBg` no longer shares `sidebar.divider`'s value.
|
|
781
1204
|
- `InputSwitch`'s `colorScheme` was destructured and discarded — every switch rendered `primary`
|
|
782
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`).
|
|
783
1234
|
|
|
784
1235
|
### Deprecated
|
|
785
1236
|
|
|
786
|
-
|
|
1237
|
+
Each of these still ships its full implementation.
|
|
787
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.
|
|
788
1246
|
- `UploadedFile.type` (FileUploader) — never set; read the extension from `name`.
|
|
789
1247
|
- `ProfileCard` `color` — no visual effect; Card styles never read a colour scheme.
|
|
790
1248
|
- `NotificationData.status` — never read; the status dot colour comes from `dueDate`/`endDate`.
|
|
791
1249
|
- `CustomModulesTableLabels.loading` — never rendered; the loading state shows skeleton bars only.
|
|
792
1250
|
- `WorkspaceWindow` `onMedium` and `onMaximize` — never called; the window has no such controls.
|
|
793
1251
|
- `NavLauncher` `openShortcutHint` and `LauncherLabels.hintOpenMenu` — no longer rendered (the launcher
|
|
794
|
-
is already open when its footer shows); bind the open chord in the app only.
|
|
1252
|
+
is already open when its footer shows); bind the open chord in the app only. `hintOpenMenu` is now
|
|
1253
|
+
optional, so a full `LauncherLabels` object type-checks without it.
|
|
1254
|
+
- `searchLauncher` — legacy flat search (one Screens group); `NavLauncher` never calls it. Classic mode
|
|
1255
|
+
runs `searchLauncherSections`, which matches a screen on its own label and keywords only ("leave
|
|
1256
|
+
balance" finds nothing unless one screen's keywords carry both words); `searchMode="spotlight"`
|
|
1257
|
+
ranks and also matches a screen on its module and section.
|
|
795
1258
|
- `SelectV2` — use `Select` with `native={false}`; it is already a thin wrapper over it.
|
|
796
1259
|
- `SearchSelect`, `SelectSearch` are **no longer `@deprecated`.** Both now say "prefer `Select`
|
|
797
1260
|
for new work" instead: `@deprecated` claimed a migration that loses real capabilities
|
|
798
|
-
(`insideSelect
|
|
799
|
-
|
|
1261
|
+
(`insideSelect`; and `SelectSearch`'s combobox is the text input itself, a different ARIA
|
|
1262
|
+
pattern). The marker returns once `Select` absorbs them.
|
|
800
1263
|
- `Dropdown` is **no longer deprecated.** The marker was an artifact of the Select-consolidation
|
|
801
1264
|
pass; `Dropdown` is a `role="menu"` action menu, never a value picker, and nothing replaces it.
|
|
802
1265
|
- `Notification` is **no longer deprecated.** `NotificationItem` cannot replace it —
|
|
803
1266
|
`formatRelativeTime` clamps every future date to "Just now", so a countdown card silently
|
|
804
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`.
|
|
805
1271
|
- Dead props now marked rather than silently ignored: `Checkbox.variant`, `ProgressBar.variant`,
|
|
806
1272
|
`Table.isVisiblity` and its export props, `SideBar.selectedSubMenu`, `InputSwitch.variant`/
|
|
807
1273
|
`.spacing`/`.isFocusable`, and nine native-only `Select` props that are inert under
|
|
808
1274
|
`native={false}` (these now warn in dev).
|
|
809
|
-
- `disabled` → `isDisabled` on `SideBar`, `
|
|
1275
|
+
- `disabled` → `isDisabled` on `SideBar`, `StageProgress`, `DatePicker` and `TimePicker`. Both
|
|
810
1276
|
are accepted; `isDisabled` wins.
|
|
811
1277
|
- `MultiSelctOPtions` → `MultiSelectOption` (two typos in a shipped public type name).
|
|
812
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
|
+
|
|
813
1315
|
### Breaking — staged for the next major, not yet released
|
|
814
1316
|
|
|
815
1317
|
**`ProductCard` / `ProductDetails` props are replaced, and `ProductImageSlider` is gone.** Zero
|
|
@@ -841,9 +1343,8 @@ differ, so `tsc` names each site and nothing must be found by hand.
|
|
|
841
1343
|
- `Avatar`/`AvatarGroup` keep their names but narrow their props: `name` is required, Chakra style
|
|
842
1344
|
props are rejected, and `AvatarGroup` takes a `people` array instead of `Avatar` children.
|
|
843
1345
|
|
|
844
|
-
**Blast radius
|
|
845
|
-
|
|
846
|
-
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.
|
|
847
1348
|
|
|
848
1349
|
Get the current number from `scripts/verify-consumers.sh check`, which typechecks every consumer
|
|
849
1350
|
against a real build — **do not estimate it by grep.** A grep conflates names that were removed
|
|
@@ -861,8 +1362,6 @@ Consumers pin published versions, so none of this bites until a repo upgrades.
|
|
|
861
1362
|
|
|
862
1363
|
Tracked in `.cursor/plans/deferred-breaking-changes.md` (repo-only). The ones a consumer can hit:
|
|
863
1364
|
|
|
864
|
-
- `Select`'s search matches `label` only — no `searchFields` / `filterOption`.
|
|
865
|
-
- `Select`'s `virtualizeAfter` silently disables itself when any option has a `group`.
|
|
866
1365
|
- `Select`'s `onLoadMore` is zero-arg with no `hasMore` gate, unlike `SearchSelect.pagination`.
|
|
867
1366
|
- Migrating `SearchSelect` → `Select` by hand: `SearchSelect.onSearch` debounces **1000 ms**;
|
|
868
1367
|
`Select.searchDebounceMs` defaults to **0**. A mechanical rename starts firing the consumer's
|