@astryxdesign/core 0.4.5 → 0.4.6-canary.cea9ecd
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 +134 -0
- package/dist/Avatar/Avatar.d.ts +10 -5
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +139 -30
- package/dist/Avatar/AvatarStatusDot.d.ts +2 -1
- package/dist/Avatar/AvatarStatusDot.d.ts.map +1 -1
- package/dist/Avatar/AvatarStatusDot.js +30 -4
- package/dist/Avatar/AvatarStatusLabelContext.d.ts +39 -0
- package/dist/Avatar/AvatarStatusLabelContext.d.ts.map +1 -0
- package/dist/Avatar/AvatarStatusLabelContext.js +41 -0
- package/dist/AvatarGroup/AvatarGroup.d.ts +3 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +15 -9
- package/dist/Blockquote/Blockquote.d.ts +4 -3
- package/dist/Blockquote/Blockquote.d.ts.map +1 -1
- package/dist/Blockquote/Blockquote.js +9 -10
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +21 -5
- package/dist/Breadcrumbs/BreadcrumbItem.d.ts.map +1 -1
- package/dist/Breadcrumbs/BreadcrumbItem.js +47 -34
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +7 -7
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +21 -12
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarNavigation.js +8 -4
- package/dist/Calendar/styles.d.ts +2 -2
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +5 -5
- package/dist/Center/Center.d.ts +23 -1
- package/dist/Center/Center.d.ts.map +1 -1
- package/dist/Center/Center.js +12 -6
- package/dist/Chat/ChatComposer.d.ts.map +1 -1
- package/dist/Chat/ChatComposer.js +3 -3
- package/dist/Chat/ChatComposerDrawer.d.ts.map +1 -1
- package/dist/Chat/ChatComposerDrawer.js +2 -2
- package/dist/Chat/ChatToolCalls.d.ts.map +1 -1
- package/dist/Chat/ChatToolCalls.js +2 -2
- package/dist/Chat/useChatDictation.d.ts +1 -1
- package/dist/Chat/useChatDictation.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.d.ts +1 -1
- package/dist/Chat/useSpeechRecognition.d.ts.map +1 -1
- package/dist/Chat/useSpeechRecognition.js +4 -3
- package/dist/Chat/useTriggerMenu.d.ts.map +1 -1
- package/dist/Chat/useTriggerMenu.js +2 -2
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +2 -2
- package/dist/Citation/Citation.d.ts.map +1 -1
- package/dist/Citation/Citation.js +5 -5
- package/dist/ClickableCard/ClickableCard.d.ts.map +1 -1
- package/dist/ClickableCard/ClickableCard.js +4 -4
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +1 -1
- package/dist/Collapsible/Collapsible.d.ts.map +1 -1
- package/dist/Collapsible/Collapsible.js +2 -2
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +3 -3
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +6 -6
- package/dist/DateInput/DateInput.d.ts +31 -2
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +90 -22
- package/dist/DateInput/MonthScroller.d.ts +35 -0
- package/dist/DateInput/MonthScroller.d.ts.map +1 -0
- package/dist/DateInput/MonthScroller.js +658 -0
- package/dist/DateInput/MonthYearWheels.d.ts +24 -0
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -0
- package/dist/DateInput/MonthYearWheels.js +114 -0
- package/dist/DateInput/TouchDateField.d.ts +10 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -0
- package/dist/DateInput/TouchDateField.js +810 -0
- package/dist/DateInput/Wheel.d.ts +41 -0
- package/dist/DateInput/Wheel.d.ts.map +1 -0
- package/dist/DateInput/Wheel.js +315 -0
- package/dist/DateInput/monthGeometry.d.ts +65 -0
- package/dist/DateInput/monthGeometry.d.ts.map +1 -0
- package/dist/DateInput/monthGeometry.js +98 -0
- package/dist/DateInput/tokens.stylex.d.ts +63 -0
- package/dist/DateInput/tokens.stylex.d.ts.map +1 -0
- package/dist/DateInput/tokens.stylex.js +74 -0
- package/dist/DateInput/useOwnScrollGesture.d.ts +41 -0
- package/dist/DateInput/useOwnScrollGesture.d.ts.map +1 -0
- package/dist/DateInput/useOwnScrollGesture.js +202 -0
- package/dist/DateInput/usePointerDragScroll.d.ts +15 -0
- package/dist/DateInput/usePointerDragScroll.d.ts.map +1 -0
- package/dist/DateInput/usePointerDragScroll.js +216 -0
- package/dist/DateInput/useScrollSettle.d.ts +26 -0
- package/dist/DateInput/useScrollSettle.d.ts.map +1 -0
- package/dist/DateInput/useScrollSettle.js +149 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +17 -14
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +17 -14
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +3 -3
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuCheckboxItem.js +2 -2
- package/dist/DropdownMenu/DropdownMenuItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuItem.js +2 -2
- package/dist/DropdownMenu/DropdownMenuRadioItem.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuRadioItem.js +2 -2
- package/dist/DropdownMenu/DropdownMenuSubMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenuSubMenu.js +2 -2
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +4 -4
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +6 -0
- package/dist/Field/inputStyles.stylex.d.ts +1 -1
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +5 -5
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +6 -6
- package/dist/HoverCard/HoverCard.d.ts +13 -3
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +2 -0
- package/dist/HoverCard/index.d.ts +1 -1
- package/dist/HoverCard/index.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.d.ts +17 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +78 -9
- package/dist/InputGroup/InputGroup.js +1 -1
- package/dist/Item/Item.d.ts +9 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +52 -14
- package/dist/Layer/index.d.ts +4 -2
- package/dist/Layer/index.d.ts.map +1 -1
- package/dist/Layer/index.js +2 -0
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +3 -2
- package/dist/Layer/useTouchTrigger.d.ts +113 -0
- package/dist/Layer/useTouchTrigger.d.ts.map +1 -0
- package/dist/Layer/useTouchTrigger.js +241 -0
- package/dist/Layout/container.stylex.d.ts +4 -2
- package/dist/Layout/container.stylex.d.ts.map +1 -1
- package/dist/Layout/container.stylex.js +19 -11
- package/dist/Layout/index.d.ts +1 -0
- package/dist/Layout/index.d.ts.map +1 -1
- package/dist/Layout/index.js +4 -0
- package/dist/Layout/padding.stylex.d.ts +315 -12
- package/dist/Layout/padding.stylex.d.ts.map +1 -1
- package/dist/Layout/padding.stylex.js +389 -12
- package/dist/Lightbox/Lightbox.d.ts.map +1 -1
- package/dist/Lightbox/Lightbox.js +5 -4
- package/dist/Link/Link.d.ts.map +1 -1
- package/dist/Link/Link.js +6 -6
- package/dist/MetadataList/MetadataList.d.ts.map +1 -1
- package/dist/MetadataList/MetadataList.js +1 -1
- package/dist/MobileNav/MobileNav.d.ts +1 -0
- package/dist/MobileNav/MobileNav.d.ts.map +1 -1
- package/dist/MobileNav/MobileNav.js +24 -6
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +8 -8
- package/dist/NavItem/navItemStyles.stylex.d.ts +4 -4
- package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
- package/dist/NavItem/navItemStyles.stylex.js +4 -4
- package/dist/NavMenu/NavHeadingMenuItem.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenuItem.js +3 -3
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +36 -8
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +3 -3
- package/dist/Pagination/Pagination.d.ts.map +1 -1
- package/dist/Pagination/Pagination.js +2 -2
- package/dist/PowerSearch/PowerSearch.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearch.js +11 -12
- package/dist/PowerSearch/PowerSearchToken.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchToken.js +3 -1
- package/dist/PowerSearch/formatFilterValue.d.ts +11 -2
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +23 -8
- package/dist/RadioList/RadioListItem.d.ts +2 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +70 -40
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +7 -7
- package/dist/Section/Section.d.ts +36 -1
- package/dist/Section/Section.d.ts.map +1 -1
- package/dist/Section/Section.js +12 -2
- package/dist/SegmentedControl/SegmentedControlItem.d.ts.map +1 -1
- package/dist/SegmentedControl/SegmentedControlItem.js +7 -2
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +3 -3
- package/dist/Selector/Selector.d.ts +26 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +93 -20
- package/dist/Selector/SelectorOption.d.ts +14 -1
- package/dist/Selector/SelectorOption.d.ts.map +1 -1
- package/dist/Selector/SelectorOption.js +6 -0
- package/dist/Selector/SelectorRowLayoutContext.d.ts +8 -0
- package/dist/Selector/SelectorRowLayoutContext.d.ts.map +1 -0
- package/dist/Selector/SelectorRowLayoutContext.js +27 -0
- package/dist/Selector/types.d.ts +1 -0
- package/dist/Selector/types.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +4 -4
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +3 -3
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +7 -7
- package/dist/Stack/Stack.d.ts +23 -1
- package/dist/Stack/Stack.d.ts.map +1 -1
- package/dist/Stack/Stack.js +12 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +2 -2
- package/dist/TabList/Tab.d.ts.map +1 -1
- package/dist/TabList/Tab.js +1 -1
- package/dist/TabList/TabMenu.d.ts.map +1 -1
- package/dist/TabList/TabMenu.js +3 -3
- package/dist/Table/TableRow.js +4 -4
- package/dist/Table/plugins/columnResize/useTableColumnResize.d.ts.map +1 -1
- package/dist/Table/plugins/columnResize/useTableColumnResize.js +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +2 -2
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +2 -2
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +2 -2
- package/dist/Table/plugins/sortable/useTableSortable.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortable.js +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts +5 -3
- package/dist/Table/plugins/sortable/useTableSortableState.d.ts.map +1 -1
- package/dist/Table/plugins/sortable/useTableSortableState.js +12 -9
- package/dist/Table/plugins/tree/useTableTreeData.d.ts.map +1 -1
- package/dist/Table/plugins/tree/useTableTreeData.js +3 -3
- package/dist/TextArea/TextArea.js +1 -1
- package/dist/TextInput/TextInput.js +1 -1
- package/dist/Thumbnail/Thumbnail.d.ts.map +1 -1
- package/dist/Thumbnail/Thumbnail.js +3 -3
- package/dist/TimeInput/TimeInput.js +2 -2
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +6 -4
- package/dist/Timestamp/formatInstant.d.ts +3 -2
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +8 -8
- package/dist/Timestamp/tooltipEntries.d.ts +2 -1
- package/dist/Timestamp/tooltipEntries.d.ts.map +1 -1
- package/dist/Timestamp/tooltipEntries.js +5 -3
- package/dist/Toast/Toast.d.ts +4 -3
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +10 -7
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +6 -6
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +1 -1
- package/dist/Tooltip/Tooltip.d.ts +16 -3
- package/dist/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/Tooltip/Tooltip.js +2 -0
- package/dist/Tooltip/index.d.ts +1 -1
- package/dist/Tooltip/index.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.d.ts +21 -2
- package/dist/Tooltip/useTooltip.d.ts.map +1 -1
- package/dist/Tooltip/useTooltip.js +71 -13
- package/dist/TopNav/TopNavHeading.d.ts.map +1 -1
- package/dist/TopNav/TopNavHeading.js +4 -4
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +2 -2
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +2 -2
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +4 -4
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +7 -7
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +2 -2
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +1 -1
- package/dist/astryx.css +124 -62
- package/dist/hooks/containerReveal.stylex.d.ts.map +1 -1
- package/dist/hooks/containerReveal.stylex.js +18 -18
- package/dist/hooks/scrollbarGutter.d.ts +28 -0
- package/dist/hooks/scrollbarGutter.d.ts.map +1 -0
- package/dist/hooks/scrollbarGutter.js +103 -0
- package/dist/hooks/useAutoMediaMode.d.ts +31 -0
- package/dist/hooks/useAutoMediaMode.d.ts.map +1 -0
- package/dist/hooks/useAutoMediaMode.js +201 -0
- package/dist/hooks/useInputStatusIcon.d.ts.map +1 -1
- package/dist/hooks/useInputStatusIcon.js +1 -1
- package/dist/hooks/useListFocus.d.ts +5 -2
- package/dist/hooks/useListFocus.d.ts.map +1 -1
- package/dist/hooks/useListFocus.js +12 -6
- package/dist/hooks/useScrollLock.d.ts +4 -0
- package/dist/hooks/useScrollLock.d.ts.map +1 -1
- package/dist/hooks/useScrollLock.js +13 -1
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +2 -0
- package/dist/i18n/index.d.ts +6 -0
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js +6 -0
- package/dist/i18n/useCollator.d.ts +12 -0
- package/dist/i18n/useCollator.d.ts.map +1 -0
- package/dist/i18n/useCollator.js +40 -0
- package/dist/i18n/useLocale.d.ts +3 -0
- package/dist/i18n/useLocale.d.ts.map +1 -0
- package/dist/i18n/useLocale.js +31 -0
- package/dist/theme/MediaTheme.d.ts +25 -5
- package/dist/theme/MediaTheme.d.ts.map +1 -1
- package/dist/theme/MediaTheme.js +31 -6
- package/dist/theme/defineTheme.d.ts +5 -0
- package/dist/theme/defineTheme.d.ts.map +1 -1
- package/dist/theme/defineTheme.js +5 -0
- package/dist/theme/derivedVarRegistry.d.ts.map +1 -1
- package/dist/theme/derivedVarRegistry.js +7 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +66 -5
- package/dist/theme/index.d.ts +1 -1
- package/dist/theme/index.d.ts.map +1 -1
- package/dist/theme/syntax/index.d.ts +6 -0
- package/dist/theme/syntax/index.d.ts.map +1 -1
- package/dist/theme/syntax/index.js +7 -2
- package/dist/utils/dateParser.d.ts +4 -3
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +8 -8
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/plainDate.d.ts +5 -2
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +20 -4
- package/locales/en.json +28 -0
- package/locales/pseudo.json +21 -0
- package/package.json +3 -3
- package/src/Avatar/Avatar.doc.mjs +10 -6
- package/src/Avatar/Avatar.test.tsx +219 -1
- package/src/Avatar/Avatar.tsx +179 -37
- package/src/Avatar/AvatarStatusDot.tsx +30 -4
- package/src/Avatar/AvatarStatusLabelContext.ts +47 -0
- package/src/AvatarGroup/AvatarGroup.doc.mjs +10 -6
- package/src/AvatarGroup/AvatarGroup.test.tsx +62 -0
- package/src/AvatarGroup/AvatarGroup.tsx +3 -1
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +31 -8
- package/src/Banner/Banner.doc.mjs +2 -0
- package/src/Blockquote/Blockquote.doc.mjs +30 -7
- package/src/Blockquote/Blockquote.test.tsx +34 -3
- package/src/Blockquote/Blockquote.tsx +11 -9
- package/src/BottomSheet/BottomSheet.doc.mjs +3 -3
- package/src/BottomSheet/BottomSheet.test.tsx +24 -0
- package/src/BottomSheet/BottomSheetPanel.test.tsx +91 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +58 -3
- package/src/Breadcrumbs/BreadcrumbItem.tsx +36 -23
- package/src/Breadcrumbs/Breadcrumbs.doc.mjs +26 -2
- package/src/Breadcrumbs/Breadcrumbs.test.tsx +31 -0
- package/src/Button/Button.tsx +12 -9
- package/src/Calendar/Calendar.tsx +15 -9
- package/src/Calendar/hooks/useCalendarNavigation.ts +6 -4
- package/src/Calendar/styles.ts +8 -5
- package/src/Center/Center.doc.mjs +48 -0
- package/src/Center/Center.test.tsx +158 -0
- package/src/Center/Center.tsx +50 -9
- package/src/Chat/ChatComposer.tsx +11 -5
- package/src/Chat/ChatComposerDrawer.tsx +4 -1
- package/src/Chat/ChatToolCalls.tsx +13 -4
- package/src/Chat/{useChatDictation.test.ts → useChatDictation.test.tsx} +29 -14
- package/src/Chat/useChatDictation.ts +1 -1
- package/src/Chat/useSpeechRecognition.ts +5 -3
- package/src/Chat/useTriggerMenu.tsx +4 -1
- package/src/CheckboxInput/CheckboxInput.tsx +5 -2
- package/src/Citation/Citation.test.tsx +6 -1
- package/src/Citation/Citation.tsx +11 -5
- package/src/ClickableCard/ClickableCard.tsx +7 -4
- package/src/CodeBlock/CodeBlock.tsx +4 -1
- package/src/Collapsible/Collapsible.tsx +5 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +6 -3
- package/src/ComplexSelector/ComplexSelector.doc.mjs +10 -0
- package/src/ComplexSelector/ComplexSelector.tsx +14 -7
- package/src/DateInput/DateInput.test.tsx +17 -1
- package/src/DateInput/DateInput.tsx +93 -21
- package/src/DateInput/DateInputTouch.test.tsx +2582 -0
- package/src/DateInput/MonthScroller.tsx +878 -0
- package/src/DateInput/MonthYearWheels.tsx +147 -0
- package/src/DateInput/TouchDateField.tsx +1223 -0
- package/src/DateInput/Wheel.tsx +473 -0
- package/src/DateInput/monthGeometry.ts +118 -0
- package/src/DateInput/tokens.stylex.ts +99 -0
- package/src/DateInput/useOwnScrollGesture.ts +227 -0
- package/src/DateInput/usePointerDragScroll.ts +220 -0
- package/src/DateInput/useScrollSettle.ts +164 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +1 -1
- package/src/DateRangeInput/DateRangeInput.tsx +31 -13
- package/src/DateTimeInput/DateTimeInput.tsx +25 -9
- package/src/Dialog/Dialog.test.tsx +24 -0
- package/src/Dialog/Dialog.tsx +3 -0
- package/src/DropdownMenu/DropdownMenuCheckboxItem.tsx +5 -2
- package/src/DropdownMenu/DropdownMenuItem.tsx +5 -2
- package/src/DropdownMenu/DropdownMenuRadioItem.tsx +5 -2
- package/src/DropdownMenu/DropdownMenuSubMenu.tsx +5 -2
- package/src/Field/Field.doc.mjs +2 -0
- package/src/Field/FieldLabel.tsx +9 -3
- package/src/Field/InputClearButton.test.tsx +110 -3
- package/src/Field/InputClearButton.tsx +38 -0
- package/src/Field/inputStyles.stylex.ts +17 -13
- package/src/FileInput/FileInput.tsx +15 -8
- package/src/FormLayout/FormLayout.doc.mjs +1 -1
- package/src/HoverCard/HoverCard.doc.mjs +18 -0
- package/src/HoverCard/HoverCard.test.tsx +189 -0
- package/src/HoverCard/HoverCard.tsx +22 -2
- package/src/HoverCard/index.ts +1 -0
- package/src/HoverCard/useHoverCard.doc.mjs +2 -0
- package/src/HoverCard/useHoverCard.tsx +103 -7
- package/src/InputGroup/InputGroup.tsx +1 -1
- package/src/Item/Item.doc.mjs +1 -0
- package/src/Item/Item.test.tsx +50 -0
- package/src/Item/Item.tsx +54 -6
- package/src/Layer/index.ts +10 -0
- package/src/Layer/useLayer.tsx +13 -2
- package/src/Layer/useTouchTrigger.test.ts +70 -0
- package/src/Layer/useTouchTrigger.ts +366 -0
- package/src/Layout/Layout.doc.mjs +18 -0
- package/src/Layout/container.stylex.ts +11 -3
- package/src/Layout/index.ts +4 -0
- package/src/Layout/overlayPaddingReset.test.tsx +222 -0
- package/src/Layout/padding.stylex.ts +192 -12
- package/src/Lightbox/Lightbox.tsx +11 -3
- package/src/Link/Link.tsx +9 -6
- package/src/MetadataList/MetadataList.tsx +4 -1
- package/src/MobileNav/MobileNav.tsx +61 -5
- package/src/MobileNav/MobileNavEntryAnimation.test.tsx +212 -0
- package/src/MobileNav/MobileNavScrollbarGutter.test.tsx +109 -0
- package/src/MultiSelector/MultiSelector.test.tsx +1 -1
- package/src/MultiSelector/MultiSelector.tsx +26 -10
- package/src/NavItem/navItemStyles.stylex.ts +7 -4
- package/src/NavMenu/NavHeadingMenuItem.tsx +6 -3
- package/src/NumberInput/NumberInput.doc.mjs +24 -0
- package/src/NumberInput/NumberInput.test.tsx +138 -0
- package/src/NumberInput/NumberInput.tsx +47 -8
- package/src/Outline/Outline.tsx +5 -2
- package/src/Pagination/Pagination.tsx +5 -2
- package/src/Popover/Popover.test.tsx +27 -1
- package/src/PowerSearch/PowerSearch.tsx +17 -8
- package/src/PowerSearch/PowerSearchToken.tsx +3 -0
- package/src/PowerSearch/formatFilterValue.test.ts +22 -2
- package/src/PowerSearch/formatFilterValue.ts +31 -6
- package/src/RadioList/RadioList.doc.mjs +1 -1
- package/src/RadioList/RadioList.test.tsx +170 -2
- package/src/RadioList/RadioListItem.tsx +88 -53
- package/src/Resizable/ResizeHandle.test.tsx +22 -0
- package/src/Resizable/ResizeHandle.tsx +25 -7
- package/src/Section/Section.doc.mjs +55 -0
- package/src/Section/Section.test.tsx +201 -4
- package/src/Section/Section.tsx +69 -0
- package/src/SegmentedControl/SegmentedControl.test.tsx +31 -0
- package/src/SegmentedControl/SegmentedControlItem.tsx +15 -3
- package/src/SelectableCard/SelectableCard.tsx +6 -3
- package/src/Selector/Selector.doc.mjs +16 -2
- package/src/Selector/Selector.test.tsx +525 -1
- package/src/Selector/Selector.tsx +180 -25
- package/src/Selector/SelectorOption.doc.mjs +7 -0
- package/src/Selector/SelectorOption.tsx +21 -0
- package/src/Selector/SelectorRowLayoutContext.ts +32 -0
- package/src/Selector/types.ts +4 -4
- package/src/SideNav/SideNavHeading.tsx +14 -5
- package/src/SideNav/SideNavItem.tsx +9 -3
- package/src/Slider/Slider.tsx +25 -6
- package/src/Stack/Stack.doc.mjs +72 -0
- package/src/Stack/Stack.test.tsx +156 -0
- package/src/Stack/Stack.tsx +50 -8
- package/src/Switch/Switch.tsx +5 -2
- package/src/TabList/Tab.tsx +4 -1
- package/src/TabList/TabMenu.tsx +9 -3
- package/src/Table/TableRow.tsx +4 -4
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +6 -2
- package/src/Table/plugins/filtering/useTableFiltering.tsx +4 -1
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +10 -3
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +6 -3
- package/src/Table/plugins/sortable/useTableSortable.tsx +4 -1
- package/src/Table/plugins/sortable/useTableSortableState.test.tsx +34 -0
- package/src/Table/plugins/sortable/useTableSortableState.tsx +26 -23
- package/src/Table/plugins/tree/useTableTreeData.tsx +10 -4
- package/src/TextArea/TextArea.doc.mjs +1 -1
- package/src/TextArea/TextArea.tsx +1 -1
- package/src/TextInput/TextInput.tsx +1 -1
- package/src/Thumbnail/Thumbnail.tsx +9 -3
- package/src/TimeInput/TimeInput.tsx +1 -1
- package/src/Timestamp/Timestamp.test.tsx +27 -7
- package/src/Timestamp/Timestamp.tsx +8 -4
- package/src/Timestamp/formatInstant.ts +9 -7
- package/src/Timestamp/tooltipEntries.test.ts +11 -6
- package/src/Timestamp/tooltipEntries.ts +6 -2
- package/src/Toast/Toast.tsx +9 -7
- package/src/Token/Token.tsx +14 -5
- package/src/Tokenizer/Tokenizer.tsx +4 -1
- package/src/Tooltip/Tooltip.doc.mjs +18 -0
- package/src/Tooltip/Tooltip.test.tsx +254 -1
- package/src/Tooltip/Tooltip.tsx +22 -2
- package/src/Tooltip/index.ts +1 -0
- package/src/Tooltip/useTooltip.doc.mjs +2 -0
- package/src/Tooltip/useTooltip.tsx +99 -21
- package/src/TopNav/TopNavHeading.tsx +13 -4
- package/src/TopNav/TopNavItem.tsx +6 -3
- package/src/TopNav/TopNavMegaMenu.tsx +5 -2
- package/src/TopNav/TopNavMegaMenuItem.tsx +5 -2
- package/src/TopNav/TopNavMenu.tsx +10 -4
- package/src/TreeList/TreeListItem.tsx +22 -7
- package/src/Typeahead/BaseTypeahead.tsx +5 -2
- package/src/Typeahead/Typeahead.tsx +4 -1
- package/src/hooks/containerReveal.stylex.ts +54 -18
- package/src/hooks/scrollbarGutter.test.ts +167 -0
- package/src/hooks/scrollbarGutter.ts +121 -0
- package/src/hooks/useAutoMediaMode.test.ts +109 -0
- package/src/hooks/useAutoMediaMode.ts +233 -0
- package/src/hooks/useInputStatusIcon.tsx +4 -1
- package/src/hooks/useListFocus.doc.mjs +2 -2
- package/src/hooks/useListFocus.test.tsx +65 -3
- package/src/hooks/useListFocus.ts +15 -7
- package/src/hooks/useScrollLock.doc.mjs +4 -4
- package/src/hooks/useScrollLock.test.ts +73 -0
- package/src/hooks/useScrollLock.ts +14 -0
- package/src/i18n/InternationalizationContext.ts +2 -0
- package/src/i18n/__tests__/e2e-powersearch.test.tsx +37 -1
- package/src/i18n/__tests__/useCollator.test.tsx +115 -0
- package/src/i18n/__tests__/useLocale.test.tsx +52 -0
- package/src/i18n/index.ts +6 -0
- package/src/i18n/useCollator.doc.mjs +84 -0
- package/src/i18n/useCollator.ts +44 -0
- package/src/i18n/useLocale.doc.mjs +70 -0
- package/src/i18n/useLocale.ts +34 -0
- package/src/i18n/useTranslator.doc.mjs +1 -1
- package/src/reset.css +9 -2
- package/src/reset.test.ts +22 -0
- package/src/theme/MediaTheme.doc.mjs +23 -4
- package/src/theme/MediaTheme.dom.test.tsx +97 -0
- package/src/theme/MediaTheme.tsx +42 -7
- package/src/theme/defineTheme.test.ts +9 -3
- package/src/theme/defineTheme.ts +5 -0
- package/src/theme/derivedVarRegistry.test.ts +19 -5
- package/src/theme/derivedVarRegistry.ts +4 -0
- package/src/theme/generateThemeRules.test.ts +118 -0
- package/src/theme/generateThemeRules.ts +83 -5
- package/src/theme/index.ts +1 -1
- package/src/theme/syntax/index.ts +6 -2
- package/src/theme/syntax/serverSafeSyntax.test.ts +68 -0
- package/src/utils/dateParser.test.ts +20 -0
- package/src/utils/dateParser.ts +14 -7
- package/src/utils/index.ts +2 -0
- package/src/utils/plainDate.test.ts +6 -0
- package/src/utils/plainDate.ts +21 -4
|
@@ -13,6 +13,22 @@ import {describe, it, expect, vi} from 'vitest';
|
|
|
13
13
|
import {render, screen} from '@testing-library/react';
|
|
14
14
|
import {Center} from './Center';
|
|
15
15
|
|
|
16
|
+
/**
|
|
17
|
+
* The functional class output, as an order-insensitive set. StyleX's dev
|
|
18
|
+
* runtime also emits readable debug classes naming the style object a
|
|
19
|
+
* declaration came from ("padding__paddingBlockStyles.2"); those record
|
|
20
|
+
* provenance rather than applied CSS and survive even when the declaration
|
|
21
|
+
* they name loses a merge, so they are dropped here.
|
|
22
|
+
*/
|
|
23
|
+
function classSet(el: HTMLElement): Set<string> {
|
|
24
|
+
return new Set(
|
|
25
|
+
el.className
|
|
26
|
+
.split(' ')
|
|
27
|
+
.filter(Boolean)
|
|
28
|
+
.filter(c => !c.includes('__') && !c.includes('.')),
|
|
29
|
+
);
|
|
30
|
+
}
|
|
31
|
+
|
|
16
32
|
describe('Center', () => {
|
|
17
33
|
it('renders and centers children (both axes by default)', () => {
|
|
18
34
|
render(
|
|
@@ -207,4 +223,146 @@ describe('Center', () => {
|
|
|
207
223
|
const element = screen.getByTestId('center');
|
|
208
224
|
expect(element.tagName).toBe('DIV');
|
|
209
225
|
});
|
|
226
|
+
|
|
227
|
+
it('applies a class when paddingBlockStart is set on its own', () => {
|
|
228
|
+
const {rerender} = render(
|
|
229
|
+
<Center data-testid="center">
|
|
230
|
+
<div>Content</div>
|
|
231
|
+
</Center>,
|
|
232
|
+
);
|
|
233
|
+
const baseline = screen.getByTestId('center').className;
|
|
234
|
+
rerender(
|
|
235
|
+
<Center paddingBlockStart={2} data-testid="center">
|
|
236
|
+
<div>Content</div>
|
|
237
|
+
</Center>,
|
|
238
|
+
);
|
|
239
|
+
expect(screen.getByTestId('center').className).not.toBe(baseline);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it('lets paddingBlockStart/paddingBlockEnd override only their own edge', () => {
|
|
243
|
+
// padding={4} + paddingBlockStart={2} must equal spelling every edge out:
|
|
244
|
+
// both inline edges and the block-end edge stay at 4.
|
|
245
|
+
const {rerender} = render(
|
|
246
|
+
<Center padding={4} paddingBlockStart={2} data-testid="center">
|
|
247
|
+
<div>Content</div>
|
|
248
|
+
</Center>,
|
|
249
|
+
);
|
|
250
|
+
const perEdge = classSet(screen.getByTestId('center'));
|
|
251
|
+
rerender(
|
|
252
|
+
<Center
|
|
253
|
+
paddingInline={4}
|
|
254
|
+
paddingBlockStart={2}
|
|
255
|
+
paddingBlockEnd={4}
|
|
256
|
+
data-testid="center">
|
|
257
|
+
<div>Content</div>
|
|
258
|
+
</Center>,
|
|
259
|
+
);
|
|
260
|
+
expect(perEdge).toEqual(classSet(screen.getByTestId('center')));
|
|
261
|
+
});
|
|
262
|
+
|
|
263
|
+
it('gives paddingBlockEnd precedence over paddingBlock', () => {
|
|
264
|
+
const {rerender} = render(
|
|
265
|
+
<Center paddingBlock={6} paddingBlockEnd={0} data-testid="center">
|
|
266
|
+
<div>Content</div>
|
|
267
|
+
</Center>,
|
|
268
|
+
);
|
|
269
|
+
const overridden = classSet(screen.getByTestId('center'));
|
|
270
|
+
rerender(
|
|
271
|
+
<Center paddingBlockStart={6} paddingBlockEnd={0} data-testid="center">
|
|
272
|
+
<div>Content</div>
|
|
273
|
+
</Center>,
|
|
274
|
+
);
|
|
275
|
+
expect(overridden).toEqual(classSet(screen.getByTestId('center')));
|
|
276
|
+
});
|
|
277
|
+
|
|
278
|
+
it('leaves padding/paddingBlock output unchanged when no edge prop is set', () => {
|
|
279
|
+
const {rerender} = render(
|
|
280
|
+
<Center padding={3} data-testid="center">
|
|
281
|
+
<div>Content</div>
|
|
282
|
+
</Center>,
|
|
283
|
+
);
|
|
284
|
+
const uniform = classSet(screen.getByTestId('center'));
|
|
285
|
+
rerender(
|
|
286
|
+
<Center paddingInline={3} paddingBlock={3} data-testid="center">
|
|
287
|
+
<div>Content</div>
|
|
288
|
+
</Center>,
|
|
289
|
+
);
|
|
290
|
+
expect(uniform).toEqual(classSet(screen.getByTestId('center')));
|
|
291
|
+
});
|
|
292
|
+
|
|
293
|
+
it('applies a class when paddingInlineStart is set on its own', () => {
|
|
294
|
+
const {rerender} = render(
|
|
295
|
+
<Center data-testid="center">
|
|
296
|
+
<div>Content</div>
|
|
297
|
+
</Center>,
|
|
298
|
+
);
|
|
299
|
+
const baseline = screen.getByTestId('center').className;
|
|
300
|
+
rerender(
|
|
301
|
+
<Center paddingInlineStart={2} data-testid="center">
|
|
302
|
+
<div>Content</div>
|
|
303
|
+
</Center>,
|
|
304
|
+
);
|
|
305
|
+
expect(screen.getByTestId('center').className).not.toBe(baseline);
|
|
306
|
+
});
|
|
307
|
+
|
|
308
|
+
it('lets paddingInlineStart/paddingInlineEnd override only their own edge', () => {
|
|
309
|
+
const {rerender} = render(
|
|
310
|
+
<Center padding={4} paddingInlineStart={2} data-testid="center">
|
|
311
|
+
<div>Content</div>
|
|
312
|
+
</Center>,
|
|
313
|
+
);
|
|
314
|
+
const perEdge = classSet(screen.getByTestId('center'));
|
|
315
|
+
rerender(
|
|
316
|
+
<Center
|
|
317
|
+
paddingInlineStart={2}
|
|
318
|
+
paddingInlineEnd={4}
|
|
319
|
+
paddingBlock={4}
|
|
320
|
+
data-testid="center">
|
|
321
|
+
<div>Content</div>
|
|
322
|
+
</Center>,
|
|
323
|
+
);
|
|
324
|
+
expect(perEdge).toEqual(classSet(screen.getByTestId('center')));
|
|
325
|
+
});
|
|
326
|
+
|
|
327
|
+
it('gives paddingInlineEnd precedence over paddingInline', () => {
|
|
328
|
+
const {rerender} = render(
|
|
329
|
+
<Center paddingInline={6} paddingInlineEnd={0} data-testid="center">
|
|
330
|
+
<div>Content</div>
|
|
331
|
+
</Center>,
|
|
332
|
+
);
|
|
333
|
+
const overridden = classSet(screen.getByTestId('center'));
|
|
334
|
+
rerender(
|
|
335
|
+
<Center paddingInlineStart={6} paddingInlineEnd={0} data-testid="center">
|
|
336
|
+
<div>Content</div>
|
|
337
|
+
</Center>,
|
|
338
|
+
);
|
|
339
|
+
expect(overridden).toEqual(classSet(screen.getByTestId('center')));
|
|
340
|
+
});
|
|
341
|
+
|
|
342
|
+
it('resolves all four edges independently', () => {
|
|
343
|
+
// One prop per edge, each a different step: the four-edge spelling and the
|
|
344
|
+
// shorthand-plus-overrides spelling must agree.
|
|
345
|
+
const {rerender} = render(
|
|
346
|
+
<Center
|
|
347
|
+
paddingInlineStart={1}
|
|
348
|
+
paddingInlineEnd={2}
|
|
349
|
+
paddingBlockStart={3}
|
|
350
|
+
paddingBlockEnd={4}
|
|
351
|
+
data-testid="center">
|
|
352
|
+
<div>Content</div>
|
|
353
|
+
</Center>,
|
|
354
|
+
);
|
|
355
|
+
const explicit = classSet(screen.getByTestId('center'));
|
|
356
|
+
rerender(
|
|
357
|
+
<Center
|
|
358
|
+
padding={4}
|
|
359
|
+
paddingInlineStart={1}
|
|
360
|
+
paddingInlineEnd={2}
|
|
361
|
+
paddingBlockStart={3}
|
|
362
|
+
data-testid="center">
|
|
363
|
+
<div>Content</div>
|
|
364
|
+
</Center>,
|
|
365
|
+
);
|
|
366
|
+
expect(explicit).toEqual(classSet(screen.getByTestId('center')));
|
|
367
|
+
});
|
|
210
368
|
});
|
package/src/Center/Center.tsx
CHANGED
|
@@ -18,8 +18,10 @@ import type {BaseProps} from '../BaseProps';
|
|
|
18
18
|
import * as stylex from '@stylexjs/stylex';
|
|
19
19
|
import type {SizeValue, SpacingStep} from '../utils/types';
|
|
20
20
|
import {
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
paddingInlineStartStyles,
|
|
22
|
+
paddingInlineEndStyles,
|
|
23
|
+
paddingBlockStartStyles,
|
|
24
|
+
paddingBlockEndStyles,
|
|
23
25
|
} from '../Layout/padding.stylex';
|
|
24
26
|
import {mergeProps} from '../utils';
|
|
25
27
|
import {themeProps} from '../utils/themeProps';
|
|
@@ -106,12 +108,38 @@ export interface CenterProps extends BaseProps<HTMLDivElement> {
|
|
|
106
108
|
*/
|
|
107
109
|
paddingInline?: SpacingStep;
|
|
108
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Inline-start padding, using the spacing scale. Logical: the left edge in
|
|
113
|
+
* LTR, the right edge in RTL.
|
|
114
|
+
* Overrides `paddingInline` and `padding` on that edge only.
|
|
115
|
+
*/
|
|
116
|
+
paddingInlineStart?: SpacingStep;
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Inline-end padding, using the spacing scale. Logical: the right edge in
|
|
120
|
+
* LTR, the left edge in RTL.
|
|
121
|
+
* Overrides `paddingInline` and `padding` on that edge only.
|
|
122
|
+
*/
|
|
123
|
+
paddingInlineEnd?: SpacingStep;
|
|
124
|
+
|
|
109
125
|
/**
|
|
110
126
|
* Block (vertical) padding, using the spacing scale.
|
|
111
127
|
* Overrides `padding` on the block axis when both are set.
|
|
112
128
|
*/
|
|
113
129
|
paddingBlock?: SpacingStep;
|
|
114
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Block-start (top) padding, using the spacing scale.
|
|
133
|
+
* Overrides `paddingBlock` and `padding` on that edge only.
|
|
134
|
+
*/
|
|
135
|
+
paddingBlockStart?: SpacingStep;
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Block-end (bottom) padding, using the spacing scale.
|
|
139
|
+
* Overrides `paddingBlock` and `padding` on that edge only.
|
|
140
|
+
*/
|
|
141
|
+
paddingBlockEnd?: SpacingStep;
|
|
142
|
+
|
|
115
143
|
/**
|
|
116
144
|
* Whether to make the container inline-flex (useful for text/icons).
|
|
117
145
|
* @default false
|
|
@@ -145,7 +173,11 @@ export function Center({
|
|
|
145
173
|
minHeight,
|
|
146
174
|
padding,
|
|
147
175
|
paddingInline,
|
|
176
|
+
paddingInlineStart,
|
|
177
|
+
paddingInlineEnd,
|
|
148
178
|
paddingBlock,
|
|
179
|
+
paddingBlockStart,
|
|
180
|
+
paddingBlockEnd,
|
|
149
181
|
isInline = false,
|
|
150
182
|
children,
|
|
151
183
|
xstyle,
|
|
@@ -154,10 +186,14 @@ export function Center({
|
|
|
154
186
|
ref,
|
|
155
187
|
...props
|
|
156
188
|
}: CenterProps) {
|
|
157
|
-
// Resolve padding to per-
|
|
158
|
-
//
|
|
159
|
-
const
|
|
160
|
-
|
|
189
|
+
// Resolve padding to per-edge values. Most specific wins, per edge:
|
|
190
|
+
// edge prop -> axis prop -> `padding`.
|
|
191
|
+
const resolvedPaddingInlineStart =
|
|
192
|
+
paddingInlineStart ?? paddingInline ?? padding;
|
|
193
|
+
const resolvedPaddingInlineEnd = paddingInlineEnd ?? paddingInline ?? padding;
|
|
194
|
+
const resolvedPaddingBlockStart =
|
|
195
|
+
paddingBlockStart ?? paddingBlock ?? padding;
|
|
196
|
+
const resolvedPaddingBlockEnd = paddingBlockEnd ?? paddingBlock ?? padding;
|
|
161
197
|
|
|
162
198
|
const stylexProps = mergeProps(
|
|
163
199
|
themeProps('center', {axis}),
|
|
@@ -171,9 +207,14 @@ export function Center({
|
|
|
171
207
|
maxWidth ?? null,
|
|
172
208
|
minHeight ?? null,
|
|
173
209
|
),
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
210
|
+
resolvedPaddingInlineStart != null &&
|
|
211
|
+
paddingInlineStartStyles[resolvedPaddingInlineStart],
|
|
212
|
+
resolvedPaddingInlineEnd != null &&
|
|
213
|
+
paddingInlineEndStyles[resolvedPaddingInlineEnd],
|
|
214
|
+
resolvedPaddingBlockStart != null &&
|
|
215
|
+
paddingBlockStartStyles[resolvedPaddingBlockStart],
|
|
216
|
+
resolvedPaddingBlockEnd != null &&
|
|
217
|
+
paddingBlockEndStyles[resolvedPaddingBlockEnd],
|
|
177
218
|
xstyle,
|
|
178
219
|
),
|
|
179
220
|
className,
|
|
@@ -152,7 +152,10 @@ const styles = stylex.create({
|
|
|
152
152
|
gap: spacingVars['--spacing-2'],
|
|
153
153
|
borderRadius: 'var(--_chat-composer-radius)',
|
|
154
154
|
backgroundColor: colorVars['--color-background-popover'],
|
|
155
|
-
cursor:
|
|
155
|
+
cursor: {
|
|
156
|
+
default: 'text',
|
|
157
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
158
|
+
},
|
|
156
159
|
transition: `box-shadow ${durationVars['--duration-fast']} ${easeVars['--ease-standard']}, border-color ${durationVars['--duration-fast']} ${easeVars['--ease-standard']}`,
|
|
157
160
|
},
|
|
158
161
|
header: {
|
|
@@ -273,7 +276,9 @@ const elevationStyles = stylex.create({
|
|
|
273
276
|
low: {
|
|
274
277
|
boxShadow: {
|
|
275
278
|
default: shadowVars['--shadow-low'],
|
|
276
|
-
':hover
|
|
279
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
280
|
+
'@media (hover: hover)': shadowVars['--shadow-med'],
|
|
281
|
+
},
|
|
277
282
|
},
|
|
278
283
|
':focus-within': {
|
|
279
284
|
boxShadow: shadowVars['--shadow-med'],
|
|
@@ -292,9 +297,10 @@ const elevationStyles = stylex.create({
|
|
|
292
297
|
padding: `calc(var(--_chat-composer-padding) - ${borderVars['--border-width']})`,
|
|
293
298
|
boxShadow: {
|
|
294
299
|
default: 'none',
|
|
295
|
-
':hover:not(:focus-within)':
|
|
296
|
-
|
|
297
|
-
|
|
300
|
+
':hover:not(:focus-within):where(:not(:disabled,[aria-disabled="true"]))':
|
|
301
|
+
{
|
|
302
|
+
'@media (hover: hover)': `inset 0px 0px 0px 2px color-mix(in srgb, ${colorVars['--color-border-emphasized']} 30%, transparent)`,
|
|
303
|
+
},
|
|
298
304
|
':focus-within': `inset 0px 0px 0px 2px ${colorVars['--color-accent-muted']}`,
|
|
299
305
|
},
|
|
300
306
|
},
|
|
@@ -117,7 +117,10 @@ const styles = stylex.create({
|
|
|
117
117
|
height: spacingVars['--spacing-5'],
|
|
118
118
|
paddingInline: spacingVars['--spacing-4'],
|
|
119
119
|
marginInline: `calc(-1 * ${spacingVars['--spacing-4']})`,
|
|
120
|
-
cursor:
|
|
120
|
+
cursor: {
|
|
121
|
+
default: 'pointer',
|
|
122
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
123
|
+
},
|
|
121
124
|
userSelect: 'none',
|
|
122
125
|
},
|
|
123
126
|
toggleCollapsed: {},
|
|
@@ -105,7 +105,10 @@ const styles = stylex.create({
|
|
|
105
105
|
display: 'flex',
|
|
106
106
|
alignItems: 'center',
|
|
107
107
|
gap: spacingVars['--spacing-1-5'],
|
|
108
|
-
cursor:
|
|
108
|
+
cursor: {
|
|
109
|
+
default: 'pointer',
|
|
110
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
111
|
+
},
|
|
109
112
|
userSelect: 'none',
|
|
110
113
|
minHeight: '24px',
|
|
111
114
|
paddingBlock: spacingVars['--spacing-0-5'],
|
|
@@ -192,18 +195,24 @@ const styles = stylex.create({
|
|
|
192
195
|
paddingBlock: spacingVars['--spacing-0-5'],
|
|
193
196
|
},
|
|
194
197
|
callRowClickable: {
|
|
195
|
-
cursor:
|
|
198
|
+
cursor: {
|
|
199
|
+
default: 'pointer',
|
|
200
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
201
|
+
},
|
|
196
202
|
borderRadius: radiusVars['--radius-element'],
|
|
197
203
|
paddingInline: spacingVars['--spacing-1'],
|
|
198
204
|
marginInline: `calc(-1 * ${spacingVars['--spacing-1']})`,
|
|
199
205
|
'@media (hover: hover)': {
|
|
200
|
-
':hover': {
|
|
206
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
201
207
|
backgroundColor: colorVars['--color-overlay-hover'],
|
|
202
208
|
},
|
|
203
209
|
},
|
|
204
210
|
},
|
|
205
211
|
callRowToggle: {
|
|
206
|
-
cursor:
|
|
212
|
+
cursor: {
|
|
213
|
+
default: 'pointer',
|
|
214
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
215
|
+
},
|
|
207
216
|
},
|
|
208
217
|
statusIcon: {
|
|
209
218
|
position: 'relative',
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
+
import type {ReactNode} from 'react';
|
|
3
4
|
import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
|
|
4
5
|
import {renderHook, act} from '@testing-library/react';
|
|
6
|
+
import {InternationalizationProvider} from '../i18n';
|
|
5
7
|
import {useSpeechRecognition} from './useSpeechRecognition';
|
|
6
8
|
import {useChatDictation} from './useChatDictation';
|
|
7
9
|
|
|
@@ -50,8 +52,7 @@ let originalSR: unknown;
|
|
|
50
52
|
|
|
51
53
|
beforeEach(() => {
|
|
52
54
|
lastInstance = null;
|
|
53
|
-
originalSR = (window as unknown as Record<string, unknown>)
|
|
54
|
-
.SpeechRecognition;
|
|
55
|
+
originalSR = (window as unknown as Record<string, unknown>).SpeechRecognition;
|
|
55
56
|
(window as unknown as Record<string, unknown>).SpeechRecognition =
|
|
56
57
|
MockSRConstructor;
|
|
57
58
|
});
|
|
@@ -85,6 +86,28 @@ describe('useSpeechRecognition', () => {
|
|
|
85
86
|
expect(result.current.isSupported).toBe(true);
|
|
86
87
|
});
|
|
87
88
|
|
|
89
|
+
it('uses the provider locale by default and preserves an explicit override', () => {
|
|
90
|
+
const wrapper = ({children}: {children: ReactNode}) => (
|
|
91
|
+
<InternationalizationProvider locale="fr-FR">
|
|
92
|
+
{children}
|
|
93
|
+
</InternationalizationProvider>
|
|
94
|
+
);
|
|
95
|
+
const provider = renderHook(() => useSpeechRecognition(), {wrapper});
|
|
96
|
+
|
|
97
|
+
act(() => {
|
|
98
|
+
provider.result.current.start();
|
|
99
|
+
});
|
|
100
|
+
expect(lastInstance?.lang).toBe('fr-FR');
|
|
101
|
+
|
|
102
|
+
const explicit = renderHook(() => useSpeechRecognition({lang: 'ja-JP'}), {
|
|
103
|
+
wrapper,
|
|
104
|
+
});
|
|
105
|
+
act(() => {
|
|
106
|
+
explicit.result.current.start();
|
|
107
|
+
});
|
|
108
|
+
expect(lastInstance?.lang).toBe('ja-JP');
|
|
109
|
+
});
|
|
110
|
+
|
|
88
111
|
it('starts and sets isListening', () => {
|
|
89
112
|
const {result} = renderHook(() => useSpeechRecognition());
|
|
90
113
|
|
|
@@ -145,9 +168,7 @@ describe('useSpeechRecognition', () => {
|
|
|
145
168
|
const onStart = vi.fn();
|
|
146
169
|
const onEnd = vi.fn();
|
|
147
170
|
|
|
148
|
-
const {result} = renderHook(() =>
|
|
149
|
-
useSpeechRecognition({onStart, onEnd}),
|
|
150
|
-
);
|
|
171
|
+
const {result} = renderHook(() => useSpeechRecognition({onStart, onEnd}));
|
|
151
172
|
|
|
152
173
|
act(() => {
|
|
153
174
|
result.current.start();
|
|
@@ -194,9 +215,7 @@ describe('useSpeechRecognition', () => {
|
|
|
194
215
|
it('handles interim results and updates interimTranscript', () => {
|
|
195
216
|
const onTranscript = vi.fn();
|
|
196
217
|
|
|
197
|
-
const {result} = renderHook(() =>
|
|
198
|
-
useSpeechRecognition({onTranscript}),
|
|
199
|
-
);
|
|
218
|
+
const {result} = renderHook(() => useSpeechRecognition({onTranscript}));
|
|
200
219
|
|
|
201
220
|
act(() => {
|
|
202
221
|
result.current.start();
|
|
@@ -294,9 +313,7 @@ describe('useChatDictation', () => {
|
|
|
294
313
|
const onStart = vi.fn();
|
|
295
314
|
const onEnd = vi.fn();
|
|
296
315
|
|
|
297
|
-
const {result} = renderHook(() =>
|
|
298
|
-
useChatDictation({onStart, onEnd}),
|
|
299
|
-
);
|
|
316
|
+
const {result} = renderHook(() => useChatDictation({onStart, onEnd}));
|
|
300
317
|
|
|
301
318
|
act(() => {
|
|
302
319
|
result.current.start();
|
|
@@ -312,9 +329,7 @@ describe('useChatDictation', () => {
|
|
|
312
329
|
it('handles final transcript via onResult', () => {
|
|
313
330
|
const onResult = vi.fn();
|
|
314
331
|
|
|
315
|
-
const {result} = renderHook(() =>
|
|
316
|
-
useChatDictation({onResult}),
|
|
317
|
-
);
|
|
332
|
+
const {result} = renderHook(() => useChatDictation({onResult}));
|
|
318
333
|
|
|
319
334
|
act(() => {
|
|
320
335
|
result.current.start();
|
|
@@ -22,7 +22,7 @@ import {useSpeechRecognition} from './useSpeechRecognition';
|
|
|
22
22
|
// =============================================================================
|
|
23
23
|
|
|
24
24
|
export interface UseChatDictationOptions {
|
|
25
|
-
/** BCP-47 language tag. @default
|
|
25
|
+
/** BCP-47 language tag. @default InternationalizationProvider locale */
|
|
26
26
|
lang?: string;
|
|
27
27
|
/** Whether recognition continues until explicitly stopped. @default true */
|
|
28
28
|
continuous?: boolean;
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
16
|
import {useState, useCallback, useEffect, useMemo, useRef} from 'react';
|
|
17
|
-
import {useTranslator} from '../i18n';
|
|
17
|
+
import {useLocale, useTranslator} from '../i18n';
|
|
18
18
|
|
|
19
19
|
// =============================================================================
|
|
20
20
|
// Types
|
|
21
21
|
// =============================================================================
|
|
22
22
|
|
|
23
23
|
export interface UseSpeechRecognitionOptions {
|
|
24
|
-
/** BCP-47 language tag. @default
|
|
24
|
+
/** BCP-47 language tag. @default InternationalizationProvider locale */
|
|
25
25
|
lang?: string;
|
|
26
26
|
/** Whether recognition continues until explicitly stopped. @default true */
|
|
27
27
|
continuous?: boolean;
|
|
@@ -260,6 +260,7 @@ export function useSpeechRecognition(
|
|
|
260
260
|
options: UseSpeechRecognitionOptions = {},
|
|
261
261
|
): UseSpeechRecognitionReturn {
|
|
262
262
|
const t = useTranslator();
|
|
263
|
+
const providerLocale = useLocale();
|
|
263
264
|
const {
|
|
264
265
|
lang,
|
|
265
266
|
continuous = true,
|
|
@@ -348,7 +349,7 @@ export function useSpeechRecognition(
|
|
|
348
349
|
}
|
|
349
350
|
recognitionRef.current?.abort();
|
|
350
351
|
const recognition = new SR();
|
|
351
|
-
recognition.lang = lang ??
|
|
352
|
+
recognition.lang = lang ?? providerLocale;
|
|
352
353
|
recognition.continuous = continuous;
|
|
353
354
|
recognition.interimResults = interimResults;
|
|
354
355
|
|
|
@@ -418,6 +419,7 @@ export function useSpeechRecognition(
|
|
|
418
419
|
recognition.start();
|
|
419
420
|
}, [
|
|
420
421
|
lang,
|
|
422
|
+
providerLocale,
|
|
421
423
|
continuous,
|
|
422
424
|
interimResults,
|
|
423
425
|
startVolumePolling,
|
|
@@ -117,7 +117,10 @@ const styles = stylex.create({
|
|
|
117
117
|
width: '100%',
|
|
118
118
|
padding: spacingVars['--spacing-2'],
|
|
119
119
|
borderRadius: radiusVars['--radius-element'],
|
|
120
|
-
cursor:
|
|
120
|
+
cursor: {
|
|
121
|
+
default: 'pointer',
|
|
122
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
123
|
+
},
|
|
121
124
|
outline: 'none',
|
|
122
125
|
backgroundColor: 'transparent',
|
|
123
126
|
border: 'none',
|
|
@@ -80,7 +80,10 @@ const styles = stylex.create({
|
|
|
80
80
|
margin: 0,
|
|
81
81
|
padding: 0,
|
|
82
82
|
opacity: 0,
|
|
83
|
-
cursor:
|
|
83
|
+
cursor: {
|
|
84
|
+
default: 'pointer',
|
|
85
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
86
|
+
},
|
|
84
87
|
zIndex: 1,
|
|
85
88
|
minInlineSize: {
|
|
86
89
|
default: null,
|
|
@@ -104,7 +107,7 @@ const styles = stylex.create({
|
|
|
104
107
|
},
|
|
105
108
|
},
|
|
106
109
|
inputDisabled: {
|
|
107
|
-
cursor: '
|
|
110
|
+
cursor: 'default',
|
|
108
111
|
},
|
|
109
112
|
labelWrapper: {
|
|
110
113
|
display: 'flex',
|
|
@@ -20,7 +20,12 @@ const probe = stylex.create({
|
|
|
20
20
|
secondaryText: {color: colorVars['--color-text-secondary']},
|
|
21
21
|
accentText: {color: colorVars['--color-text-accent']},
|
|
22
22
|
badgeBackground: {backgroundColor: colorVars['--color-accent-muted']},
|
|
23
|
-
pointerCursor: {
|
|
23
|
+
pointerCursor: {
|
|
24
|
+
cursor: {
|
|
25
|
+
default: 'pointer',
|
|
26
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
27
|
+
},
|
|
28
|
+
},
|
|
24
29
|
});
|
|
25
30
|
|
|
26
31
|
function atomicClasses(style: (typeof probe)[keyof typeof probe]): string[] {
|
|
@@ -99,11 +99,14 @@ const styles = stylex.create({
|
|
|
99
99
|
minWidth: 0,
|
|
100
100
|
},
|
|
101
101
|
labelInteractive: {
|
|
102
|
-
cursor:
|
|
102
|
+
cursor: {
|
|
103
|
+
default: 'pointer',
|
|
104
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
105
|
+
},
|
|
103
106
|
},
|
|
104
107
|
labelHover: {
|
|
105
108
|
backgroundColor: {
|
|
106
|
-
':hover': {
|
|
109
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
107
110
|
'@media (hover: hover)': colorVars['--color-overlay-hover'],
|
|
108
111
|
},
|
|
109
112
|
},
|
|
@@ -112,7 +115,7 @@ const styles = stylex.create({
|
|
|
112
115
|
// the base secondary color from `label` (last-wins property merge),
|
|
113
116
|
// leaving linked citations to inherit the surrounding text color.
|
|
114
117
|
default: colorVars['--color-text-secondary'],
|
|
115
|
-
':hover': {
|
|
118
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
116
119
|
'@media (hover: hover)': colorVars['--color-text-primary'],
|
|
117
120
|
},
|
|
118
121
|
},
|
|
@@ -137,7 +140,10 @@ const styles = stylex.create({
|
|
|
137
140
|
transitionTimingFunction: easeVars['--ease-standard'],
|
|
138
141
|
},
|
|
139
142
|
numberInteractive: {
|
|
140
|
-
cursor:
|
|
143
|
+
cursor: {
|
|
144
|
+
default: 'pointer',
|
|
145
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
146
|
+
},
|
|
141
147
|
},
|
|
142
148
|
numberHover: {
|
|
143
149
|
backgroundColor: {
|
|
@@ -145,7 +151,7 @@ const styles = stylex.create({
|
|
|
145
151
|
// hover-only conditional replaces the base accent-muted pill from
|
|
146
152
|
// `number` on merge, leaving linked badges transparent.
|
|
147
153
|
default: colorVars['--color-accent-muted'],
|
|
148
|
-
':hover': {
|
|
154
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
149
155
|
'@media (hover: hover)': colorVars['--color-overlay-hover'],
|
|
150
156
|
},
|
|
151
157
|
},
|
|
@@ -55,7 +55,10 @@ import {focusOutlineProps} from '../utils/focusOutline.stylex';
|
|
|
55
55
|
const styles = stylex.create({
|
|
56
56
|
interactive: {
|
|
57
57
|
position: 'relative',
|
|
58
|
-
cursor:
|
|
58
|
+
cursor: {
|
|
59
|
+
default: 'pointer',
|
|
60
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
61
|
+
},
|
|
59
62
|
textDecoration: 'none',
|
|
60
63
|
color: 'inherit',
|
|
61
64
|
},
|
|
@@ -78,7 +81,7 @@ const styles = stylex.create({
|
|
|
78
81
|
},
|
|
79
82
|
hoverOnPointer: {
|
|
80
83
|
'@media (hover: hover)': {
|
|
81
|
-
':hover::after': {
|
|
84
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))::after': {
|
|
82
85
|
backgroundColor: colorVars['--color-overlay-hover'],
|
|
83
86
|
},
|
|
84
87
|
},
|
|
@@ -110,13 +113,13 @@ const styles = stylex.create({
|
|
|
110
113
|
// @media (hover: hover) so touch devices don't get a stuck hover state.
|
|
111
114
|
borderedHoverOnPointer: {
|
|
112
115
|
'@media (hover: hover)': {
|
|
113
|
-
':hover': {
|
|
116
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
114
117
|
borderColor: colorVars['--color-border-emphasized'],
|
|
115
118
|
},
|
|
116
119
|
},
|
|
117
120
|
},
|
|
118
121
|
disabled: {
|
|
119
|
-
cursor: '
|
|
122
|
+
cursor: 'default',
|
|
120
123
|
opacity: 0.5,
|
|
121
124
|
},
|
|
122
125
|
srOnly: {
|
|
@@ -215,7 +215,10 @@ const styles = stylex.create({
|
|
|
215
215
|
transform: 'rotate(90deg)',
|
|
216
216
|
},
|
|
217
217
|
headerCollapsible: {
|
|
218
|
-
cursor:
|
|
218
|
+
cursor: {
|
|
219
|
+
default: 'pointer',
|
|
220
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
221
|
+
},
|
|
219
222
|
userSelect: 'none',
|
|
220
223
|
// Restore a keyboard-only focus ring with the standard token/offset so this
|
|
221
224
|
// disclosure control matches the rest of the system (Collapsible, TabMenu);
|
|
@@ -65,7 +65,10 @@ const styles = stylex.create({
|
|
|
65
65
|
alignItems: 'center',
|
|
66
66
|
justifyContent: 'space-between',
|
|
67
67
|
width: '100%',
|
|
68
|
-
cursor:
|
|
68
|
+
cursor: {
|
|
69
|
+
default: 'pointer',
|
|
70
|
+
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
71
|
+
},
|
|
69
72
|
fontFamily: typographyVars['--font-family-body'],
|
|
70
73
|
fontSize: typeScaleVars['--text-large-size'],
|
|
71
74
|
fontWeight: fontWeightVars['--font-weight-semibold'],
|
|
@@ -84,7 +87,7 @@ const styles = stylex.create({
|
|
|
84
87
|
// button blocks click + keyboard activation; these styles restore the
|
|
85
88
|
// visual affordance that `all: unset` wipes.
|
|
86
89
|
triggerDisabled: {
|
|
87
|
-
cursor: '
|
|
90
|
+
cursor: 'default',
|
|
88
91
|
opacity: 0.5,
|
|
89
92
|
},
|
|
90
93
|
// Chevron indicator
|