@astryxdesign/core 0.4.4 → 0.4.5-canary.013e728
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 +40 -0
- package/dist/AvatarGroup/AvatarGroupOverflow.js +1 -1
- package/dist/BottomSheet/BottomSheet.d.ts +11 -2
- package/dist/BottomSheet/BottomSheet.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheet.js +4 -0
- package/dist/BottomSheet/BottomSheetPanel.d.ts +5 -2
- package/dist/BottomSheet/BottomSheetPanel.d.ts.map +1 -1
- package/dist/BottomSheet/BottomSheetPanel.js +65 -15
- package/dist/BottomSheet/index.d.ts +1 -1
- package/dist/BottomSheet/index.d.ts.map +1 -1
- package/dist/BottomSheet/snapOffsets.d.ts +57 -20
- package/dist/BottomSheet/snapOffsets.d.ts.map +1 -1
- package/dist/BottomSheet/snapOffsets.js +106 -30
- package/dist/BottomSheet/useSheetGestures.d.ts +13 -8
- package/dist/BottomSheet/useSheetGestures.d.ts.map +1 -1
- package/dist/BottomSheet/useSheetGestures.js +160 -64
- package/dist/Breadcrumbs/BreadcrumbItem.js +6 -6
- package/dist/Button/Button.js +5 -5
- package/dist/Calendar/Calendar.d.ts +17 -0
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +55 -15
- package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts +14 -0
- package/dist/Calendar/getStandaloneShortWeekdayNames.d.ts.map +1 -0
- package/dist/Calendar/getStandaloneShortWeekdayNames.js +26 -0
- package/dist/Calendar/hooks/useCalendarConstraints.d.ts +22 -1
- package/dist/Calendar/hooks/useCalendarConstraints.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarConstraints.js +26 -4
- package/dist/Calendar/hooks/useCalendarDays.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarDays.js +14 -10
- package/dist/Calendar/hooks/useCalendarNavigation.d.ts.map +1 -1
- package/dist/Calendar/hooks/useCalendarNavigation.js +8 -4
- package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts +47 -0
- package/dist/Calendar/standaloneShortWeekdayNames.generated.d.ts.map +1 -0
- package/dist/Calendar/standaloneShortWeekdayNames.generated.js +40 -0
- package/dist/Calendar/styles.js +3 -3
- 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 +2 -2
- package/dist/Chat/ChatToolCalls.js +1 -1
- 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/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +9 -0
- package/dist/Citation/Citation.js +3 -3
- package/dist/ClickableCard/ClickableCard.js +2 -2
- package/dist/CommandPalette/CommandPaletteItem.js +1 -1
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +8 -3
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +17 -9
- package/dist/DateRangeInput/DateRangeInput.d.ts +23 -1
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +47 -9
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +18 -10
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +3 -3
- package/dist/Field/FieldLabel.d.ts +2 -1
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +21 -3
- package/dist/Field/InputClearButton.d.ts +2 -1
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +12 -1
- package/dist/Field/inputStyles.stylex.d.ts.map +1 -1
- package/dist/Field/inputStyles.stylex.js +4 -4
- package/dist/FileInput/FileInput.d.ts.map +1 -1
- package/dist/FileInput/FileInput.js +2 -2
- package/dist/FormLayout/FormLayout.d.ts +24 -2
- package/dist/FormLayout/FormLayout.d.ts.map +1 -1
- package/dist/FormLayout/FormLayout.js +7 -2
- package/dist/FormLayout/FormLayoutContext.d.ts +15 -2
- package/dist/FormLayout/FormLayoutContext.d.ts.map +1 -1
- package/dist/FormLayout/FormLayoutContext.js +19 -4
- package/dist/FormLayout/index.d.ts +1 -1
- package/dist/FormLayout/index.d.ts.map +1 -1
- 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/Item/Item.d.ts +9 -1
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +46 -8
- 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 +2 -1
- package/dist/Link/Link.js +4 -4
- package/dist/Markdown/Markdown.d.ts +8 -0
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +31 -3
- package/dist/Markdown/parser.d.ts +14 -2
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +50 -2
- 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 -3
- package/dist/NavItem/navItemStyles.stylex.d.ts +2 -2
- package/dist/NavItem/navItemStyles.stylex.js +2 -2
- package/dist/NavMenu/NavHeadingMenuItem.js +1 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +38 -5
- package/dist/Outline/Outline.js +2 -2
- package/dist/Outline/parseOutlineFromMarkdown.d.ts +2 -0
- package/dist/Outline/parseOutlineFromMarkdown.d.ts.map +1 -1
- package/dist/Outline/parseOutlineFromMarkdown.js +5 -31
- 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/RadioList.d.ts.map +1 -1
- package/dist/RadioList/RadioList.js +12 -1
- package/dist/RadioList/RadioListItem.d.ts +2 -2
- package/dist/RadioList/RadioListItem.d.ts.map +1 -1
- package/dist/RadioList/RadioListItem.js +68 -38
- package/dist/Resizable/ResizeHandle.d.ts.map +1 -1
- package/dist/Resizable/ResizeHandle.js +3 -3
- 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 +6 -1
- package/dist/SelectableCard/SelectableCard.js +1 -1
- package/dist/Selector/Selector.d.ts +26 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +95 -17
- 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.js +1 -1
- package/dist/SideNav/SideNavItem.js +1 -1
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +3 -3
- 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/StatusDot/StatusDot.d.ts +43 -3
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +42 -5
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +9 -0
- package/dist/TabList/TabMenu.js +1 -1
- 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/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.d.ts.map +1 -1
- package/dist/Table/plugins/rowExpansion/useTableRowExpansion.js +7 -2
- 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.js +2 -2
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +6 -1
- package/dist/TextInput/TextInput.d.ts.map +1 -1
- package/dist/TextInput/TextInput.js +6 -1
- package/dist/Thumbnail/Thumbnail.js +1 -1
- package/dist/TimeInput/TimeInput.d.ts.map +1 -1
- package/dist/TimeInput/TimeInput.js +6 -1
- 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/Token/Token.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.js +2 -2
- package/dist/TopNav/TopNavItem.js +2 -2
- package/dist/TopNav/TopNavMegaMenu.js +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +1 -1
- package/dist/TopNav/TopNavMenu.js +2 -2
- package/dist/TreeList/TreeListItem.js +1 -1
- package/dist/astryx.css +85 -60
- 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/useResolvedRequired.d.ts +19 -0
- package/dist/hooks/useResolvedRequired.d.ts.map +1 -0
- package/dist/hooks/useResolvedRequired.js +40 -0
- 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/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/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/plainDate.d.ts +9 -2
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +16 -4
- package/locales/af-ZA.json +958 -0
- package/locales/ar-SA.json +998 -0
- package/locales/ca-ES.json +974 -0
- package/locales/cs-CZ.json +990 -0
- package/locales/da-DK.json +966 -0
- package/locales/de-DE.json +966 -0
- package/locales/el-GR.json +990 -0
- package/locales/en.json +8 -0
- package/locales/es-ES.json +978 -0
- package/locales/fi-FI.json +990 -0
- package/locales/fr-FR.json +928 -0
- package/locales/he-IL.json +990 -0
- package/locales/hu-HU.json +990 -0
- package/locales/it-IT.json +978 -0
- package/locales/ja-JP.json +998 -0
- package/locales/ko-KR.json +990 -0
- package/locales/nl-NL.json +954 -0
- package/locales/no-NO.json +978 -0
- package/locales/pl-PL.json +982 -0
- package/locales/pseudo.json +6 -0
- package/locales/pt-BR.json +982 -0
- package/locales/pt-PT.json +982 -0
- package/locales/ro-RO.json +982 -0
- package/locales/ru-RU.json +990 -0
- package/locales/sr-SP.json +990 -0
- package/locales/sv-SE.json +986 -0
- package/locales/tr-TR.json +990 -0
- package/locales/uk-UA.json +990 -0
- package/locales/vi-VN.json +986 -0
- package/locales/zh-CN.json +998 -0
- package/locales/zh-TW.json +998 -0
- package/package.json +3 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +1 -1
- package/src/Banner/Banner.doc.mjs +2 -0
- package/src/BottomSheet/BottomSheet.doc.mjs +36 -3
- package/src/BottomSheet/BottomSheet.test.tsx +177 -2
- package/src/BottomSheet/BottomSheet.tsx +16 -2
- package/src/BottomSheet/BottomSheetPanel.test.tsx +41 -0
- package/src/BottomSheet/BottomSheetPanel.tsx +95 -15
- package/src/BottomSheet/index.ts +5 -1
- package/src/BottomSheet/snapOffsets.test.ts +114 -47
- package/src/BottomSheet/snapOffsets.ts +119 -33
- package/src/BottomSheet/useSheetGestures.test.ts +113 -15
- package/src/BottomSheet/useSheetGestures.ts +196 -100
- package/src/Breadcrumbs/BreadcrumbItem.tsx +1 -1
- package/src/Button/Button.tsx +7 -7
- package/src/Calendar/Calendar.doc.mjs +16 -0
- package/src/Calendar/Calendar.test.tsx +137 -0
- package/src/Calendar/Calendar.tsx +80 -11
- package/src/Calendar/getStandaloneShortWeekdayNames.test.ts +54 -0
- package/src/Calendar/getStandaloneShortWeekdayNames.ts +38 -0
- package/src/Calendar/hooks/useCalendarConstraints.ts +54 -3
- package/src/Calendar/hooks/useCalendarDays.ts +13 -10
- package/src/Calendar/hooks/useCalendarNavigation.ts +6 -4
- package/src/Calendar/standaloneShortWeekdayNames.generated.ts +50 -0
- package/src/Calendar/styles.ts +3 -3
- 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 +7 -4
- package/src/Chat/ChatToolCalls.tsx +1 -1
- 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/CheckboxInput/CheckboxInput.tsx +6 -0
- package/src/Citation/Citation.tsx +3 -3
- package/src/ClickableCard/ClickableCard.tsx +2 -2
- package/src/CommandPalette/CommandPaletteItem.tsx +1 -1
- package/src/ComplexSelector/ComplexSelector.doc.mjs +10 -0
- package/src/ComplexSelector/ComplexSelector.tsx +8 -5
- package/src/DateInput/DateInput.test.tsx +17 -1
- package/src/DateInput/DateInput.tsx +13 -9
- package/src/DateRangeInput/DateRangeInput.doc.mjs +16 -0
- package/src/DateRangeInput/DateRangeInput.test.tsx +81 -1
- package/src/DateRangeInput/DateRangeInput.tsx +88 -8
- package/src/DateTimeInput/DateTimeInput.tsx +23 -8
- package/src/Dialog/Dialog.test.tsx +24 -0
- package/src/Dialog/Dialog.tsx +3 -0
- package/src/Field/Field.doc.mjs +3 -0
- package/src/Field/FieldLabel.tsx +20 -4
- package/src/Field/InputClearButton.test.tsx +134 -2
- package/src/Field/InputClearButton.tsx +42 -1
- package/src/Field/inputStyles.stylex.ts +16 -12
- package/src/FileInput/FileInput.tsx +5 -4
- package/src/FormLayout/FormLayout.doc.mjs +13 -0
- package/src/FormLayout/FormLayout.test.tsx +181 -4
- package/src/FormLayout/FormLayout.tsx +33 -2
- package/src/FormLayout/FormLayoutContext.ts +22 -7
- package/src/FormLayout/index.ts +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/Item/Item.doc.mjs +1 -0
- package/src/Item/Item.test.tsx +50 -0
- package/src/Item/Item.tsx +41 -2
- 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 +2 -1
- package/src/Link/Link.tsx +4 -4
- package/src/Markdown/Markdown.doc.mjs +3 -0
- package/src/Markdown/Markdown.test.tsx +78 -0
- package/src/Markdown/Markdown.tsx +41 -1
- package/src/Markdown/parser.ts +60 -2
- 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 +8 -5
- package/src/NavItem/navItemStyles.stylex.ts +2 -2
- package/src/NavMenu/NavHeadingMenuItem.tsx +1 -1
- package/src/NumberInput/NumberInput.doc.mjs +24 -0
- package/src/NumberInput/NumberInput.test.tsx +138 -0
- package/src/NumberInput/NumberInput.tsx +44 -6
- package/src/Outline/Outline.doc.mjs +2 -0
- package/src/Outline/Outline.tsx +1 -1
- package/src/Outline/parseOutlineFromMarkdown.ts +10 -40
- 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/RadioList.tsx +9 -1
- package/src/RadioList/RadioListItem.tsx +83 -51
- package/src/Resizable/ResizeHandle.test.tsx +22 -0
- package/src/Resizable/ResizeHandle.tsx +9 -3
- 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 +11 -2
- package/src/SelectableCard/SelectableCard.tsx +1 -1
- package/src/Selector/Selector.doc.mjs +16 -2
- package/src/Selector/Selector.test.tsx +525 -1
- package/src/Selector/Selector.tsx +166 -21
- 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 +2 -2
- package/src/SideNav/SideNavItem.tsx +1 -1
- package/src/Slider/Slider.tsx +11 -1
- 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/StatusDot/StatusDot.doc.mjs +13 -0
- package/src/StatusDot/StatusDot.test.tsx +115 -8
- package/src/StatusDot/StatusDot.tsx +74 -9
- package/src/Switch/Switch.tsx +6 -0
- package/src/TabList/TabMenu.tsx +1 -1
- package/src/Table/TableRow.tsx +4 -4
- package/src/Table/plugins/columnResize/useTableColumnResize.tsx +2 -1
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +2 -1
- package/src/Table/plugins/rowExpansion/useTableRowExpansion.tsx +22 -4
- 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 +2 -2
- package/src/TextArea/TextArea.doc.mjs +1 -1
- package/src/TextArea/TextArea.tsx +3 -1
- package/src/TextInput/TextInput.tsx +3 -1
- package/src/Thumbnail/Thumbnail.tsx +1 -1
- package/src/TimeInput/TimeInput.tsx +3 -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/Token/Token.tsx +1 -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 +1 -1
- package/src/TopNav/TopNavItem.tsx +2 -2
- package/src/TopNav/TopNavMegaMenu.tsx +1 -1
- package/src/TopNav/TopNavMegaMenuItem.tsx +1 -1
- package/src/TopNav/TopNavMenu.tsx +2 -2
- package/src/TreeList/TreeListItem.tsx +1 -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/useResolvedRequired.ts +42 -0
- 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/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/utils/dateParser.test.ts +20 -0
- package/src/utils/dateParser.ts +14 -7
- package/src/utils/plainDate.test.ts +56 -0
- package/src/utils/plainDate.ts +17 -4
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file useCalendarDays.ts
|
|
7
|
-
* @input Uses React useMemo, PlainDate utilities
|
|
7
|
+
* @input Uses React context via use(), useMemo, PlainDate utilities, generated CLDR weekday data
|
|
8
8
|
* @output Exports useCalendarDays hook for generating calendar day grids
|
|
9
9
|
* @position Calendar-specific hook; used by Calendar
|
|
10
10
|
*
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - /packages/core/src/Calendar/hooks/index.ts
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {useMemo} from 'react';
|
|
15
|
+
import {use, useMemo} from 'react';
|
|
16
16
|
import type {DayOfWeek, ISODateString} from '../../utils/dateTypes';
|
|
17
17
|
import {
|
|
18
18
|
type PlainDate,
|
|
@@ -21,6 +21,8 @@ import {
|
|
|
21
21
|
plainDateDayOfWeek,
|
|
22
22
|
plainDateAddDays,
|
|
23
23
|
} from '../../utils/plainDate';
|
|
24
|
+
import {InternationalizationContext} from '../../i18n/InternationalizationContext';
|
|
25
|
+
import {getStandaloneShortWeekdayNames} from '../getStandaloneShortWeekdayNames';
|
|
24
26
|
|
|
25
27
|
/**
|
|
26
28
|
* Represents a single day in the calendar grid.
|
|
@@ -84,6 +86,7 @@ export function useCalendarDays(
|
|
|
84
86
|
options: UseCalendarDaysOptions,
|
|
85
87
|
): UseCalendarDaysReturn {
|
|
86
88
|
const {year, month, weekStartsOn = 0, hasVariableRowCount = false} = options;
|
|
89
|
+
const {locale} = use(InternationalizationContext);
|
|
87
90
|
|
|
88
91
|
// Calculate grid structure
|
|
89
92
|
const gridInfo = useMemo(() => {
|
|
@@ -108,15 +111,15 @@ export function useCalendarDays(
|
|
|
108
111
|
};
|
|
109
112
|
}, [year, month, weekStartsOn, hasVariableRowCount]);
|
|
110
113
|
|
|
111
|
-
//
|
|
114
|
+
// Generated strings avoid Date anchors, so weekday headers cannot shift with
|
|
115
|
+
// the runtime timezone. Keep numeric indices as the rotation source of truth.
|
|
112
116
|
const dayNames = useMemo(() => {
|
|
113
|
-
const names =
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
}, [weekStartsOn]);
|
|
117
|
+
const names = getStandaloneShortWeekdayNames(locale);
|
|
118
|
+
return Array.from(
|
|
119
|
+
{length: 7},
|
|
120
|
+
(_, index) => names[(index + weekStartsOn) % 7],
|
|
121
|
+
);
|
|
122
|
+
}, [locale, weekStartsOn]);
|
|
120
123
|
|
|
121
124
|
// Generate days array
|
|
122
125
|
const days = useMemo(() => {
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
* - /packages/core/src/Calendar/hooks/index.ts
|
|
13
13
|
*/
|
|
14
14
|
|
|
15
|
-
import {useState, useMemo, useCallback} from 'react';
|
|
15
|
+
import {use, useState, useMemo, useCallback} from 'react';
|
|
16
16
|
import type {ISODateString} from '../../utils/dateTypes';
|
|
17
17
|
import {
|
|
18
18
|
type PlainDate,
|
|
@@ -25,6 +25,7 @@ import {
|
|
|
25
25
|
plainDateFormat,
|
|
26
26
|
DATE_FORMAT_MONTH_YEAR,
|
|
27
27
|
} from '../../utils/plainDate';
|
|
28
|
+
import {InternationalizationContext} from '../../i18n';
|
|
28
29
|
|
|
29
30
|
/**
|
|
30
31
|
* Configuration for calendar navigation
|
|
@@ -98,6 +99,7 @@ export function useCalendarNavigation(
|
|
|
98
99
|
onFocusDateChange,
|
|
99
100
|
numberOfMonths = 1,
|
|
100
101
|
} = options;
|
|
102
|
+
const {locale} = use(InternationalizationContext);
|
|
101
103
|
|
|
102
104
|
// Pending focus target after month navigation
|
|
103
105
|
const [pendingFocus, setPendingFocus] = useState<ISODateString | null>(null);
|
|
@@ -135,12 +137,12 @@ export function useCalendarNavigation(
|
|
|
135
137
|
// Format month header
|
|
136
138
|
const monthYearLabel = useMemo(() => {
|
|
137
139
|
if (numberOfMonths === 1) {
|
|
138
|
-
return plainDateFormat(visibleMonths[0], DATE_FORMAT_MONTH_YEAR);
|
|
140
|
+
return plainDateFormat(visibleMonths[0], DATE_FORMAT_MONTH_YEAR, locale);
|
|
139
141
|
}
|
|
140
142
|
return visibleMonths
|
|
141
|
-
.map(m => plainDateFormat(m, DATE_FORMAT_MONTH_YEAR))
|
|
143
|
+
.map(m => plainDateFormat(m, DATE_FORMAT_MONTH_YEAR, locale))
|
|
142
144
|
.join(' – ');
|
|
143
|
-
}, [visibleMonths, numberOfMonths]);
|
|
145
|
+
}, [visibleMonths, numberOfMonths, locale]);
|
|
144
146
|
|
|
145
147
|
// Navigate to previous/next month
|
|
146
148
|
const navigateMonth = useCallback(
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @generated by scripts/generate-cldr-weekdays.mjs from Unicode CLDR 48.2.0.
|
|
5
|
+
* Do not edit by hand. Run `pnpm generate:cldr-weekdays` instead.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
export type StandaloneShortWeekdayNames = readonly [
|
|
9
|
+
string,
|
|
10
|
+
string,
|
|
11
|
+
string,
|
|
12
|
+
string,
|
|
13
|
+
string,
|
|
14
|
+
string,
|
|
15
|
+
string,
|
|
16
|
+
];
|
|
17
|
+
|
|
18
|
+
export const standaloneShortWeekdayNamesByLocale = {
|
|
19
|
+
af: ['So.', 'Ma.', 'Di.', 'Wo.', 'Do.', 'Vr.', 'Sa.'],
|
|
20
|
+
ar: ['أحد', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
|
|
21
|
+
'ar-SA': ['أحد', 'إثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة', 'سبت'],
|
|
22
|
+
ca: ['dg.', 'dl.', 'dt.', 'dc.', 'dj.', 'dv.', 'ds.'],
|
|
23
|
+
cs: ['ne', 'po', 'út', 'st', 'čt', 'pá', 'so'],
|
|
24
|
+
da: ['sø.', 'ma.', 'ti.', 'on.', 'to.', 'fr.', 'lø.'],
|
|
25
|
+
de: ['So.', 'Mo.', 'Di.', 'Mi.', 'Do.', 'Fr.', 'Sa.'],
|
|
26
|
+
el: ['Κυ', 'Δε', 'Τρ', 'Τε', 'Πέ', 'Πα', 'Σά'],
|
|
27
|
+
en: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
|
|
28
|
+
es: ['DO', 'LU', 'MA', 'MI', 'JU', 'VI', 'SA'],
|
|
29
|
+
fi: ['su', 'ma', 'ti', 'ke', 'to', 'pe', 'la'],
|
|
30
|
+
fr: ['di', 'lu', 'ma', 'me', 'je', 've', 'sa'],
|
|
31
|
+
he: ['א׳', 'ב׳', 'ג׳', 'ד׳', 'ה׳', 'ו׳', 'ש׳'],
|
|
32
|
+
hu: ['V', 'H', 'K', 'Sze', 'Cs', 'P', 'Szo'],
|
|
33
|
+
it: ['dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab'],
|
|
34
|
+
ja: ['日', '月', '火', '水', '木', '金', '土'],
|
|
35
|
+
ko: ['일', '월', '화', '수', '목', '금', '토'],
|
|
36
|
+
nl: ['zo', 'ma', 'di', 'wo', 'do', 'vr', 'za'],
|
|
37
|
+
no: ['sø.', 'ma.', 'ti.', 'on.', 'to.', 'fr.', 'lø.'],
|
|
38
|
+
pl: ['nie', 'pon', 'wto', 'śro', 'czw', 'pią', 'sob'],
|
|
39
|
+
pt: ['dom.', 'seg.', 'ter.', 'qua.', 'qui.', 'sex.', 'sáb.'],
|
|
40
|
+
'pt-PT': ['dom.', 'seg.', 'ter.', 'qua.', 'qui.', 'sex.', 'sáb.'],
|
|
41
|
+
ro: ['du.', 'lu.', 'ma.', 'mi.', 'joi', 'vi.', 'sâ.'],
|
|
42
|
+
ru: ['вс', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
|
43
|
+
sr: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
|
|
44
|
+
sv: ['sö', 'må', 'ti', 'on', 'to', 'fr', 'lö'],
|
|
45
|
+
tr: ['Pa', 'Pt', 'Sa', 'Ça', 'Pe', 'Cu', 'Ct'],
|
|
46
|
+
uk: ['нд', 'пн', 'вт', 'ср', 'чт', 'пт', 'сб'],
|
|
47
|
+
vi: ['CN', 'T2', 'T3', 'T4', 'T5', 'T6', 'T7'],
|
|
48
|
+
zh: ['周日', '周一', '周二', '周三', '周四', '周五', '周六'],
|
|
49
|
+
'zh-TW': ['日', '一', '二', '三', '四', '五', '六'],
|
|
50
|
+
} as const satisfies Readonly<Record<string, StandaloneShortWeekdayNames>>;
|
package/src/Calendar/styles.ts
CHANGED
|
@@ -254,7 +254,7 @@ export const dayCellTheme = stylex.create({
|
|
|
254
254
|
backgroundColor: 'transparent',
|
|
255
255
|
backgroundImage: {
|
|
256
256
|
default: null,
|
|
257
|
-
':hover': {
|
|
257
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
258
258
|
'@media (hover: hover)': `linear-gradient(${colorVars['--color-overlay-hover']}, ${colorVars['--color-overlay-hover']})`,
|
|
259
259
|
},
|
|
260
260
|
},
|
|
@@ -281,7 +281,7 @@ export const dayCellTheme = stylex.create({
|
|
|
281
281
|
color: colorVars['--color-on-accent'],
|
|
282
282
|
backgroundImage: {
|
|
283
283
|
default: null,
|
|
284
|
-
':hover': {
|
|
284
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
285
285
|
'@media (hover: hover)': `linear-gradient(${colorVars['--color-overlay-hover']}, ${colorVars['--color-overlay-hover']})`,
|
|
286
286
|
},
|
|
287
287
|
},
|
|
@@ -292,7 +292,7 @@ export const dayCellTheme = stylex.create({
|
|
|
292
292
|
opacity: 0.3,
|
|
293
293
|
backgroundImage: {
|
|
294
294
|
default: 'none',
|
|
295
|
-
':hover': {
|
|
295
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
296
296
|
'@media (hover: hover)': 'none',
|
|
297
297
|
},
|
|
298
298
|
},
|
|
@@ -48,12 +48,36 @@ export const docs = {
|
|
|
48
48
|
description:
|
|
49
49
|
'Inline (horizontal) padding, using the spacing scale. Overrides padding on the inline axis when both are set.',
|
|
50
50
|
},
|
|
51
|
+
{
|
|
52
|
+
name: 'paddingInlineStart',
|
|
53
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
54
|
+
description:
|
|
55
|
+
'Inline-start padding, using the spacing scale (left in LTR, right in RTL). Overrides paddingInline and padding on that edge only.',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
name: 'paddingInlineEnd',
|
|
59
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
60
|
+
description:
|
|
61
|
+
'Inline-end padding, using the spacing scale (right in LTR, left in RTL). Overrides paddingInline and padding on that edge only.',
|
|
62
|
+
},
|
|
51
63
|
{
|
|
52
64
|
name: 'paddingBlock',
|
|
53
65
|
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
54
66
|
description:
|
|
55
67
|
'Block (vertical) padding, using the spacing scale. Overrides padding on the block axis when both are set.',
|
|
56
68
|
},
|
|
69
|
+
{
|
|
70
|
+
name: 'paddingBlockStart',
|
|
71
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
72
|
+
description:
|
|
73
|
+
'Block-start (top) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
name: 'paddingBlockEnd',
|
|
77
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
78
|
+
description:
|
|
79
|
+
'Block-end (bottom) padding, using the spacing scale. Overrides paddingBlock and padding on that edge only.',
|
|
80
|
+
},
|
|
57
81
|
{
|
|
58
82
|
name: 'isInline',
|
|
59
83
|
type: 'boolean',
|
|
@@ -124,11 +148,31 @@ export const docsZh = {
|
|
|
124
148
|
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
125
149
|
description: '行内(水平)内边距,使用间距刻度。两者同时设置时在行内轴上覆盖 padding。',
|
|
126
150
|
},
|
|
151
|
+
{
|
|
152
|
+
name: 'paddingInlineStart',
|
|
153
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
154
|
+
description: '行内起始内边距,使用间距刻度(LTR 中为左侧,RTL 中为右侧)。仅在该边上覆盖 paddingInline 和 padding。',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
name: 'paddingInlineEnd',
|
|
158
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
159
|
+
description: '行内结束内边距,使用间距刻度(LTR 中为右侧,RTL 中为左侧)。仅在该边上覆盖 paddingInline 和 padding。',
|
|
160
|
+
},
|
|
127
161
|
{
|
|
128
162
|
name: 'paddingBlock',
|
|
129
163
|
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
130
164
|
description: '块(垂直)内边距,使用间距刻度。两者同时设置时在块轴上覆盖 padding。',
|
|
131
165
|
},
|
|
166
|
+
{
|
|
167
|
+
name: 'paddingBlockStart',
|
|
168
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
169
|
+
description: '块起始(顶部)内边距,使用间距刻度。仅在该边上覆盖 paddingBlock 和 padding。',
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
name: 'paddingBlockEnd',
|
|
173
|
+
type: '0 | 0.5 | 1 | 1.5 | 2 | 3 | 4 | 5 | 6 | 8 | 10',
|
|
174
|
+
description: '块结束(底部)内边距,使用间距刻度。仅在该边上覆盖 paddingBlock 和 padding。',
|
|
175
|
+
},
|
|
132
176
|
{name: 'isInline', type: 'boolean', description: '使用 inline-flex(适用于文本/图标)。', default: 'false'},
|
|
133
177
|
{name: 'children', type: 'ReactNode', description: '要居中的内容。'},
|
|
134
178
|
{
|
|
@@ -171,7 +215,11 @@ export const docsDense = {
|
|
|
171
215
|
padding:
|
|
172
216
|
'inner padding on all sides (spacing step: 0, 0.5, 1, 1.5, 2, 3, 4, 5, 6, 8, 10)',
|
|
173
217
|
paddingInline: 'inline (horizontal) padding; overrides padding on that axis',
|
|
218
|
+
paddingInlineStart: 'inline-start padding (left in LTR); overrides paddingInline/padding on that edge',
|
|
219
|
+
paddingInlineEnd: 'inline-end padding (right in LTR); overrides paddingInline/padding on that edge',
|
|
174
220
|
paddingBlock: 'block (vertical) padding; overrides padding on that axis',
|
|
221
|
+
paddingBlockStart: 'block-start (top) padding; overrides paddingBlock/padding on that edge',
|
|
222
|
+
paddingBlockEnd: 'block-end (bottom) padding; overrides paddingBlock/padding on that edge',
|
|
175
223
|
isInline: 'use inline-flex for text/icons',
|
|
176
224
|
children: 'content to center',
|
|
177
225
|
xstyle: 'StyleX styles for layout (margins, positioning, sizing); must be stylex.create() value',
|
|
@@ -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,
|
|
@@ -273,7 +273,9 @@ const elevationStyles = stylex.create({
|
|
|
273
273
|
low: {
|
|
274
274
|
boxShadow: {
|
|
275
275
|
default: shadowVars['--shadow-low'],
|
|
276
|
-
':hover
|
|
276
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
277
|
+
'@media (hover: hover)': shadowVars['--shadow-med'],
|
|
278
|
+
},
|
|
277
279
|
},
|
|
278
280
|
':focus-within': {
|
|
279
281
|
boxShadow: shadowVars['--shadow-med'],
|
|
@@ -292,9 +294,10 @@ const elevationStyles = stylex.create({
|
|
|
292
294
|
padding: `calc(var(--_chat-composer-padding) - ${borderVars['--border-width']})`,
|
|
293
295
|
boxShadow: {
|
|
294
296
|
default: 'none',
|
|
295
|
-
':hover:not(:focus-within)':
|
|
296
|
-
|
|
297
|
-
|
|
297
|
+
':hover:not(:focus-within):where(:not(:disabled,[aria-disabled="true"]))':
|
|
298
|
+
{
|
|
299
|
+
'@media (hover: hover)': `inset 0px 0px 0px 2px color-mix(in srgb, ${colorVars['--color-border-emphasized']} 30%, transparent)`,
|
|
300
|
+
},
|
|
298
301
|
':focus-within': `inset 0px 0px 0px 2px ${colorVars['--color-accent-muted']}`,
|
|
299
302
|
},
|
|
300
303
|
},
|
|
@@ -197,7 +197,7 @@ const styles = stylex.create({
|
|
|
197
197
|
paddingInline: spacingVars['--spacing-1'],
|
|
198
198
|
marginInline: `calc(-1 * ${spacingVars['--spacing-1']})`,
|
|
199
199
|
'@media (hover: hover)': {
|
|
200
|
-
':hover': {
|
|
200
|
+
':hover:where(:not(:disabled,[aria-disabled="true"]))': {
|
|
201
201
|
backgroundColor: colorVars['--color-overlay-hover'],
|
|
202
202
|
},
|
|
203
203
|
},
|
|
@@ -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;
|