@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
package/dist/i18n/index.js
CHANGED
|
@@ -10,12 +10,16 @@
|
|
|
10
10
|
* The public API is deliberately small:
|
|
11
11
|
* - InternationalizationProvider — provider component
|
|
12
12
|
* - useTranslator — hook returning a translator function
|
|
13
|
+
* - useLocale — hook returning the provider locale
|
|
14
|
+
* - useCollator — provider-bound locale-aware comparison
|
|
13
15
|
* - useDirection — hook returning the ambient text direction
|
|
14
16
|
* - getLocaleDirection — server-safe locale → direction helper
|
|
15
17
|
* - Translator — interface for consumer-injected runtimes
|
|
16
18
|
*
|
|
17
19
|
* SYNC: When modified, update these files to stay in sync:
|
|
18
20
|
* - /packages/core/src/index.ts
|
|
21
|
+
* - /packages/core/src/i18n/useLocale.ts
|
|
22
|
+
* - /packages/core/src/i18n/useCollator.ts
|
|
19
23
|
* - /packages/core/src/i18n/useDirection.ts
|
|
20
24
|
* - /packages/core/src/i18n/getLocaleDirection.ts
|
|
21
25
|
*/
|
|
@@ -23,5 +27,7 @@
|
|
|
23
27
|
export { InternationalizationProvider } from "./InternationalizationProvider.js";
|
|
24
28
|
export { InternationalizationContext } from "./InternationalizationContext.js";
|
|
25
29
|
export { useTranslator } from "./useTranslator.js";
|
|
30
|
+
export { useLocale } from "./useLocale.js";
|
|
31
|
+
export { useCollator } from "./useCollator.js";
|
|
26
32
|
export { useDirection } from "./useDirection.js";
|
|
27
33
|
export { getLocaleDirection } from "./getLocaleDirection.js";
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Returns an `Intl.Collator` for the active provider locale, memoized across
|
|
3
|
+
* renders where the locale and options object are unchanged.
|
|
4
|
+
*
|
|
5
|
+
* @example
|
|
6
|
+
* ```
|
|
7
|
+
* const collator = useCollator({numeric: true});
|
|
8
|
+
* const sorted = [...items].sort((a, b) => collator.compare(a.name, b.name));
|
|
9
|
+
* ```
|
|
10
|
+
*/
|
|
11
|
+
export declare function useCollator(options?: Intl.CollatorOptions): Intl.Collator;
|
|
12
|
+
//# sourceMappingURL=useCollator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCollator.d.ts","sourceRoot":"","sources":["../../src/i18n/useCollator.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAMzE"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useCollator.ts
|
|
7
|
+
* @input InternationalizationContext (via use()), optional Intl.CollatorOptions
|
|
8
|
+
* @output A memoized Intl.Collator bound to the active locale
|
|
9
|
+
* @position Public provider-aware string-comparison hook. Exported from the
|
|
10
|
+
* i18n barrel for components, sibling packages, and consumers that need
|
|
11
|
+
* locale-correct sorting without constructing a raw Intl.Collator. Raw
|
|
12
|
+
* collator construction stays centralized in this hook.
|
|
13
|
+
*
|
|
14
|
+
* Falls back to `'en'` when called outside a provider, matching the
|
|
15
|
+
* useTranslator/useDirection/useLocale fallback.
|
|
16
|
+
*
|
|
17
|
+
* SYNC: When modified, update:
|
|
18
|
+
* - /packages/core/src/i18n/InternationalizationContext.ts
|
|
19
|
+
* - /packages/core/src/i18n/useLocale.ts
|
|
20
|
+
* - /packages/core/src/i18n/useCollator.doc.mjs
|
|
21
|
+
* - /packages/core/src/i18n/index.ts
|
|
22
|
+
* - /packages/core/src/i18n/__tests__/useCollator.test.tsx
|
|
23
|
+
*/
|
|
24
|
+
import { use, useMemo } from 'react';
|
|
25
|
+
import { InternationalizationContext } from "./InternationalizationContext.js";
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* Returns an `Intl.Collator` for the active provider locale, memoized across
|
|
29
|
+
* renders where the locale and options object are unchanged.
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```
|
|
33
|
+
* const collator = useCollator({numeric: true});
|
|
34
|
+
* const sorted = [...items].sort((a, b) => collator.compare(a.name, b.name));
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
export function useCollator(options) {
|
|
38
|
+
const ctx = use(InternationalizationContext);
|
|
39
|
+
return useMemo(() => new Intl.Collator(ctx.locale, options), [ctx.locale, options]);
|
|
40
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useLocale.d.ts","sourceRoot":"","sources":["../../src/i18n/useLocale.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,SAAS,CAAC;AAEpC,wBAAgB,SAAS,IAAI,MAAM,CAGlC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file useLocale.ts
|
|
7
|
+
* @input InternationalizationContext (via use())
|
|
8
|
+
* @output The active BCP 47 locale tag
|
|
9
|
+
* @position Public provider-aware locale accessor. Exported from the i18n
|
|
10
|
+
* barrel for components, sibling packages, and consumers that must thread
|
|
11
|
+
* the provider locale into pure formatting helpers. Returns `'en'` when
|
|
12
|
+
* called outside a provider, matching useTranslator/useDirection.
|
|
13
|
+
*
|
|
14
|
+
* This is the approved way to read the locale that feeds a formatting helper
|
|
15
|
+
* (`plainDateFormat`, `formatInstant`, chart formatters, …) or `useCollator()`.
|
|
16
|
+
* Reading `InternationalizationContext` directly for just its `locale` field,
|
|
17
|
+
* or reaching for `navigator.language`/a hardcoded literal, bypasses that
|
|
18
|
+
* provider-backed contract.
|
|
19
|
+
*
|
|
20
|
+
* SYNC: When modified, update:
|
|
21
|
+
* - /packages/core/src/i18n/InternationalizationContext.ts
|
|
22
|
+
* - /packages/core/src/i18n/useLocale.doc.mjs
|
|
23
|
+
* - /packages/core/src/i18n/index.ts
|
|
24
|
+
* - /packages/core/src/i18n/__tests__/useLocale.test.tsx
|
|
25
|
+
*/
|
|
26
|
+
import { use } from 'react';
|
|
27
|
+
import { InternationalizationContext } from "./InternationalizationContext.js";
|
|
28
|
+
export function useLocale() {
|
|
29
|
+
const ctx = use(InternationalizationContext);
|
|
30
|
+
return ctx.locale;
|
|
31
|
+
}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file MediaTheme.tsx
|
|
3
|
-
* @input mode prop ("dark" | "light") + children
|
|
3
|
+
* @input mode prop ("dark" | "light" | "auto" | "off") + children
|
|
4
4
|
* @output Wrapper div that creates an inverted theming context
|
|
5
5
|
* @position Theme system component; sibling to Theme
|
|
6
6
|
*
|
|
7
7
|
* Provides semantic token overrides for content rendered on a surface
|
|
8
8
|
* with a different luminance than the page background. Used by Toast,
|
|
9
|
-
*
|
|
9
|
+
* Overlay, and other components that render on inverted surfaces.
|
|
10
10
|
*
|
|
11
11
|
* How it works:
|
|
12
12
|
* 1. Sets `data-astryx-media="dark|light"` — the theme's generated CSS
|
|
@@ -18,24 +18,44 @@
|
|
|
18
18
|
* `onDark.components` / `onLight.components` in defineTheme().
|
|
19
19
|
* 4. Children (Button, Link, Text, etc.) pick up inverted tokens
|
|
20
20
|
* naturally through CSS custom property inheritance
|
|
21
|
+
* 5. `mode="auto"` measures the painted surface and picks a side — or none;
|
|
22
|
+
* `mode="off"` renders the same element with no media attribute, so
|
|
23
|
+
* either can change without remounting children.
|
|
21
24
|
*
|
|
22
25
|
* @example
|
|
23
26
|
* ```
|
|
24
27
|
* <div style={{ backgroundColor: 'var(--color-background-inverted)' }}>
|
|
25
|
-
* <MediaTheme mode="
|
|
28
|
+
* <MediaTheme mode="auto">
|
|
26
29
|
* <Button label="Undo" variant="ghost" />
|
|
27
30
|
* </MediaTheme>
|
|
28
31
|
* </div>
|
|
29
32
|
* ```
|
|
30
33
|
*/
|
|
31
34
|
import * as React from 'react';
|
|
35
|
+
/** Surface luminance context, or `"off"` for no media context at all. */
|
|
36
|
+
export type MediaThemeMode = 'dark' | 'light' | 'auto' | 'off';
|
|
32
37
|
export interface MediaThemeProps {
|
|
33
38
|
/**
|
|
34
39
|
* The surface luminance context for children.
|
|
35
40
|
* - `"dark"` — children are on a dark background (get light text/icons)
|
|
36
41
|
* - `"light"` — children are on a light background (get dark text/icons)
|
|
42
|
+
* - `"auto"` — measure the painted surface and use whichever side reads
|
|
43
|
+
* better on it, or no media context at all when the surface's ambient
|
|
44
|
+
* text already reads better than either
|
|
45
|
+
* - `"off"` — children keep the ambient theme; the surface needs no
|
|
46
|
+
* inversion
|
|
37
47
|
*/
|
|
38
|
-
mode:
|
|
48
|
+
mode: MediaThemeMode;
|
|
49
|
+
/**
|
|
50
|
+
* Which side `mode="auto"` uses when the surface cannot be measured: on the
|
|
51
|
+
* server, on the first client frame, and whenever the backdrop is not
|
|
52
|
+
* knowable from CSS — most often a `background-image`, whose pixels need
|
|
53
|
+
* sampling (see `useImageMode`) rather than a computed style.
|
|
54
|
+
*
|
|
55
|
+
* Ignored unless `mode="auto"`.
|
|
56
|
+
* @default "dark"
|
|
57
|
+
*/
|
|
58
|
+
fallback?: 'dark' | 'light';
|
|
39
59
|
/** Content to render in the media context */
|
|
40
60
|
children: React.ReactNode;
|
|
41
61
|
}
|
|
@@ -46,7 +66,7 @@ export interface MediaThemeProps {
|
|
|
46
66
|
* attribute to apply inverted tokens. Parent component overrides flow
|
|
47
67
|
* through unchanged; only tokens change for the surface context.
|
|
48
68
|
*/
|
|
49
|
-
export declare function MediaTheme({ mode, children, }: MediaThemeProps): React.ReactElement;
|
|
69
|
+
export declare function MediaTheme({ mode, fallback, children, }: MediaThemeProps): React.ReactElement;
|
|
50
70
|
export declare namespace MediaTheme {
|
|
51
71
|
var displayName: string;
|
|
52
72
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaTheme.d.ts","sourceRoot":"","sources":["../../src/theme/MediaTheme.tsx"],"names":[],"mappings":"AAIA
|
|
1
|
+
{"version":3,"file":"MediaTheme.d.ts","sourceRoot":"","sources":["../../src/theme/MediaTheme.tsx"],"names":[],"mappings":"AAIA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AAEH,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAgB/B,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAE/D,MAAM,WAAW,eAAe;IAC9B;;;;;;;;;OASG;IACH,IAAI,EAAE,cAAc,CAAC;IACrB;;;;;;;;OAQG;IACH,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC5B,6CAA6C;IAC7C,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,QAAiB,EACjB,QAAQ,GACT,EAAE,eAAe,GAAG,KAAK,CAAC,YAAY,CAkBtC;yBAtBe,UAAU"}
|
package/dist/theme/MediaTheme.js
CHANGED
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file MediaTheme.tsx
|
|
7
|
-
* @input mode prop ("dark" | "light") + children
|
|
7
|
+
* @input mode prop ("dark" | "light" | "auto" | "off") + children
|
|
8
8
|
* @output Wrapper div that creates an inverted theming context
|
|
9
9
|
* @position Theme system component; sibling to Theme
|
|
10
10
|
*
|
|
11
11
|
* Provides semantic token overrides for content rendered on a surface
|
|
12
12
|
* with a different luminance than the page background. Used by Toast,
|
|
13
|
-
*
|
|
13
|
+
* Overlay, and other components that render on inverted surfaces.
|
|
14
14
|
*
|
|
15
15
|
* How it works:
|
|
16
16
|
* 1. Sets `data-astryx-media="dark|light"` — the theme's generated CSS
|
|
@@ -22,22 +22,29 @@
|
|
|
22
22
|
* `onDark.components` / `onLight.components` in defineTheme().
|
|
23
23
|
* 4. Children (Button, Link, Text, etc.) pick up inverted tokens
|
|
24
24
|
* naturally through CSS custom property inheritance
|
|
25
|
+
* 5. `mode="auto"` measures the painted surface and picks a side — or none;
|
|
26
|
+
* `mode="off"` renders the same element with no media attribute, so
|
|
27
|
+
* either can change without remounting children.
|
|
25
28
|
*
|
|
26
29
|
* @example
|
|
27
30
|
* ```
|
|
28
31
|
* <div style={{ backgroundColor: 'var(--color-background-inverted)' }}>
|
|
29
|
-
* <MediaTheme mode="
|
|
32
|
+
* <MediaTheme mode="auto">
|
|
30
33
|
* <Button label="Undo" variant="ghost" />
|
|
31
34
|
* </MediaTheme>
|
|
32
35
|
* </div>
|
|
33
36
|
* ```
|
|
34
37
|
*/
|
|
35
38
|
import * as React from 'react';
|
|
39
|
+
import { useRef } from 'react';
|
|
36
40
|
import * as stylex from '@stylexjs/stylex';
|
|
37
41
|
import "./tokens.stylex.js";
|
|
38
42
|
import { colorVars } from "./tokens.stylex.js";
|
|
39
43
|
import { dataAttr } from "../naming.js";
|
|
44
|
+
import { useAutoMediaMode } from "../hooks/useAutoMediaMode.js";
|
|
40
45
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
46
|
+
/** Surface luminance context, or `"off"` for no media context at all. */
|
|
47
|
+
|
|
41
48
|
/**
|
|
42
49
|
* Inverted surface theming context.
|
|
43
50
|
*
|
|
@@ -47,13 +54,31 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
47
54
|
*/
|
|
48
55
|
export function MediaTheme({
|
|
49
56
|
mode,
|
|
57
|
+
fallback = 'dark',
|
|
50
58
|
children
|
|
51
59
|
}) {
|
|
60
|
+
const ref = useRef(null);
|
|
61
|
+
// Measures this element's PARENT — see useAutoMediaMode. `display: contents`
|
|
62
|
+
// means the parent is the element that actually paints the surface.
|
|
63
|
+
const detected = useAutoMediaMode(ref, mode === 'auto');
|
|
64
|
+
const resolved = mode === 'auto' ? detected ?? fallback : mode;
|
|
65
|
+
|
|
66
|
+
// "off" keeps the element — and therefore the React tree and the DOM
|
|
67
|
+
// structure — identical, so a surface can switch its media context on and
|
|
68
|
+
// off without remounting its children.
|
|
52
69
|
return /*#__PURE__*/_jsx("div", {
|
|
53
|
-
|
|
70
|
+
ref: ref,
|
|
71
|
+
...(resolved === 'off' ? null : {
|
|
72
|
+
[dataAttr('media')]: resolved
|
|
73
|
+
}),
|
|
54
74
|
...{
|
|
55
|
-
|
|
56
|
-
|
|
75
|
+
0: {
|
|
76
|
+
className: "xjp7ctv"
|
|
77
|
+
},
|
|
78
|
+
1: {
|
|
79
|
+
className: "xjp7ctv x1tgivj0"
|
|
80
|
+
}
|
|
81
|
+
}[!!(resolved !== 'off') << 0],
|
|
57
82
|
children: children
|
|
58
83
|
});
|
|
59
84
|
}
|
|
@@ -62,6 +62,11 @@ export type TokenValue = string | [light: string, dark: string];
|
|
|
62
62
|
* to the component selector. Supported pseudo-classes include `:hover`,
|
|
63
63
|
* `:focus-visible`, `:active`, `:checked`, `:disabled`, etc.
|
|
64
64
|
*
|
|
65
|
+
* A `:hover` override describes the ENABLED control: it is emitted with a
|
|
66
|
+
* guard that keeps it off disabled and `aria-disabled` elements, which
|
|
67
|
+
* `:hover` would otherwise still match. Style the disabled state through
|
|
68
|
+
* `:disabled` instead.
|
|
69
|
+
*
|
|
65
70
|
* @example
|
|
66
71
|
* ```ts
|
|
67
72
|
* {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defineTheme.d.ts","sourceRoot":"","sources":["../../src/theme/defineTheme.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAC7D,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAC1D,OAAO,KAAK,EAAC,gBAAgB,EAAa,MAAM,SAAS,CAAC;AAC1D,OAAO,EAEL,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACrB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACL,aAAa,EACb,eAAe,EACf,YAAY,EACZ,cAAc,EACd,aAAa,EACb,cAAc,EACd,cAAc,EACd,gBAAgB,EAChB,YAAY,EACZ,kBAAkB,EAClB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AAMzB,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAoB,KAAK,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAmB,KAAK,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAE3E,OAAO,KAAK,EAAC,eAAe,EAAC,MAAM,gBAAgB,CAAC;AAEpD,OAAO,KAAK,EAAC,qBAAqB,EAAC,MAAM,UAAU,CAAC;AAQpD,wCAAwC;AACxC,MAAM,MAAM,aAAa,GACrB,MAAM,OAAO,aAAa,GAC1B,MAAM,OAAO,eAAe,GAC5B,MAAM,OAAO,YAAY,GACzB,MAAM,OAAO,cAAc,GAC3B,MAAM,OAAO,aAAa,GAC1B,MAAM,OAAO,cAAc,GAC3B,MAAM,OAAO,cAAc,GAC3B,MAAM,OAAO,gBAAgB,GAC7B,MAAM,OAAO,YAAY,GACzB,MAAM,OAAO,kBAAkB,GAC/B,MAAM,OAAO,gBAAgB,GAC7B,MAAM,OAAO,kBAAkB,GAC/B,MAAM,OAAO,iBAAiB,CAAC;AAEnC,0DAA0D;AAC1D,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,eAAe,CAAC;AAExD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;AAEhE
|
|
1
|
+
{"version":3,"file":"defineTheme.d.ts","sourceRoot":"","sources":["../../src/theme/defineTheme.ts"],"names":[],"mappings":"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"}
|
|
@@ -69,6 +69,11 @@ import { deepMergeComponents } from "./mergeComponents.js";
|
|
|
69
69
|
* to the component selector. Supported pseudo-classes include `:hover`,
|
|
70
70
|
* `:focus-visible`, `:active`, `:checked`, `:disabled`, etc.
|
|
71
71
|
*
|
|
72
|
+
* A `:hover` override describes the ENABLED control: it is emitted with a
|
|
73
|
+
* guard that keeps it off disabled and `aria-disabled` elements, which
|
|
74
|
+
* `:hover` would otherwise still match. Style the disabled state through
|
|
75
|
+
* `:disabled` instead.
|
|
76
|
+
*
|
|
72
77
|
* @example
|
|
73
78
|
* ```ts
|
|
74
79
|
* {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"derivedVarRegistry.d.ts","sourceRoot":"","sources":["../../src/theme/derivedVarRegistry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,
|
|
1
|
+
{"version":3,"file":"derivedVarRegistry.d.ts","sourceRoot":"","sources":["../../src/theme/derivedVarRegistry.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,eAAe;IAC9B,2EAA2E;IAC3E,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,iFAAiF;IACjF,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CA8ChE,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,eAAe,EAAE,CAMnB"}
|
|
@@ -77,6 +77,13 @@ export const derivedVarRegistry = {
|
|
|
77
77
|
property: 'borderRadius',
|
|
78
78
|
vars: ['--_hovercard-radius']
|
|
79
79
|
}],
|
|
80
|
+
'number-input': [{
|
|
81
|
+
property: 'padding',
|
|
82
|
+
expand: 'container'
|
|
83
|
+
}, {
|
|
84
|
+
property: 'borderRadius',
|
|
85
|
+
vars: ['--_field-radius']
|
|
86
|
+
}],
|
|
80
87
|
popover: [{
|
|
81
88
|
property: 'borderRadius',
|
|
82
89
|
vars: ['--_popover-radius']
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generateThemeRules.d.ts","sourceRoot":"","sources":["../../src/theme/generateThemeRules.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"generateThemeRules.d.ts","sourceRoot":"","sources":["../../src/theme/generateThemeRules.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,eAAe,CAAC;AAgGhD;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,kFAAkF;IAClF,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;CACnB;AA8LD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,EAAE,CAoChE;AAkRD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,YAAY,GAAG,eAAe,CAe5E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4E9D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,YAAY,GAAG,cAAc,CA2BpE"}
|
|
@@ -45,12 +45,30 @@ function componentClassSelector(component, suffix) {
|
|
|
45
45
|
return `.${classPrefix}-${component}${suffix}`;
|
|
46
46
|
}
|
|
47
47
|
|
|
48
|
+
/**
|
|
49
|
+
* Guard appended to a themed `:hover` rule so it cannot match a disabled
|
|
50
|
+
* element.
|
|
51
|
+
*
|
|
52
|
+
* A theme authoring `':hover': {backgroundColor: …}` is describing the
|
|
53
|
+
* enabled control; `:hover` on its own would paint that background on a
|
|
54
|
+
* disabled one too, because browsers suppress a disabled control's events,
|
|
55
|
+
* not its hover styling. `:where()` contributes no specificity, so a themed
|
|
56
|
+
* hover rule still weighs exactly what it weighed before.
|
|
57
|
+
*
|
|
58
|
+
* Mirrors the `@astryx/no-hover-on-disabled` lint rule, which enforces the
|
|
59
|
+
* same guard on the components' own StyleX styles.
|
|
60
|
+
*/
|
|
61
|
+
const HOVER_DISABLED_GUARD = ':where(:not(:disabled,[aria-disabled="true"]))';
|
|
62
|
+
|
|
48
63
|
/**
|
|
49
64
|
* Append a pseudo-class to every selector in a comma-separated selector list.
|
|
50
65
|
*
|
|
51
66
|
* Selector helpers may emit comma-separated lists. CSS does not distribute a
|
|
52
67
|
* trailing pseudo over selector lists, so `${list}:hover` would only target the
|
|
53
68
|
* final selector. Rewrite each item so the pseudo applies to all of them.
|
|
69
|
+
*
|
|
70
|
+
* A `:hover` pseudo also picks up the disabled guard. A pseudo-ELEMENT has to
|
|
71
|
+
* end the selector, so the guard is spliced in before it.
|
|
54
72
|
*/
|
|
55
73
|
function appendPseudoToSelectorList(selector, pseudo) {
|
|
56
74
|
const parts = [];
|
|
@@ -68,7 +86,17 @@ function appendPseudoToSelectorList(selector, pseudo) {
|
|
|
68
86
|
}
|
|
69
87
|
}
|
|
70
88
|
parts.push(selector.slice(start).trim());
|
|
71
|
-
|
|
89
|
+
const guarded = guardHoverPseudo(pseudo);
|
|
90
|
+
return parts.map(part => `${part}${guarded}`).join(', ');
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/** Insert the disabled guard into a `:hover` pseudo, keeping any pseudo-element last. */
|
|
94
|
+
function guardHoverPseudo(pseudo) {
|
|
95
|
+
if (!/^:hover(?![-\w])/.test(pseudo) || pseudo.includes('[aria-disabled')) {
|
|
96
|
+
return pseudo;
|
|
97
|
+
}
|
|
98
|
+
const pseudoElement = pseudo.indexOf('::');
|
|
99
|
+
return pseudoElement === -1 ? pseudo + HOVER_DISABLED_GUARD : pseudo.slice(0, pseudoElement) + HOVER_DISABLED_GUARD + pseudo.slice(pseudoElement);
|
|
72
100
|
}
|
|
73
101
|
|
|
74
102
|
// =============================================================================
|
|
@@ -96,13 +124,40 @@ function toKebabCase(str) {
|
|
|
96
124
|
|
|
97
125
|
/** Padding properties that trigger container token mapping */
|
|
98
126
|
const PADDING_PROPS = new Set(['padding', 'paddingBlock', 'paddingInline', 'paddingBlockStart', 'paddingBlockEnd', 'paddingInlineStart', 'paddingInlineEnd']);
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Physical block-axis longhands, and the logical longhand each one *is* in
|
|
130
|
+
* every horizontal writing mode. Normalizing them costs no direction
|
|
131
|
+
* assumption, which is why they can join the container expansion.
|
|
132
|
+
*
|
|
133
|
+
* `paddingLeft`/`paddingRight` are deliberately absent. They are
|
|
134
|
+
* direction-relative — left is inline-start in LTR and inline-end in RTL — and
|
|
135
|
+
* the expansion's tokens are consumed by logical properties, so mapping them
|
|
136
|
+
* would put the padding on the opposite edge in RTL. They keep their physical
|
|
137
|
+
* meaning and land on the element as `padding-left`/`padding-right`; the cost
|
|
138
|
+
* is that a component's internals cannot see them.
|
|
139
|
+
*/
|
|
140
|
+
const PHYSICAL_BLOCK_PADDING_PROPS = {
|
|
141
|
+
paddingTop: 'paddingBlockStart',
|
|
142
|
+
paddingBottom: 'paddingBlockEnd'
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Every padding spelling the container expansion consumes. Kept separate from
|
|
147
|
+
* PADDING_PROPS, which also routes longhands to `vars`-style derived entries —
|
|
148
|
+
* those carry one value for the whole box, so a single physical edge must not
|
|
149
|
+
* reach them.
|
|
150
|
+
*/
|
|
151
|
+
const CONTAINER_PADDING_PROPS = new Set([...PADDING_PROPS, ...Object.keys(PHYSICAL_BLOCK_PADDING_PROPS)]);
|
|
99
152
|
/**
|
|
100
153
|
* Parse CSS padding shorthand/longhand into block/inline values.
|
|
101
|
-
* Supports 1-3 value shorthands and
|
|
154
|
+
* Supports 1-3 value shorthands, logical properties, and the physical block
|
|
155
|
+
* longhands normalized by PHYSICAL_BLOCK_PADDING_PROPS.
|
|
102
156
|
*/
|
|
103
157
|
function parsePadding(props) {
|
|
104
158
|
const result = {};
|
|
105
|
-
for (const [
|
|
159
|
+
for (const [rawProp, value] of props) {
|
|
160
|
+
const prop = PHYSICAL_BLOCK_PADDING_PROPS[rawProp] ?? rawProp;
|
|
106
161
|
switch (prop) {
|
|
107
162
|
case 'padding':
|
|
108
163
|
{
|
|
@@ -311,13 +366,19 @@ function generateComponentRules(components, parts) {
|
|
|
311
366
|
}
|
|
312
367
|
}
|
|
313
368
|
}
|
|
369
|
+
// A physical block longhand reaches the container expansion only. It
|
|
370
|
+
// names one edge, so it must not feed a `vars` entry above, which
|
|
371
|
+
// carries the padding for the whole box.
|
|
372
|
+
if (prop in PHYSICAL_BLOCK_PADDING_PROPS && getDerivedVars(component, 'padding').some(e => e.expand === 'container')) {
|
|
373
|
+
containerExpanded = true;
|
|
374
|
+
}
|
|
314
375
|
}
|
|
315
376
|
|
|
316
377
|
// Container padding expansion: replace padding props with
|
|
317
378
|
// component-scoped container tokens for layout integration.
|
|
318
379
|
if (containerExpanded) {
|
|
319
|
-
const paddingProps = props.filter(([p]) =>
|
|
320
|
-
const nonPaddingProps = props.filter(([p]) => !
|
|
380
|
+
const paddingProps = props.filter(([p]) => CONTAINER_PADDING_PROPS.has(p));
|
|
381
|
+
const nonPaddingProps = props.filter(([p]) => !CONTAINER_PADDING_PROPS.has(p));
|
|
321
382
|
const parsed = parsePadding(paddingProps);
|
|
322
383
|
const containerTokens = expandContainerPadding(component, parsed);
|
|
323
384
|
finalProps = [...nonPaddingProps, ...containerTokens];
|
package/dist/theme/index.d.ts
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
export { Theme } from './Theme';
|
|
14
14
|
export { MediaTheme } from './MediaTheme';
|
|
15
|
-
export type { MediaThemeProps } from './MediaTheme';
|
|
15
|
+
export type { MediaThemeProps, MediaThemeMode } from './MediaTheme';
|
|
16
16
|
export { defineTheme, generateThemeCSS, generateOnMediaCSS, generateThemeRules, generateThemeRulesSplit, type ThemeCSSOutput, type ThemeRulesSplit, isDefinedTheme, tokenDefaults, } from './defineTheme';
|
|
17
17
|
export { registerTheme, getRegisteredTheme, getRegisteredThemes, resetThemes, } from './themeRegistry';
|
|
18
18
|
export type { DefineThemeInput, DefinedTheme, CoreTokenName, TokenName, TokenValue, ComponentStyleMap, StyleOverrides, } from './defineTheme';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"AAIA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AACxC,YAAY,EAAC,eAAe,EAAC,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/theme/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* @file syntax/index.ts
|
|
3
3
|
* @position Re-exports for the syntax theme subsystem
|
|
4
|
+
*
|
|
5
|
+
* No `'use client'` here on purpose. Most of what this barrel exports is data
|
|
6
|
+
* (presets, token defaults) or pure functions, and a directive on the barrel
|
|
7
|
+
* turns every export into a client reference for a server importer — so
|
|
8
|
+
* `dracula.tokens` reads back `undefined` instead of colors. `SyntaxTheme.tsx`
|
|
9
|
+
* carries its own directive, which is what the provider actually needs.
|
|
4
10
|
*/
|
|
5
11
|
export { syntaxTokenDefaults } from './tokens';
|
|
6
12
|
export type { SyntaxTokenName } from './tokens';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/syntax/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/theme/syntax/index.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAC,mBAAmB,EAAC,MAAM,UAAU,CAAC;AAC7C,YAAY,EAAC,eAAe,EAAC,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAC,iBAAiB,EAAE,gBAAgB,EAAE,gBAAgB,EAAC,MAAM,qBAAqB,CAAC;AAC1F,YAAY,EACV,qBAAqB,EACrB,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAC,WAAW,EAAE,cAAc,EAAC,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAC,oBAAoB,EAAC,MAAM,eAAe,CAAC;AAGxD,OAAO,EACL,UAAU,EACV,OAAO,EACP,OAAO,EACP,IAAI,EACJ,UAAU,EACV,eAAe,EACf,UAAU,EACV,WAAW,EACX,cAAc,EACd,QAAQ,EACR,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,WAAW,CAAC"}
|
|
@@ -1,11 +1,16 @@
|
|
|
1
1
|
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
2
|
|
|
3
|
-
'use client';
|
|
4
|
-
|
|
5
3
|
/**
|
|
6
4
|
* @file syntax/index.ts
|
|
7
5
|
* @position Re-exports for the syntax theme subsystem
|
|
6
|
+
*
|
|
7
|
+
* No `'use client'` here on purpose. Most of what this barrel exports is data
|
|
8
|
+
* (presets, token defaults) or pure functions, and a directive on the barrel
|
|
9
|
+
* turns every export into a client reference for a server importer — so
|
|
10
|
+
* `dracula.tokens` reads back `undefined` instead of colors. `SyntaxTheme.tsx`
|
|
11
|
+
* carries its own directive, which is what the provider actually needs.
|
|
8
12
|
*/
|
|
13
|
+
|
|
9
14
|
export { syntaxTokenDefaults } from "./tokens.js";
|
|
10
15
|
export { defineSyntaxTheme, syntaxThemeStyle, syntaxThemeToCSS } from "./defineSyntaxTheme.js";
|
|
11
16
|
export { SyntaxTheme, useSyntaxTheme } from "./SyntaxTheme.js";
|
|
@@ -9,12 +9,13 @@
|
|
|
9
9
|
* - /packages/core/src/utils/index.ts
|
|
10
10
|
*/
|
|
11
11
|
import { type PlainDate } from './plainDate';
|
|
12
|
+
import type { Locale } from '../i18n/types';
|
|
12
13
|
export { plainDateFromISO as parseISO, plainDateToISO as dateToISO, } from './plainDate';
|
|
13
14
|
/**
|
|
14
|
-
* Detects if the
|
|
15
|
+
* Detects if the locale uses day-first date format (DD/MM/YYYY).
|
|
15
16
|
* US and a few others use month-first (MM/DD/YYYY).
|
|
16
17
|
*/
|
|
17
|
-
export declare function isLocaleDayFirst(): boolean;
|
|
18
|
+
export declare function isLocaleDayFirst(locale?: Locale): boolean;
|
|
18
19
|
/**
|
|
19
20
|
* Parses user input into a PlainDate.
|
|
20
21
|
*
|
|
@@ -29,5 +30,5 @@ export declare function isLocaleDayFirst(): boolean;
|
|
|
29
30
|
*
|
|
30
31
|
* @returns PlainDate if valid, null if unparseable
|
|
31
32
|
*/
|
|
32
|
-
export declare function parseDateInput(input: string): PlainDate | null;
|
|
33
|
+
export declare function parseDateInput(input: string, locale?: Locale): PlainDate | null;
|
|
33
34
|
//# sourceMappingURL=dateParser.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateParser.d.ts","sourceRoot":"","sources":["../../src/utils/dateParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAqC,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"dateParser.d.ts","sourceRoot":"","sources":["../../src/utils/dateParser.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAAC,KAAK,SAAS,EAAqC,MAAM,aAAa,CAAC;AAC/E,OAAO,KAAK,EAAC,MAAM,EAAC,MAAM,eAAe,CAAC;AAE1C,OAAO,EACL,gBAAgB,IAAI,QAAQ,EAC5B,cAAc,IAAI,SAAS,GAC5B,MAAM,aAAa,CAAC;AAErB;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAOzD;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,MAAM,GACd,SAAS,GAAG,IAAI,CAsGlB"}
|
package/dist/utils/dateParser.js
CHANGED
|
@@ -15,11 +15,11 @@ import { plainDateCreate, plainDateFromDate } from "./plainDate.js";
|
|
|
15
15
|
export { plainDateFromISO as parseISO, plainDateToISO as dateToISO } from "./plainDate.js";
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
|
-
* Detects if the
|
|
18
|
+
* Detects if the locale uses day-first date format (DD/MM/YYYY).
|
|
19
19
|
* US and a few others use month-first (MM/DD/YYYY).
|
|
20
20
|
*/
|
|
21
|
-
export function isLocaleDayFirst() {
|
|
22
|
-
const parts = new Intl.DateTimeFormat().formatToParts(new Date(2000, 0, 15));
|
|
21
|
+
export function isLocaleDayFirst(locale) {
|
|
22
|
+
const parts = new Intl.DateTimeFormat(locale).formatToParts(new Date(2000, 0, 15));
|
|
23
23
|
const dayIndex = parts.findIndex(p => p.type === 'day');
|
|
24
24
|
const monthIndex = parts.findIndex(p => p.type === 'month');
|
|
25
25
|
return dayIndex < monthIndex;
|
|
@@ -39,7 +39,7 @@ export function isLocaleDayFirst() {
|
|
|
39
39
|
*
|
|
40
40
|
* @returns PlainDate if valid, null if unparseable
|
|
41
41
|
*/
|
|
42
|
-
export function parseDateInput(input) {
|
|
42
|
+
export function parseDateInput(input, locale) {
|
|
43
43
|
const trimmed = input.trim();
|
|
44
44
|
if (!trimmed) {
|
|
45
45
|
return null;
|
|
@@ -102,14 +102,14 @@ export function parseDateInput(input) {
|
|
|
102
102
|
if (sep1 !== sep2) {
|
|
103
103
|
return null;
|
|
104
104
|
}
|
|
105
|
-
return parseNumericDate(+first, +second, +year);
|
|
105
|
+
return parseNumericDate(+first, +second, +year, locale);
|
|
106
106
|
}
|
|
107
107
|
|
|
108
108
|
// 5. Try numeric formats WITHOUT year (defaults to current year)
|
|
109
109
|
const numericNoYearMatch = trimmed.match(/^(\d{1,2})[-/.](\d{1,2})$/);
|
|
110
110
|
if (numericNoYearMatch) {
|
|
111
111
|
const [, first, second] = numericNoYearMatch;
|
|
112
|
-
return parseNumericDate(+first, +second, currentYear);
|
|
112
|
+
return parseNumericDate(+first, +second, currentYear, locale);
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
// 6. Fall back to native Date parsing for other formats.
|
|
@@ -132,7 +132,7 @@ export function parseDateInput(input) {
|
|
|
132
132
|
}
|
|
133
133
|
return null;
|
|
134
134
|
}
|
|
135
|
-
function parseNumericDate(first, second, year) {
|
|
135
|
+
function parseNumericDate(first, second, year, locale) {
|
|
136
136
|
let day;
|
|
137
137
|
let month;
|
|
138
138
|
if (first > 12 && second <= 12) {
|
|
@@ -144,7 +144,7 @@ function parseNumericDate(first, second, year) {
|
|
|
144
144
|
} else if (first > 12 && second > 12) {
|
|
145
145
|
return null;
|
|
146
146
|
} else {
|
|
147
|
-
if (isLocaleDayFirst()) {
|
|
147
|
+
if (isLocaleDayFirst(locale)) {
|
|
148
148
|
day = first;
|
|
149
149
|
month = second;
|
|
150
150
|
} else {
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
export type { SizeValue } from './types';
|
|
8
8
|
export type { ISODateString, DayOfWeek, PlainDate, DateRange } from './dateTypes';
|
|
9
9
|
export { parseDateInput, dateToISO, parseISO, isLocaleDayFirst, } from './dateParser';
|
|
10
|
-
export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate';
|
|
10
|
+
export { plainDateCreate, plainDateFromISO, plainDateToISO, plainDateToDate, plainDateFromDate, plainDateToday, getDaysInMonth, plainDateDayOfWeek, plainDateAddMonths, plainDateAddDays, plainDateToInstant, plainDateFromInstant, plainDateIsBefore, plainDateIsAfter, plainDateIsEqual, plainDateMax, plainDateMin, plainDateIsInRange, plainDateSetFirstOfMonth, plainDateSetStartOfWeek, plainDateSetEndOfWeekExclusive, plainDateGetWeekNumber, plainDateFormat, formatSharedDate, DATE_FORMAT_WITH_WEEKDAY, DATE_FORMAT_SHORT_WITH_WEEKDAY, DATE_FORMAT_LONG, DATE_FORMAT_MONTH_YEAR, DATE_FORMAT_MONTH_ONLY, DATE_FORMAT_WEEKDAY_ONLY, DATE_FORMAT_SHORT, DATE_FORMAT_SHORT_WITH_YEAR, SHARED_DATE_FORMAT_OPTIONS, } from './plainDate';
|
|
11
11
|
export type { SharedDateFormat } from './plainDate';
|
|
12
12
|
export { parseISOTime, formatISOTime, formatDisplayTime12h, formatDisplayTime24h, parseTimeInput, compareTime, isTimeInRange, clampTime, adjustTime, createISOTimeString, } from './timeParser';
|
|
13
13
|
export type { ISOTimeString, ParsedTime } from './timeParser';
|