@astryxdesign/core 0.5.0 → 0.5.1-canary.f64186a
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 +222 -0
- package/dist/AlertDialog/AlertDialog.d.ts +1 -1
- package/dist/AlertDialog/AlertDialog.d.ts.map +1 -1
- package/dist/AlertDialog/AlertDialog.js +45 -20
- package/dist/AspectRatio/AspectRatio.d.ts +6 -6
- package/dist/Avatar/Avatar.d.ts +25 -1
- package/dist/Avatar/Avatar.d.ts.map +1 -1
- package/dist/Avatar/Avatar.js +43 -9
- package/dist/Avatar/index.d.ts +2 -2
- package/dist/Avatar/index.d.ts.map +1 -1
- package/dist/Avatar/index.js +1 -1
- package/dist/AvatarGroup/AvatarGroup.d.ts +9 -2
- package/dist/AvatarGroup/AvatarGroup.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroup.js +5 -2
- package/dist/AvatarGroup/AvatarGroupContext.d.ts +2 -1
- package/dist/AvatarGroup/AvatarGroupContext.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.d.ts.map +1 -1
- package/dist/AvatarGroup/AvatarGroupOverflow.js +11 -7
- package/dist/Badge/Badge.d.ts.map +1 -1
- package/dist/Badge/Badge.js +26 -2
- package/dist/Banner/Banner.d.ts +10 -1
- package/dist/Banner/Banner.d.ts.map +1 -1
- package/dist/Banner/Banner.js +11 -2
- package/dist/Button/Button.d.ts.map +1 -1
- package/dist/Button/Button.js +8 -7
- package/dist/Calendar/Calendar.d.ts +4 -2
- package/dist/Calendar/Calendar.d.ts.map +1 -1
- package/dist/Calendar/Calendar.js +15 -21
- package/dist/Calendar/hooks/useCalendarDays.js +4 -6
- package/dist/Calendar/hooks/useCalendarNavigation.js +4 -6
- package/dist/Calendar/styles.d.ts +5 -20
- package/dist/Calendar/styles.d.ts.map +1 -1
- package/dist/Calendar/styles.js +15 -17
- package/dist/Card/Card.d.ts +12 -12
- package/dist/Card/Card.d.ts.map +1 -1
- package/dist/Card/Card.js +17 -9
- package/dist/Card/index.d.ts +35 -1
- package/dist/Card/index.d.ts.map +1 -1
- package/dist/Card/index.js +21 -1
- package/dist/Carousel/Carousel.d.ts.map +1 -1
- package/dist/Carousel/Carousel.js +108 -7
- package/dist/CheckboxInput/CheckboxInput.d.ts.map +1 -1
- package/dist/CheckboxInput/CheckboxInput.js +7 -1
- package/dist/CodeBlock/CodeBlock.d.ts.map +1 -1
- package/dist/CodeBlock/CodeBlock.js +15 -4
- package/dist/CodeBlock/highlightRanges.js +1 -1
- package/dist/CodeBlock/highlightStyles.js +13 -13
- package/dist/CommandPalette/CommandPaletteItem.d.ts.map +1 -1
- package/dist/CommandPalette/CommandPaletteItem.js +2 -7
- package/dist/ComplexSelector/ComplexSelector.d.ts +10 -2
- package/dist/ComplexSelector/ComplexSelector.d.ts.map +1 -1
- package/dist/ComplexSelector/ComplexSelector.js +14 -7
- package/dist/DateInput/DateInput.d.ts +43 -0
- package/dist/DateInput/DateInput.d.ts.map +1 -1
- package/dist/DateInput/DateInput.js +22 -5
- package/dist/DateInput/MonthScroller.d.ts.map +1 -1
- package/dist/DateInput/MonthScroller.js +5 -3
- package/dist/DateInput/MonthYearWheels.d.ts.map +1 -1
- package/dist/DateInput/MonthYearWheels.js +6 -4
- package/dist/DateInput/NativeDateField.d.ts +10 -0
- package/dist/DateInput/NativeDateField.d.ts.map +1 -0
- package/dist/DateInput/NativeDateField.js +494 -0
- package/dist/DateInput/TouchDateField.d.ts.map +1 -1
- package/dist/DateInput/TouchDateField.js +52 -25
- package/dist/DateInput/Wheel.d.ts.map +1 -1
- package/dist/DateInput/Wheel.js +1 -0
- package/dist/DateInput/index.d.ts +1 -1
- package/dist/DateInput/index.d.ts.map +1 -1
- package/dist/DateInput/nativeDateSegments.d.ts +22 -0
- package/dist/DateInput/nativeDateSegments.d.ts.map +1 -0
- package/dist/DateInput/nativeDateSegments.js +111 -0
- package/dist/DateRangeInput/DateRangeInput.d.ts +4 -2
- package/dist/DateRangeInput/DateRangeInput.d.ts.map +1 -1
- package/dist/DateRangeInput/DateRangeInput.js +3 -5
- package/dist/DateTimeInput/DateTimeInput.d.ts +23 -24
- package/dist/DateTimeInput/DateTimeInput.d.ts.map +1 -1
- package/dist/DateTimeInput/DateTimeInput.js +35 -10
- package/dist/DateTimeInput/TouchDateTimeField.d.ts +6 -0
- package/dist/DateTimeInput/TouchDateTimeField.d.ts.map +1 -0
- package/dist/DateTimeInput/TouchDateTimeField.js +1021 -0
- package/dist/Dialog/Dialog.d.ts +16 -2
- package/dist/Dialog/Dialog.d.ts.map +1 -1
- package/dist/Dialog/Dialog.js +28 -7
- package/dist/DropdownMenu/DropdownMenu.d.ts.map +1 -1
- package/dist/DropdownMenu/DropdownMenu.js +4 -13
- package/dist/Field/FieldLabel.d.ts.map +1 -1
- package/dist/Field/FieldLabel.js +9 -1
- package/dist/Field/InputClearButton.d.ts +9 -3
- package/dist/Field/InputClearButton.d.ts.map +1 -1
- package/dist/Field/InputClearButton.js +14 -3
- package/dist/Heading/Heading.d.ts.map +1 -1
- package/dist/Heading/Heading.js +0 -1
- package/dist/HoverCard/HoverCard.d.ts.map +1 -1
- package/dist/HoverCard/HoverCard.js +104 -3
- package/dist/HoverCard/useHoverCard.d.ts +14 -2
- package/dist/HoverCard/useHoverCard.d.ts.map +1 -1
- package/dist/HoverCard/useHoverCard.js +7 -1
- package/dist/Icon/Icon.d.ts +4 -2
- package/dist/Icon/Icon.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.d.ts +3 -2
- package/dist/Icon/defaultIcons.d.ts.map +1 -1
- package/dist/Icon/defaultIcons.js +7 -0
- package/dist/Icon/globalIconRegistry.d.ts +13 -0
- package/dist/Icon/globalIconRegistry.d.ts.map +1 -1
- package/dist/Icon/globalIconRegistry.js +34 -6
- package/dist/Icon/index.d.ts +1 -1
- package/dist/Icon/index.d.ts.map +1 -1
- package/dist/Icon/useIcon.d.ts +5 -2
- package/dist/Icon/useIcon.d.ts.map +1 -1
- package/dist/Icon/useIcon.js +3 -0
- package/dist/Indicator/CheckboxIndicator.d.ts.map +1 -1
- package/dist/Indicator/CheckboxIndicator.js +6 -2
- package/dist/Item/Item.d.ts.map +1 -1
- package/dist/Item/Item.js +2 -2
- package/dist/Kbd/Kbd.d.ts.map +1 -1
- package/dist/Kbd/Kbd.js +2 -26
- package/dist/Layer/gestureCounter.d.ts +8 -0
- package/dist/Layer/gestureCounter.d.ts.map +1 -0
- package/dist/Layer/gestureCounter.js +53 -0
- package/dist/Layer/useLayer.d.ts +23 -13
- package/dist/Layer/useLayer.d.ts.map +1 -1
- package/dist/Layer/useLayer.js +146 -24
- package/dist/List/List.d.ts +1 -1
- package/dist/List/List.d.ts.map +1 -1
- package/dist/List/List.js +15 -4
- package/dist/Markdown/Markdown.d.ts +1 -1
- package/dist/Markdown/Markdown.d.ts.map +1 -1
- package/dist/Markdown/Markdown.js +20 -7
- package/dist/Markdown/parser.d.ts.map +1 -1
- package/dist/Markdown/parser.js +5 -3
- package/dist/MetadataList/MetadataListItem.d.ts +1 -1
- package/dist/MetadataList/MetadataListItem.d.ts.map +1 -1
- package/dist/MetadataList/MetadataListItem.js +4 -1
- package/dist/MultiSelector/MultiSelector.d.ts +18 -1
- package/dist/MultiSelector/MultiSelector.d.ts.map +1 -1
- package/dist/MultiSelector/MultiSelector.js +58 -11
- package/dist/MultiSelector/hooks.d.ts +7 -1
- package/dist/MultiSelector/hooks.d.ts.map +1 -1
- package/dist/MultiSelector/hooks.js +3 -2
- package/dist/NavIcon/NavIcon.d.ts.map +1 -1
- package/dist/NavIcon/NavIcon.js +5 -1
- package/dist/NavItem/navItemStyles.stylex.d.ts +0 -8
- package/dist/NavItem/navItemStyles.stylex.d.ts.map +1 -1
- package/dist/NavItem/navItemStyles.stylex.js +0 -2
- package/dist/NavMenu/NavHeadingMenu.d.ts +1 -1
- package/dist/NavMenu/NavHeadingMenu.d.ts.map +1 -1
- package/dist/NavMenu/NavHeadingMenu.js +7 -4
- package/dist/NumberInput/NumberInput.d.ts +6 -1
- package/dist/NumberInput/NumberInput.d.ts.map +1 -1
- package/dist/NumberInput/NumberInput.js +95 -126
- package/dist/NumberInput/numberInputCommit.d.ts +34 -0
- package/dist/NumberInput/numberInputCommit.d.ts.map +1 -0
- package/dist/NumberInput/numberInputCommit.js +71 -0
- package/dist/NumberInput/numberParser.d.ts +64 -0
- package/dist/NumberInput/numberParser.d.ts.map +1 -0
- package/dist/NumberInput/numberParser.js +350 -0
- package/dist/Outline/Outline.d.ts.map +1 -1
- package/dist/Outline/Outline.js +2 -3
- package/dist/OverflowList/OverflowList.d.ts +41 -1
- package/dist/OverflowList/OverflowList.d.ts.map +1 -1
- package/dist/OverflowList/OverflowList.js +43 -2
- package/dist/Popover/Popover.d.ts.map +1 -1
- package/dist/Popover/Popover.js +8 -14
- package/dist/Popover/usePopover.d.ts +15 -41
- package/dist/Popover/usePopover.d.ts.map +1 -1
- package/dist/Popover/usePopover.js +26 -7
- package/dist/PowerSearch/PowerSearchValueEditor.d.ts.map +1 -1
- package/dist/PowerSearch/PowerSearchValueEditor.js +91 -18
- package/dist/PowerSearch/formatFilterValue.d.ts.map +1 -1
- package/dist/PowerSearch/formatFilterValue.js +4 -2
- package/dist/ProgressBar/ProgressBar.d.ts.map +1 -1
- package/dist/ProgressBar/ProgressBar.js +18 -5
- package/dist/Resizable/useResizable.d.ts +19 -1
- package/dist/Resizable/useResizable.d.ts.map +1 -1
- package/dist/Resizable/useResizable.js +104 -38
- package/dist/SelectableCard/SelectableCard.d.ts.map +1 -1
- package/dist/SelectableCard/SelectableCard.js +9 -0
- package/dist/Selector/Selector.d.ts +18 -1
- package/dist/Selector/Selector.d.ts.map +1 -1
- package/dist/Selector/Selector.js +92 -21
- package/dist/Selector/hooks.d.ts +7 -1
- package/dist/Selector/hooks.d.ts.map +1 -1
- package/dist/Selector/hooks.js +3 -2
- package/dist/SideNav/SideNav.d.ts +6 -1
- package/dist/SideNav/SideNav.d.ts.map +1 -1
- package/dist/SideNav/SideNav.js +57 -27
- package/dist/SideNav/SideNavHeading.d.ts.map +1 -1
- package/dist/SideNav/SideNavHeading.js +5 -4
- package/dist/SideNav/SideNavItem.d.ts +29 -4
- package/dist/SideNav/SideNavItem.d.ts.map +1 -1
- package/dist/SideNav/SideNavItem.js +75 -20
- package/dist/Slider/Slider.d.ts.map +1 -1
- package/dist/Slider/Slider.js +34 -2
- package/dist/Spinner/Spinner.d.ts +3 -1
- package/dist/Spinner/Spinner.d.ts.map +1 -1
- package/dist/Spinner/Spinner.js +199 -20
- package/dist/StatusDot/StatusDot.d.ts.map +1 -1
- package/dist/StatusDot/StatusDot.js +6 -1
- package/dist/Stepper/Step.d.ts.map +1 -1
- package/dist/Stepper/Step.js +7 -6
- package/dist/Switch/Switch.d.ts.map +1 -1
- package/dist/Switch/Switch.js +5 -1
- package/dist/Table/BaseTable.d.ts.map +1 -1
- package/dist/Table/BaseTable.js +6 -1
- package/dist/Table/Table.d.ts.map +1 -1
- package/dist/Table/Table.js +3 -6
- package/dist/Table/plugins/filtering/useTableFiltering.d.ts.map +1 -1
- package/dist/Table/plugins/filtering/useTableFiltering.js +73 -4
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts +26 -0
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.d.ts.map +1 -1
- package/dist/Table/plugins/groupedRows/useTableGroupedRows.js +34 -3
- package/dist/Table/plugins/selection/useTableSelection.d.ts.map +1 -1
- package/dist/Table/plugins/selection/useTableSelection.js +25 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.d.ts.map +1 -1
- package/dist/Table/plugins/stickyColumns/useTableStickyColumns.js +3 -4
- package/dist/Text/Text.d.ts.map +1 -1
- package/dist/Text/Text.js +0 -1
- package/dist/TextArea/TextArea.d.ts.map +1 -1
- package/dist/TextArea/TextArea.js +13 -8
- package/dist/Timestamp/Timestamp.d.ts +1 -1
- package/dist/Timestamp/Timestamp.d.ts.map +1 -1
- package/dist/Timestamp/Timestamp.js +10 -18
- package/dist/Timestamp/formatInstant.d.ts.map +1 -1
- package/dist/Timestamp/formatInstant.js +10 -5
- package/dist/Toast/Toast.d.ts +17 -2
- package/dist/Toast/Toast.d.ts.map +1 -1
- package/dist/Toast/Toast.js +77 -11
- package/dist/Toast/ToastViewport.d.ts +1 -0
- package/dist/Toast/ToastViewport.d.ts.map +1 -1
- package/dist/Toast/ToastViewport.js +76 -21
- package/dist/Toast/index.d.ts +1 -1
- package/dist/Toast/index.d.ts.map +1 -1
- package/dist/Toast/types.d.ts +38 -0
- package/dist/Toast/types.d.ts.map +1 -1
- package/dist/Toast/useToastGesture.d.ts +26 -0
- package/dist/Toast/useToastGesture.d.ts.map +1 -0
- package/dist/Toast/useToastGesture.js +223 -0
- package/dist/Token/Token.d.ts +1 -1
- package/dist/Token/Token.d.ts.map +1 -1
- package/dist/Token/Token.js +23 -12
- package/dist/Token/TokenLink.d.ts +1 -1
- package/dist/Token/TokenLink.d.ts.map +1 -1
- package/dist/Token/TokenLink.js +5 -2
- package/dist/Tokenizer/Tokenizer.d.ts +12 -1
- package/dist/Tokenizer/Tokenizer.d.ts.map +1 -1
- package/dist/Tokenizer/Tokenizer.js +31 -21
- package/dist/TopNav/TopNavHeading.js +2 -2
- package/dist/TopNav/TopNavItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavItem.js +3 -3
- package/dist/TopNav/TopNavMegaMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMegaMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenu.js +30 -9
- package/dist/TopNav/TopNavMegaMenuItem.d.ts.map +1 -1
- package/dist/TopNav/TopNavMegaMenuItem.js +3 -3
- package/dist/TopNav/TopNavMenu.d.ts +1 -1
- package/dist/TopNav/TopNavMenu.d.ts.map +1 -1
- package/dist/TopNav/TopNavMenu.js +21 -6
- package/dist/TreeList/TreeList.d.ts +1 -1
- package/dist/TreeList/TreeList.d.ts.map +1 -1
- package/dist/TreeList/TreeList.js +7 -2
- package/dist/TreeList/TreeListItem.d.ts.map +1 -1
- package/dist/TreeList/TreeListItem.js +2 -2
- package/dist/Typeahead/BaseTypeahead.d.ts +33 -0
- package/dist/Typeahead/BaseTypeahead.d.ts.map +1 -1
- package/dist/Typeahead/BaseTypeahead.js +51 -8
- package/dist/Typeahead/Typeahead.d.ts +8 -1
- package/dist/Typeahead/Typeahead.d.ts.map +1 -1
- package/dist/Typeahead/Typeahead.js +2 -0
- package/dist/Typeahead/TypeaheadItem.d.ts +1 -1
- package/dist/Typeahead/TypeaheadItem.d.ts.map +1 -1
- package/dist/Typeahead/TypeaheadItem.js +7 -2
- package/dist/astryx.css +87 -22
- package/dist/hooks/useHotkeys.d.ts.map +1 -1
- package/dist/hooks/useHotkeys.js +3 -25
- package/dist/hooks/useOverflow.d.ts.map +1 -1
- package/dist/hooks/useOverflow.js +14 -4
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/theme/Theme.d.ts.map +1 -1
- package/dist/theme/Theme.js +46 -10
- package/dist/theme/defineTheme.d.ts +9 -3
- 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 +24 -4
- package/dist/theme/generateThemeRules.d.ts +21 -0
- package/dist/theme/generateThemeRules.d.ts.map +1 -1
- package/dist/theme/generateThemeRules.js +26 -0
- package/dist/theme/syntax/tokens.d.ts +1 -1
- package/dist/theme/syntax/tokens.d.ts.map +1 -1
- package/dist/theme/syntax/tokens.js +5 -2
- package/dist/theme/useTheme.d.ts.map +1 -1
- package/dist/theme/useTheme.js +6 -7
- package/dist/utils/dateParser.d.ts +5 -8
- package/dist/utils/dateParser.d.ts.map +1 -1
- package/dist/utils/dateParser.js +10 -11
- package/dist/utils/focusOutline.stylex.d.ts +25 -0
- package/dist/utils/focusOutline.stylex.d.ts.map +1 -1
- package/dist/utils/focusOutline.stylex.js +15 -0
- package/dist/utils/interactionOverlay.stylex.d.ts +26 -0
- package/dist/utils/interactionOverlay.stylex.d.ts.map +1 -0
- package/dist/utils/interactionOverlay.stylex.js +42 -0
- package/dist/utils/isApplePlatform.d.ts +18 -0
- package/dist/utils/isApplePlatform.d.ts.map +1 -0
- package/dist/utils/isApplePlatform.js +37 -0
- package/dist/utils/plainDate.d.ts +11 -0
- package/dist/utils/plainDate.d.ts.map +1 -1
- package/dist/utils/plainDate.js +20 -4
- package/locales/af-ZA.json +7 -7
- package/locales/ar-SA.json +7 -7
- package/locales/ca-ES.json +6 -6
- package/locales/cs-CZ.json +7 -7
- package/locales/da-DK.json +7 -7
- package/locales/de-DE.json +7 -7
- package/locales/el-GR.json +7 -7
- package/locales/en.json +178 -6
- package/locales/es-ES.json +6 -6
- package/locales/fi-FI.json +7 -7
- package/locales/fr-FR.json +7 -7
- package/locales/he-IL.json +7 -7
- package/locales/hu-HU.json +7 -7
- package/locales/it-IT.json +7 -7
- package/locales/ja-JP.json +7 -7
- package/locales/ko-KR.json +7 -7
- package/locales/nl-NL.json +7 -7
- package/locales/no-NO.json +7 -7
- package/locales/pl-PL.json +7 -7
- package/locales/pseudo.json +130 -1
- package/locales/pt-BR.json +7 -7
- package/locales/pt-PT.json +7 -7
- package/locales/ro-RO.json +7 -7
- package/locales/ru-RU.json +7 -7
- package/locales/sr-SP.json +7 -7
- package/locales/sv-SE.json +7 -7
- package/locales/tr-TR.json +7 -7
- package/locales/uk-UA.json +7 -7
- package/locales/vi-VN.json +7 -7
- package/locales/zh-CN.json +7 -7
- package/locales/zh-TW.json +7 -7
- package/package.json +4 -5
- package/src/AlertDialog/AlertDialog.doc.mjs +114 -30
- package/src/AlertDialog/AlertDialog.test.tsx +211 -2
- package/src/AlertDialog/AlertDialog.tsx +62 -20
- package/src/AspectRatio/AspectRatio.doc.mjs +3 -3
- package/src/AspectRatio/AspectRatio.tsx +6 -6
- package/src/Avatar/Avatar.doc.mjs +12 -2
- package/src/Avatar/Avatar.test.tsx +80 -0
- package/src/Avatar/Avatar.tsx +64 -14
- package/src/Avatar/index.ts +2 -2
- package/src/AvatarGroup/AvatarGroup.doc.mjs +8 -2
- package/src/AvatarGroup/AvatarGroup.test.tsx +24 -0
- package/src/AvatarGroup/AvatarGroup.tsx +12 -4
- package/src/AvatarGroup/AvatarGroupContext.ts +5 -3
- package/src/AvatarGroup/AvatarGroupOverflow.tsx +12 -12
- package/src/Badge/Badge.doc.mjs +3 -2
- package/src/Badge/Badge.test.tsx +32 -3
- package/src/Badge/Badge.tsx +42 -1
- package/src/Banner/Banner.doc.mjs +9 -0
- package/src/Banner/Banner.test.tsx +76 -11
- package/src/Banner/Banner.tsx +21 -2
- package/src/Button/Button.doc.mjs +2 -1
- package/src/Button/Button.test.tsx +19 -4
- package/src/Button/Button.tsx +9 -29
- package/src/ButtonGroup/ButtonGroup.doc.mjs +2 -2
- package/src/ButtonGroup/ButtonGroup.test.tsx +13 -0
- package/src/Calendar/Calendar.doc.mjs +3 -3
- package/src/Calendar/Calendar.test.tsx +112 -0
- package/src/Calendar/Calendar.tsx +18 -16
- package/src/Calendar/hooks/useCalendarDays.ts +4 -4
- package/src/Calendar/hooks/useCalendarNavigation.ts +4 -4
- package/src/Calendar/styles.ts +48 -42
- package/src/Card/Card.doc.mjs +10 -7
- package/src/Card/Card.test.tsx +113 -19
- package/src/Card/Card.tsx +67 -89
- package/src/Card/index.ts +36 -1
- package/src/Carousel/Carousel.doc.mjs +3 -0
- package/src/Carousel/Carousel.test.tsx +360 -0
- package/src/Carousel/Carousel.tsx +116 -15
- package/src/CheckboxInput/CheckboxInput.doc.mjs +2 -0
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +5 -0
- package/src/CodeBlock/CodeBlock.doc.mjs +10 -4
- package/src/CodeBlock/CodeBlock.test.tsx +37 -0
- package/src/CodeBlock/CodeBlock.tsx +20 -4
- package/src/CodeBlock/highlightRanges.ts +1 -1
- package/src/CodeBlock/highlightStyles.ts +13 -13
- package/src/CommandPalette/CommandPaletteItem.tsx +2 -12
- package/src/ComplexSelector/ComplexSelector.doc.mjs +7 -0
- package/src/ComplexSelector/ComplexSelector.test.tsx +183 -0
- package/src/ComplexSelector/ComplexSelector.tsx +22 -12
- package/src/DateInput/DateInput.doc.mjs +16 -0
- package/src/DateInput/DateInput.test.tsx +9 -4
- package/src/DateInput/DateInput.tsx +54 -3
- package/src/DateInput/DateInputTouch.test.tsx +146 -32
- package/src/DateInput/MonthScroller.tsx +5 -1
- package/src/DateInput/MonthYearWheels.tsx +7 -4
- package/src/DateInput/NativeDateField.test.tsx +635 -0
- package/src/DateInput/NativeDateField.tsx +641 -0
- package/src/DateInput/TouchDateField.tsx +83 -33
- package/src/DateInput/Wheel.tsx +1 -0
- package/src/DateInput/index.ts +1 -0
- package/src/DateInput/nativeDateSegments.ts +127 -0
- package/src/DateRangeInput/DateRangeInput.doc.mjs +2 -2
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -0
- package/src/DateRangeInput/DateRangeInput.tsx +8 -13
- package/src/DateTimeInput/DateTimeInput.doc.mjs +38 -21
- package/src/DateTimeInput/DateTimeInput.test.tsx +76 -0
- package/src/DateTimeInput/DateTimeInput.tsx +54 -20
- package/src/DateTimeInput/DateTimeInputTouch.test.tsx +980 -0
- package/src/DateTimeInput/TouchDateTimeField.tsx +1437 -0
- package/src/Dialog/Dialog.test.tsx +185 -18
- package/src/Dialog/Dialog.tsx +35 -11
- package/src/DropdownMenu/DropdownMenu.test.tsx +44 -10
- package/src/DropdownMenu/DropdownMenu.tsx +4 -13
- package/src/Field/FieldLabel.test.tsx +29 -0
- package/src/Field/FieldLabel.tsx +7 -0
- package/src/Field/InputClearButton.test.tsx +15 -1
- package/src/Field/InputClearButton.tsx +28 -4
- package/src/Heading/Heading.tsx +0 -1
- package/src/HoverCard/HoverCard.doc.mjs +8 -2
- package/src/HoverCard/HoverCard.test.tsx +154 -4
- package/src/HoverCard/HoverCard.tsx +137 -3
- package/src/HoverCard/useHoverCard.tsx +23 -3
- package/src/Icon/Icon.test.tsx +55 -1
- package/src/Icon/Icon.tsx +5 -3
- package/src/Icon/defaultIcons.tsx +11 -2
- package/src/Icon/globalIconRegistry.test.tsx +16 -3
- package/src/Icon/globalIconRegistry.tsx +37 -6
- package/src/Icon/index.ts +1 -0
- package/src/Icon/useIcon.ts +9 -2
- package/src/Indicator/CheckboxIndicator.tsx +14 -8
- package/src/Indicator/Indicator.doc.mjs +2 -0
- package/src/Item/Item.tsx +2 -7
- package/src/Kbd/Kbd.test.tsx +0 -17
- package/src/Kbd/Kbd.tsx +2 -26
- package/src/Layer/gestureCounter.ts +57 -0
- package/src/Layer/useLayer.test.tsx +368 -16
- package/src/Layer/useLayer.tsx +208 -35
- package/src/Layout/__tests__/edgeCompensation.test.tsx +1 -1
- package/src/List/List.test.tsx +38 -0
- package/src/List/List.tsx +8 -1
- package/src/Markdown/Markdown.test.tsx +37 -0
- package/src/Markdown/Markdown.tsx +16 -5
- package/src/Markdown/parser.test.ts +33 -0
- package/src/Markdown/parser.ts +9 -3
- package/src/MetadataList/MetadataList.test.tsx +75 -2
- package/src/MetadataList/MetadataListItem.tsx +5 -2
- package/src/MultiSelector/MultiSelector.doc.mjs +22 -1
- package/src/MultiSelector/MultiSelector.test.tsx +205 -0
- package/src/MultiSelector/MultiSelector.tsx +103 -16
- package/src/MultiSelector/hooks.ts +9 -2
- package/src/NavIcon/NavIcon.doc.mjs +8 -2
- package/src/NavIcon/NavIcon.test.tsx +9 -0
- package/src/NavIcon/NavIcon.tsx +5 -1
- package/src/NavItem/navItemStyles.stylex.ts +0 -8
- package/src/NavMenu/NavHeadingMenu.test.tsx +30 -0
- package/src/NavMenu/NavHeadingMenu.tsx +7 -4
- package/src/NumberInput/NumberInput.doc.mjs +26 -7
- package/src/NumberInput/NumberInput.test.tsx +563 -8
- package/src/NumberInput/NumberInput.tsx +77 -131
- package/src/NumberInput/numberInputCommit.test.ts +72 -0
- package/src/NumberInput/numberInputCommit.ts +103 -0
- package/src/NumberInput/numberParser.docblock.test.ts +234 -0
- package/src/NumberInput/numberParser.test.ts +222 -0
- package/src/NumberInput/numberParser.ts +403 -0
- package/src/Outline/Outline.tsx +2 -4
- package/src/OverflowList/OverflowList.doc.mjs +102 -21
- package/src/OverflowList/OverflowList.test.tsx +550 -4
- package/src/OverflowList/OverflowList.tsx +100 -2
- package/src/Pagination/Pagination.test.tsx +3 -2
- package/src/Popover/Popover.doc.mjs +2 -2
- package/src/Popover/Popover.test.tsx +38 -0
- package/src/Popover/Popover.tsx +28 -66
- package/src/Popover/usePopover.tsx +44 -5
- package/src/PowerSearch/PowerSearchEditPopover.test.tsx +87 -0
- package/src/PowerSearch/PowerSearchValueEditor.test.tsx +64 -0
- package/src/PowerSearch/PowerSearchValueEditor.tsx +109 -10
- package/src/PowerSearch/formatFilterValue.test.ts +16 -1
- package/src/PowerSearch/formatFilterValue.ts +2 -0
- package/src/ProgressBar/ProgressBar.doc.mjs +42 -6
- package/src/ProgressBar/ProgressBar.test.tsx +24 -0
- package/src/ProgressBar/ProgressBar.tsx +28 -8
- package/src/Resizable/Resizable.doc.mjs +2 -2
- package/src/Resizable/useResizable.doc.mjs +21 -2
- package/src/Resizable/useResizable.test.ts +421 -0
- package/src/Resizable/useResizable.ts +133 -48
- package/src/SelectableCard/SelectableCard.doc.mjs +3 -0
- package/src/SelectableCard/SelectableCard.tsx +16 -0
- package/src/Selector/Selector.doc.mjs +14 -0
- package/src/Selector/Selector.source-build.test.mjs +65 -0
- package/src/Selector/Selector.test.tsx +301 -0
- package/src/Selector/Selector.tsx +145 -32
- package/src/Selector/hooks.ts +17 -2
- package/src/SideNav/SideNav.doc.mjs +2 -2
- package/src/SideNav/SideNav.test.tsx +1069 -6
- package/src/SideNav/SideNav.tsx +109 -38
- package/src/SideNav/SideNavHeading.tsx +5 -2
- package/src/SideNav/SideNavItem.doc.mjs +24 -3
- package/src/SideNav/SideNavItem.tsx +134 -44
- package/src/Slider/Slider.test.tsx +106 -1
- package/src/Slider/Slider.tsx +52 -1
- package/src/Spinner/Spinner.doc.mjs +17 -5
- package/src/Spinner/Spinner.test.tsx +164 -0
- package/src/Spinner/Spinner.tsx +252 -22
- package/src/StatusDot/StatusDot.doc.mjs +8 -2
- package/src/StatusDot/StatusDot.test.tsx +9 -0
- package/src/StatusDot/StatusDot.tsx +7 -1
- package/src/Stepper/Step.doc.mjs +1 -1
- package/src/Stepper/Step.tsx +7 -14
- package/src/Switch/Switch.doc.mjs +2 -0
- package/src/Switch/Switch.test.tsx +10 -0
- package/src/Switch/Switch.tsx +3 -0
- package/src/Table/BaseTable.tsx +6 -1
- package/src/Table/Table.doc.mjs +5 -3
- package/src/Table/Table.tsx +3 -8
- package/src/Table/TableBody.doc.mjs +2 -2
- package/src/Table/TableFooter.doc.mjs +1 -1
- package/src/Table/TableHeader.doc.mjs +1 -1
- package/src/Table/plugins/filtering/useTableFiltering.test.tsx +44 -6
- package/src/Table/plugins/filtering/useTableFiltering.tsx +100 -4
- package/src/Table/plugins/groupedRows/useTableGroupedRows.tsx +50 -4
- package/src/Table/plugins/selection/useTableSelection.test.tsx +62 -0
- package/src/Table/plugins/selection/useTableSelection.tsx +25 -2
- package/src/Table/plugins/stickyColumns/useTableStickyColumns.tsx +1 -2
- package/src/Table/useTableGroupedRows.doc.mjs +3 -3
- package/src/Table/useTablePagination.doc.mjs +1 -1
- package/src/Table/useTableSelection.doc.mjs +1 -1
- package/src/Text/Text.test.tsx +44 -0
- package/src/Text/Text.tsx +0 -1
- package/src/TextArea/TextArea.doc.mjs +12 -2
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +34 -22
- package/src/Timestamp/Timestamp.test.tsx +89 -0
- package/src/Timestamp/Timestamp.tsx +8 -8
- package/src/Timestamp/formatInstant.ts +5 -0
- package/src/Toast/Toast.doc.mjs +213 -44
- package/src/Toast/Toast.tsx +118 -23
- package/src/Toast/ToastViewport.test.tsx +1434 -8
- package/src/Toast/ToastViewport.tsx +85 -14
- package/src/Toast/index.ts +2 -0
- package/src/Toast/types.ts +43 -5
- package/src/Toast/useToastGesture.ts +361 -0
- package/src/Token/Token.test.tsx +95 -0
- package/src/Token/Token.tsx +19 -17
- package/src/Token/TokenLink.tsx +12 -3
- package/src/Tokenizer/Tokenizer.doc.mjs +16 -3
- package/src/Tokenizer/Tokenizer.test.tsx +161 -0
- package/src/Tokenizer/Tokenizer.tsx +49 -24
- package/src/TopNav/TopNavHeading.tsx +2 -2
- package/src/TopNav/TopNavItem.tsx +3 -7
- package/src/TopNav/TopNavMegaMenu.test.tsx +104 -0
- package/src/TopNav/TopNavMegaMenu.tsx +47 -4
- package/src/TopNav/TopNavMegaMenuItem.tsx +10 -9
- package/src/TopNav/TopNavMenu.test.tsx +133 -1
- package/src/TopNav/TopNavMenu.tsx +38 -5
- package/src/TreeList/TreeList.test.tsx +49 -0
- package/src/TreeList/TreeList.tsx +7 -2
- package/src/TreeList/TreeListItem.tsx +2 -7
- package/src/Typeahead/BaseTypeahead.doc.mjs +13 -0
- package/src/Typeahead/BaseTypeahead.tsx +96 -6
- package/src/Typeahead/Typeahead.doc.mjs +6 -0
- package/src/Typeahead/Typeahead.test.tsx +154 -0
- package/src/Typeahead/Typeahead.tsx +9 -0
- package/src/Typeahead/TypeaheadItem.test.tsx +43 -0
- package/src/Typeahead/TypeaheadItem.tsx +8 -1
- package/src/hooks/useAnnounce.doc.mjs +96 -0
- package/src/hooks/useDevWarning.doc.mjs +96 -0
- package/src/hooks/useHotkeys.test.ts +0 -18
- package/src/hooks/useHotkeys.ts +3 -25
- package/src/hooks/useIndicatorFocusRing.doc.mjs +104 -0
- package/src/hooks/useInputStatusIcon.doc.mjs +142 -0
- package/src/hooks/useInteractiveRole.doc.mjs +119 -0
- package/src/hooks/useLongPress.doc.mjs +123 -0
- package/src/hooks/useOverflow.doc.mjs +58 -17
- package/src/hooks/useOverflow.ts +16 -4
- package/src/hooks/useTypeahead.doc.mjs +153 -0
- package/src/index.ts +2 -0
- package/src/raw-import.d.ts +14 -0
- package/src/theme/Theme.test.tsx +104 -2
- package/src/theme/Theme.tsx +49 -14
- package/src/theme/defineTheme.test.ts +23 -0
- package/src/theme/defineTheme.ts +12 -3
- package/src/theme/derivedVarRegistry.test.ts +87 -3
- package/src/theme/derivedVarRegistry.ts +23 -4
- package/src/theme/generateThemeRules.test.ts +99 -1
- package/src/theme/generateThemeRules.ts +28 -0
- package/src/theme/syntax/tokens.ts +5 -2
- package/src/theme/useTheme.test.tsx +10 -0
- package/src/theme/useTheme.ts +16 -10
- package/src/utils/dateParser.test.ts +34 -2
- package/src/utils/dateParser.ts +11 -14
- package/src/utils/focusOutline.stylex.ts +50 -0
- package/src/utils/interactionOverlay.stylex.ts +74 -0
- package/src/utils/isApplePlatform.test.ts +61 -0
- package/src/utils/isApplePlatform.ts +37 -0
- package/src/utils/plainDate.test.ts +46 -0
- package/src/utils/plainDate.ts +18 -3
|
@@ -120,14 +120,14 @@ export const docs = {
|
|
|
120
120
|
name: 'timeIncrement',
|
|
121
121
|
type: '1 | 5 | 10 | 15 | 30',
|
|
122
122
|
description:
|
|
123
|
-
'Minutes to add or subtract when using arrow keys in the time input.',
|
|
123
|
+
'Minutes to add or subtract when using arrow keys in the desktop time input. Ignored on the mobile touch sheet, where time is changed with wheels.',
|
|
124
124
|
default: '1',
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
name: 'timeOptionInterval',
|
|
128
128
|
type: '5 | 10 | 15 | 30 | 60',
|
|
129
129
|
description:
|
|
130
|
-
'Minute cadence for a dropdown of preset times on the time portion. Set it to turn the time field into a combobox listing every valid time at that cadence (60 gives a 12 AM to 11 PM list). Omitted, the time field stays a plain text input and gains no combobox semantics. Typed entry keeps working either way, so a time between two options is still reachable.
|
|
130
|
+
'Minute cadence for a dropdown of preset times on the desktop time portion. Set it to turn the desktop time field into a combobox listing every valid time at that cadence (60 gives a 12 AM to 11 PM list). Omitted, the desktop time field stays a plain text input and gains no combobox semantics. Typed entry keeps working either way, so a time between two options is still reachable. Ignored on the mobile touch sheet, where the wheels expose every hour/minute/second.',
|
|
131
131
|
},
|
|
132
132
|
{
|
|
133
133
|
name: 'hasClear',
|
|
@@ -146,7 +146,7 @@ export const docs = {
|
|
|
146
146
|
name: 'timePlaceholder',
|
|
147
147
|
type: 'string',
|
|
148
148
|
description:
|
|
149
|
-
'Placeholder text shown in the time portion when no time is selected.',
|
|
149
|
+
'Placeholder text shown in the time portion when no time is selected. On touch, this appears in the closed time segment before a time is chosen.',
|
|
150
150
|
default: "'Select a time'",
|
|
151
151
|
},
|
|
152
152
|
{
|
|
@@ -176,7 +176,8 @@ export const docs = {
|
|
|
176
176
|
{
|
|
177
177
|
name: 'numberOfMonths',
|
|
178
178
|
type: '1 | 2',
|
|
179
|
-
description:
|
|
179
|
+
description:
|
|
180
|
+
'Number of months displayed simultaneously in the desktop calendar popover. Ignored on the mobile touch sheet, whose Date panel always shows one swipe-paged month at a time.',
|
|
180
181
|
default: '1',
|
|
181
182
|
},
|
|
182
183
|
{
|
|
@@ -201,7 +202,11 @@ export const docs = {
|
|
|
201
202
|
],
|
|
202
203
|
theming: {
|
|
203
204
|
targets: [
|
|
204
|
-
{
|
|
205
|
+
{
|
|
206
|
+
className: 'astryx-date-time-input',
|
|
207
|
+
visualProps: ['size', 'status'],
|
|
208
|
+
states: ['disabled'],
|
|
209
|
+
},
|
|
205
210
|
{
|
|
206
211
|
className: 'astryx-date-time-input-date-segment',
|
|
207
212
|
visualProps: ['size', 'status'],
|
|
@@ -218,7 +223,7 @@ export const docs = {
|
|
|
218
223
|
},
|
|
219
224
|
usage: {
|
|
220
225
|
description:
|
|
221
|
-
'DateTimeInput combines a calendar popover
|
|
226
|
+
'DateTimeInput combines date and time selection in one field. On mouse/trackpad devices it uses a calendar popover plus text time input; on coarse-pointer devices the closed control still has separate Date and Time segments, and either segment opens a bottom sheet with Date and Time sections, a swipable month calendar, and accessible time wheels. The closed date and time segments stay side by side when at least 400px is available and wrap into full-width rows below 400px, independent of viewport width. Use it for scheduling, event creation, deadline setting, or any form field that needs a specific datetime.',
|
|
222
227
|
bestPractices: [
|
|
223
228
|
{
|
|
224
229
|
guidance: true,
|
|
@@ -283,19 +288,19 @@ export const docs = {
|
|
|
283
288
|
name: 'Calendar popover',
|
|
284
289
|
required: false,
|
|
285
290
|
description:
|
|
286
|
-
'A month grid that appears
|
|
291
|
+
'A month grid that appears in a popover on desktop, or in the mobile bottom sheet on coarse-pointer devices.',
|
|
287
292
|
},
|
|
288
293
|
{
|
|
289
294
|
name: 'Time input',
|
|
290
295
|
required: true,
|
|
291
296
|
description:
|
|
292
|
-
|
|
297
|
+
"A text input for entering the time on desktop; a read-only time segment opening accessible hour/minute/second wheels on touch. The touch Date panel's Save date action advances to Time; the Time panel's Save closes the sheet.",
|
|
293
298
|
},
|
|
294
299
|
{
|
|
295
300
|
name: 'Time options popover',
|
|
296
301
|
required: false,
|
|
297
302
|
description:
|
|
298
|
-
'A list of preset times at the timeOptionInterval cadence, shown when that prop is set and the time input is clicked or opened with Alt+ArrowDown.',
|
|
303
|
+
'A desktop-only list of preset times at the timeOptionInterval cadence, shown when that prop is set and the time input is clicked or opened with Alt+ArrowDown.',
|
|
299
304
|
},
|
|
300
305
|
{
|
|
301
306
|
name: 'Clear button',
|
|
@@ -317,7 +322,7 @@ export const docsZh = {
|
|
|
317
322
|
displayName: 'Date Time Input',
|
|
318
323
|
usage: {
|
|
319
324
|
description:
|
|
320
|
-
'DateTimeInput combines a calendar popover
|
|
325
|
+
'DateTimeInput combines date and time selection in one field. On mouse/trackpad devices it uses a calendar popover plus text time input; on coarse-pointer devices the closed control still has separate Date and Time segments, and either segment opens a bottom sheet with Date and Time sections, a swipable month calendar, and accessible time wheels. The closed date and time segments stay side by side when at least 400px is available and wrap into full-width rows below 400px, independent of viewport width. Use it for scheduling, event creation, deadline setting, or any form field that needs a specific datetime.',
|
|
321
326
|
bestPractices: [
|
|
322
327
|
{
|
|
323
328
|
guidance: true,
|
|
@@ -451,7 +456,8 @@ export const docsZh = {
|
|
|
451
456
|
{
|
|
452
457
|
name: 'timeIncrement',
|
|
453
458
|
type: '1 | 5 | 10 | 15 | 30',
|
|
454
|
-
description:
|
|
459
|
+
description:
|
|
460
|
+
'在桌面时间输入中按箭头键时增减的分钟数。在移动触摸面板中会被忽略,时间通过滚轮更改。',
|
|
455
461
|
default: '1',
|
|
456
462
|
},
|
|
457
463
|
{
|
|
@@ -469,7 +475,8 @@ export const docsZh = {
|
|
|
469
475
|
{
|
|
470
476
|
name: 'timePlaceholder',
|
|
471
477
|
type: 'string',
|
|
472
|
-
description:
|
|
478
|
+
description:
|
|
479
|
+
'时间部分未选择时间时显示的占位符文本。在触摸设备上,这会显示在未选择时间的闭合时间段中。',
|
|
473
480
|
default: "'Select a time'",
|
|
474
481
|
},
|
|
475
482
|
{
|
|
@@ -497,13 +504,15 @@ export const docsZh = {
|
|
|
497
504
|
{
|
|
498
505
|
name: 'numberOfMonths',
|
|
499
506
|
type: '1 | 2',
|
|
500
|
-
description:
|
|
507
|
+
description:
|
|
508
|
+
'桌面日历弹出层中同时显示的月份数量。在移动触摸面板中会被忽略,日期面板一次显示一个可滑动月份。',
|
|
501
509
|
default: '1',
|
|
502
510
|
},
|
|
503
511
|
{
|
|
504
512
|
name: 'weekStartsOn',
|
|
505
513
|
type: "0 | 1 | 2 | 3 | 4 | 5 | 6 | 'sun' | 'mon' | 'tue' | 'wed' | 'thu' | 'fri' | 'sat'",
|
|
506
|
-
description:
|
|
514
|
+
description:
|
|
515
|
+
'日历中每周的起始日。可为数字(0=周日……6=周六)或三字母星期缩写。',
|
|
507
516
|
default: '0',
|
|
508
517
|
},
|
|
509
518
|
{
|
|
@@ -515,7 +524,11 @@ export const docsZh = {
|
|
|
515
524
|
],
|
|
516
525
|
theming: {
|
|
517
526
|
targets: [
|
|
518
|
-
{
|
|
527
|
+
{
|
|
528
|
+
className: 'astryx-date-time-input',
|
|
529
|
+
visualProps: ['size', 'status'],
|
|
530
|
+
states: ['disabled'],
|
|
531
|
+
},
|
|
519
532
|
{
|
|
520
533
|
className: 'astryx-date-time-input-date-segment',
|
|
521
534
|
visualProps: ['size', 'status'],
|
|
@@ -538,7 +551,7 @@ export const docsDense = {
|
|
|
538
551
|
'combined date + time picker with calendar popover and time input',
|
|
539
552
|
usage: {
|
|
540
553
|
description:
|
|
541
|
-
'DateTimeInput combines a calendar popover
|
|
554
|
+
'DateTimeInput combines date and time selection. Desktop uses a calendar popover plus time input; coarse pointers show separate Date/Time closed segments that open a bottom sheet with matching sections, a Save date step, and final time-wheel Save. Closed segments stay side by side when at least 400px is available and wrap into full-width rows below 400px, independent of the viewport. Use for scheduling, events, deadlines, or any form field needing a datetime.',
|
|
542
555
|
bestPractices: [
|
|
543
556
|
{
|
|
544
557
|
guidance: true,
|
|
@@ -600,19 +613,23 @@ export const docsDense = {
|
|
|
600
613
|
dateConstraints: 'custom constraint fns to disable specific dates',
|
|
601
614
|
hasSeconds: 'include seconds in time portion',
|
|
602
615
|
hourFormat: "display format. '12h' shows AM/PM; '24h' uses 24-hour",
|
|
603
|
-
timeIncrement:
|
|
616
|
+
timeIncrement:
|
|
617
|
+
'desktop only: minutes to add/subtract on arrow keys in time input; mobile uses wheels',
|
|
604
618
|
timeOptionInterval:
|
|
605
|
-
'minute cadence for a preset-time dropdown on the time input; omitted = plain text input, no combobox.
|
|
619
|
+
'desktop only: minute cadence for a preset-time dropdown on the time input; omitted = plain text input, no combobox. mobile uses wheels',
|
|
606
620
|
hasClear: 'Shows clear button when datetime is set',
|
|
607
621
|
placeholder: 'date-portion placeholder when empty',
|
|
608
|
-
timePlaceholder:
|
|
622
|
+
timePlaceholder:
|
|
623
|
+
'time-portion placeholder when empty; shown on touch closed time segment',
|
|
609
624
|
timeLabel:
|
|
610
625
|
'accessible label for the time input; defaults to "{label} time"',
|
|
611
626
|
size: 'input control size',
|
|
612
627
|
status: 'error/warning/success status w/ message',
|
|
613
628
|
labelTooltip: 'tooltip text via info icon at label end',
|
|
614
|
-
numberOfMonths:
|
|
615
|
-
|
|
629
|
+
numberOfMonths:
|
|
630
|
+
'desktop calendar months shown simultaneously; ignored on mobile touch sheet',
|
|
631
|
+
weekStartsOn:
|
|
632
|
+
'first day of week in calendar (0=Sunday, or name e.g. "mon")',
|
|
616
633
|
xstyle: 'StyleX styles for layout; must be stylex.create() value',
|
|
617
634
|
},
|
|
618
635
|
};
|
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
import {describe, it, expect, vi, beforeEach, afterEach} from 'vitest';
|
|
13
13
|
import {render, screen, fireEvent, waitFor} from '@testing-library/react';
|
|
14
14
|
import userEvent from '@testing-library/user-event';
|
|
15
|
+
import * as stylex from '@stylexjs/stylex';
|
|
15
16
|
import {getButton, queryButton} from '../__tests__/fastRoleQueries';
|
|
16
17
|
import {DateTimeInput} from './DateTimeInput';
|
|
17
18
|
import type {ISODateTimeString} from './DateTimeInput';
|
|
@@ -33,12 +34,56 @@ function generateThemeTestCSS(theme: Parameters<typeof generateThemeCSS>[0]) {
|
|
|
33
34
|
const {prose, component} = generateThemeCSS(theme);
|
|
34
35
|
return [prose, component].filter(Boolean).join('\n\n');
|
|
35
36
|
}
|
|
37
|
+
|
|
38
|
+
// jsdom does not perform flex layout, so these probe classes verify the
|
|
39
|
+
// declarations that switch between horizontal and stacked intrinsic layouts.
|
|
40
|
+
const responsiveLayoutProbe = stylex.create({
|
|
41
|
+
responsiveRow: {
|
|
42
|
+
flexWrap: 'wrap',
|
|
43
|
+
},
|
|
44
|
+
responsiveSegment: {
|
|
45
|
+
flexBasis: 196,
|
|
46
|
+
minWidth: 0,
|
|
47
|
+
},
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
function expectResponsiveProbeClasses(
|
|
51
|
+
element: HTMLElement,
|
|
52
|
+
style: (typeof responsiveLayoutProbe)[keyof typeof responsiveLayoutProbe],
|
|
53
|
+
): void {
|
|
54
|
+
const classes = (stylex.props(style).className ?? '')
|
|
55
|
+
.split(' ')
|
|
56
|
+
.filter(className => className !== '' && !className.includes('__'));
|
|
57
|
+
expect(classes.length).toBeGreaterThan(0);
|
|
58
|
+
for (const className of classes) {
|
|
59
|
+
expect(element).toHaveClass(className);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
36
63
|
describe('DateTimeInput', () => {
|
|
37
64
|
it('renders with label', () => {
|
|
38
65
|
render(<DateTimeInput label="Meeting time" onChange={() => {}} />);
|
|
39
66
|
expect(screen.getByLabelText('Meeting time')).toBeInTheDocument();
|
|
40
67
|
});
|
|
41
68
|
|
|
69
|
+
it('updates the committed date display when provider locale changes', () => {
|
|
70
|
+
const renderDateTimeInput = (locale: 'en-US' | 'es-ES') => (
|
|
71
|
+
<InternationalizationProvider locale={locale}>
|
|
72
|
+
<DateTimeInput
|
|
73
|
+
label="Meeting"
|
|
74
|
+
value={'2026-01-25T14:30' as ISODateTimeString}
|
|
75
|
+
onChange={() => {}}
|
|
76
|
+
/>
|
|
77
|
+
</InternationalizationProvider>
|
|
78
|
+
);
|
|
79
|
+
const {rerender} = render(renderDateTimeInput('en-US'));
|
|
80
|
+
|
|
81
|
+
expect(screen.getByRole('combobox')).toHaveValue('January 25, 2026');
|
|
82
|
+
|
|
83
|
+
rerender(renderDateTimeInput('es-ES'));
|
|
84
|
+
expect(screen.getByRole('combobox')).toHaveValue('25 de enero de 2026');
|
|
85
|
+
});
|
|
86
|
+
|
|
42
87
|
it('derives the time input label from the field label (forms-15)', () => {
|
|
43
88
|
render(<DateTimeInput label="Meeting time" onChange={() => {}} />);
|
|
44
89
|
// Not a hardcoded "Time" — tied to the field label so it is localizable
|
|
@@ -97,6 +142,37 @@ describe('DateTimeInput', () => {
|
|
|
97
142
|
expect(screen.getByLabelText('Meeting time')).toBeInTheDocument();
|
|
98
143
|
});
|
|
99
144
|
|
|
145
|
+
it('allows the date and time segments to wrap when they no longer fit', () => {
|
|
146
|
+
const {container} = render(
|
|
147
|
+
<DateTimeInput label="Meeting" onChange={() => {}} />,
|
|
148
|
+
);
|
|
149
|
+
const row = container.querySelector(
|
|
150
|
+
'.astryx-date-time-input',
|
|
151
|
+
) as HTMLElement;
|
|
152
|
+
expect(row).not.toBeNull();
|
|
153
|
+
expectResponsiveProbeClasses(row, responsiveLayoutProbe.responsiveRow);
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
it('gives both segments the intrinsic wrap threshold and allows them to shrink', () => {
|
|
157
|
+
const {container} = render(
|
|
158
|
+
<DateTimeInput label="Meeting" onChange={() => {}} />,
|
|
159
|
+
);
|
|
160
|
+
const dateSegment = container.querySelector(
|
|
161
|
+
'.astryx-date-time-input-date-segment',
|
|
162
|
+
) as HTMLElement;
|
|
163
|
+
const timeSegment = container.querySelector(
|
|
164
|
+
'.astryx-date-time-input-time-segment',
|
|
165
|
+
) as HTMLElement;
|
|
166
|
+
expectResponsiveProbeClasses(
|
|
167
|
+
dateSegment,
|
|
168
|
+
responsiveLayoutProbe.responsiveSegment,
|
|
169
|
+
);
|
|
170
|
+
expectResponsiveProbeClasses(
|
|
171
|
+
timeSegment,
|
|
172
|
+
responsiveLayoutProbe.responsiveSegment,
|
|
173
|
+
);
|
|
174
|
+
});
|
|
175
|
+
|
|
100
176
|
it('does not commit the date on a composing Enter (IME)', () => {
|
|
101
177
|
const onChange = vi.fn();
|
|
102
178
|
render(<DateTimeInput label="Meeting" onChange={onChange} />);
|
|
@@ -4,20 +4,20 @@
|
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* @file DateTimeInput.tsx
|
|
7
|
-
* @input Uses React, Field, Calendar, usePopover, useAnnounce, time parsing utilities
|
|
7
|
+
* @input Uses React, Field, Calendar, usePopover, useAnnounce, time parsing utilities, TouchDateTimeField, StyleX intrinsic flex layout
|
|
8
8
|
* @output Exports DateTimeInput component, DateTimeInputProps
|
|
9
9
|
* @position Core implementation; consumed by index.ts, tested by DateTimeInput.test.tsx
|
|
10
10
|
*
|
|
11
11
|
* SYNC: When modified, update these files to stay in sync:
|
|
12
12
|
* - /packages/core/src/DateTimeInput/DateTimeInput.doc.mjs (props table, features, implementation notes)
|
|
13
|
-
* - /packages/core/src/DateTimeInput/DateTimeInput.test.tsx (tests for new/changed behavior)
|
|
13
|
+
* - /packages/core/src/DateTimeInput/DateTimeInput.test.tsx (desktop tests for new/changed behavior)
|
|
14
|
+
* - /packages/core/src/DateTimeInput/DateTimeInputTouch.test.tsx (touch-surface tests)
|
|
14
15
|
* - /packages/core/src/DateTimeInput/index.ts (exports if types change)
|
|
15
16
|
* - /apps/storybook/stories/DateTimeInput.stories.tsx (storybook stories)
|
|
16
17
|
* - /packages/cli/assets/templates/blocks/components/DateTimeInput/ (showcase blocks)
|
|
17
18
|
*/
|
|
18
19
|
|
|
19
20
|
import {
|
|
20
|
-
use,
|
|
21
21
|
useId,
|
|
22
22
|
useState,
|
|
23
23
|
useCallback,
|
|
@@ -38,7 +38,6 @@ import {
|
|
|
38
38
|
typographyVars,
|
|
39
39
|
typeScaleVars,
|
|
40
40
|
fontWeightVars,
|
|
41
|
-
borderVars,
|
|
42
41
|
} from '../theme/tokens.stylex';
|
|
43
42
|
import {
|
|
44
43
|
Field,
|
|
@@ -88,13 +87,15 @@ import {
|
|
|
88
87
|
import type {BaseProps} from '../BaseProps';
|
|
89
88
|
import type {SizeValue} from '../utils/types';
|
|
90
89
|
import {useAnnounce} from '../hooks/useAnnounce';
|
|
90
|
+
import {useMediaQuery} from '../hooks/useMediaQuery';
|
|
91
91
|
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
92
92
|
import {useSize} from '../SizeContext/SizeContext';
|
|
93
93
|
import {themeProps} from '../utils/themeProps';
|
|
94
94
|
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
95
|
-
import {
|
|
95
|
+
import {useLocale, useTranslator} from '../i18n';
|
|
96
96
|
|
|
97
97
|
import {useMergedRefs} from '../hooks/useMergedRefs';
|
|
98
|
+
import {TouchDateTimeField} from './TouchDateTimeField';
|
|
98
99
|
export type ISODateTimeString = string & {
|
|
99
100
|
readonly __brand: 'ISODateTimeString';
|
|
100
101
|
};
|
|
@@ -117,9 +118,14 @@ export type {
|
|
|
117
118
|
InputStatusType as DateTimeInputStatusType,
|
|
118
119
|
} from '../Field';
|
|
119
120
|
|
|
121
|
+
// Two 196px segments plus the 8px gap fit at exactly 400px. Below that,
|
|
122
|
+
// flex wrapping moves each growing segment onto its own full-width row.
|
|
123
|
+
const HORIZONTAL_SEGMENT_BASIS = 196;
|
|
124
|
+
|
|
120
125
|
const styles = stylex.create({
|
|
121
126
|
row: {
|
|
122
127
|
display: 'flex',
|
|
128
|
+
flexWrap: 'wrap',
|
|
123
129
|
gap: spacingVars['--spacing-2'],
|
|
124
130
|
},
|
|
125
131
|
iconButton: {
|
|
@@ -174,11 +180,13 @@ const styles = stylex.create({
|
|
|
174
180
|
},
|
|
175
181
|
dateWrapper: {
|
|
176
182
|
flex: 1,
|
|
177
|
-
flexBasis:
|
|
183
|
+
flexBasis: HORIZONTAL_SEGMENT_BASIS,
|
|
184
|
+
minWidth: 0,
|
|
178
185
|
},
|
|
179
186
|
timeWrapper: {
|
|
180
187
|
flex: 1,
|
|
181
|
-
flexBasis:
|
|
188
|
+
flexBasis: HORIZONTAL_SEGMENT_BASIS,
|
|
189
|
+
minWidth: 0,
|
|
182
190
|
},
|
|
183
191
|
// Preset-time list. Paddings and states mirror BaseTypeahead's dropdown and
|
|
184
192
|
// Selector's options so every list in the system reads the same.
|
|
@@ -362,25 +370,28 @@ export interface DateTimeInputProps extends Omit<
|
|
|
362
370
|
hourFormat?: DateTimeInputHourFormat;
|
|
363
371
|
|
|
364
372
|
/**
|
|
365
|
-
* Minutes added or subtracted when stepping the time field with the
|
|
366
|
-
* keys.
|
|
373
|
+
* Minutes added or subtracted when stepping the desktop time field with the
|
|
374
|
+
* arrow keys. Ignored on the mobile touch sheet, where time is changed with
|
|
375
|
+
* wheels. Constrained to a set of sensible increments.
|
|
367
376
|
* @default 1
|
|
368
377
|
*/
|
|
369
378
|
timeIncrement?: DateTimeInputTimeIncrement;
|
|
370
379
|
|
|
371
380
|
/**
|
|
372
|
-
* Minute cadence for a dropdown of preset times on the time field. Set
|
|
373
|
-
* turn the time field into a combobox listing every valid time at that
|
|
381
|
+
* Minute cadence for a dropdown of preset times on the desktop time field. Set
|
|
382
|
+
* it to turn the time field into a combobox listing every valid time at that
|
|
374
383
|
* cadence (`60` gives the 12 AM - 11 PM list, `15` a quarter-hour list).
|
|
375
384
|
*
|
|
376
|
-
* Omitted, the time field stays a plain text input: typed entry and
|
|
385
|
+
* Omitted, the desktop time field stays a plain text input: typed entry and
|
|
377
386
|
* arrow-key stepping only, with no combobox semantics added to the
|
|
378
|
-
* accessibility tree. Typed entry keeps working when the dropdown is on —
|
|
379
|
-
*
|
|
380
|
-
*
|
|
387
|
+
* accessibility tree. Typed entry keeps working when the dropdown is on — the
|
|
388
|
+
* list is a shortcut, not a restriction, so a time between two options can
|
|
389
|
+
* still be typed.
|
|
381
390
|
*
|
|
382
|
-
*
|
|
383
|
-
*
|
|
391
|
+
* Ignored on the mobile touch sheet, where the wheels expose every
|
|
392
|
+
* hour/minute/second. Independent of `timeIncrement`, which governs desktop
|
|
393
|
+
* arrow-key stepping. Setting both to the same value is the usual choice for
|
|
394
|
+
* scheduling flows on desktop.
|
|
384
395
|
*/
|
|
385
396
|
timeOptionInterval?: DateTimeInputTimeOptionInterval;
|
|
386
397
|
|
|
@@ -398,6 +409,7 @@ export interface DateTimeInputProps extends Omit<
|
|
|
398
409
|
|
|
399
410
|
/**
|
|
400
411
|
* Placeholder text shown in the time portion when no time is selected.
|
|
412
|
+
* On touch, this appears in the closed time segment before a time is chosen.
|
|
401
413
|
* @default "Select a time"
|
|
402
414
|
*/
|
|
403
415
|
timePlaceholder?: string;
|
|
@@ -432,7 +444,9 @@ export interface DateTimeInputProps extends Omit<
|
|
|
432
444
|
labelTooltip?: string;
|
|
433
445
|
|
|
434
446
|
/**
|
|
435
|
-
* Number of months to display in the calendar.
|
|
447
|
+
* Number of months to display in the desktop calendar popover. Ignored on the
|
|
448
|
+
* mobile touch sheet, whose Date panel always shows one swipe-paged month at a
|
|
449
|
+
* time.
|
|
436
450
|
* @default 1
|
|
437
451
|
*/
|
|
438
452
|
numberOfMonths?: 1 | 2;
|
|
@@ -497,7 +511,7 @@ function getDefaultTime(hasSeconds: boolean): ISOTimeString {
|
|
|
497
511
|
* />
|
|
498
512
|
* ```
|
|
499
513
|
*/
|
|
500
|
-
|
|
514
|
+
function PointerDateTimeField({
|
|
501
515
|
label,
|
|
502
516
|
isLabelHidden = false,
|
|
503
517
|
description,
|
|
@@ -533,8 +547,8 @@ export function DateTimeInput({
|
|
|
533
547
|
...rest
|
|
534
548
|
}: DateTimeInputProps) {
|
|
535
549
|
const t = useTranslator();
|
|
550
|
+
const locale = useLocale();
|
|
536
551
|
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
537
|
-
const {locale} = use(InternationalizationContext);
|
|
538
552
|
// Speaks arrow-key stepping results through the persistent live regions:
|
|
539
553
|
// stepping programmatically rewrites a plain textbox's value, which screen
|
|
540
554
|
// readers do not announce on their own (WCAG 4.1.2).
|
|
@@ -1690,4 +1704,24 @@ export function DateTimeInput({
|
|
|
1690
1704
|
);
|
|
1691
1705
|
}
|
|
1692
1706
|
|
|
1707
|
+
PointerDateTimeField.displayName = 'PointerDateTimeField';
|
|
1708
|
+
|
|
1709
|
+
const TOUCH_POINTER_QUERY = '(pointer: coarse)';
|
|
1710
|
+
|
|
1711
|
+
/**
|
|
1712
|
+
* A combined date and time picker that keeps the desktop text-entry surface on
|
|
1713
|
+
* mouse/trackpad devices and uses Astryx's custom bottom-sheet picker on coarse
|
|
1714
|
+
* pointers. Unlike DateInput, this never hands touch picking to the browser/OS:
|
|
1715
|
+
* the mobile flow has to coordinate date and time together, preserve drafted
|
|
1716
|
+
* time before a date exists, and enforce datetime min/max across both panels.
|
|
1717
|
+
*/
|
|
1718
|
+
export function DateTimeInput(props: DateTimeInputProps) {
|
|
1719
|
+
const isTouch = useMediaQuery(TOUCH_POINTER_QUERY);
|
|
1720
|
+
return isTouch ? (
|
|
1721
|
+
<TouchDateTimeField {...props} />
|
|
1722
|
+
) : (
|
|
1723
|
+
<PointerDateTimeField {...props} />
|
|
1724
|
+
);
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1693
1727
|
DateTimeInput.displayName = 'DateTimeInput';
|