@astryxdesign/core 0.5.0 → 0.5.1-canary.046f6ea
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/i18n/InternationalizationContext.d.ts +2 -0
- package/dist/i18n/InternationalizationContext.d.ts.map +1 -1
- package/dist/i18n/InternationalizationContext.js +3 -1
- package/dist/i18n/InternationalizationProvider.d.ts.map +1 -1
- package/dist/i18n/InternationalizationProvider.js +3 -1
- package/dist/i18n/resolve.d.ts +1 -1
- package/dist/i18n/resolve.d.ts.map +1 -1
- package/dist/i18n/resolve.js +37 -38
- package/dist/i18n/useTranslator.d.ts.map +1 -1
- package/dist/i18n/useTranslator.js +2 -3
- 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 +4 -4
- 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 +3 -1
- package/src/CheckboxInput/CheckboxInput.test.tsx +15 -0
- package/src/CheckboxInput/CheckboxInput.tsx +5 -0
- package/src/CheckboxList/CheckboxList.doc.mjs +1 -1
- 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 +9 -2
- package/src/ComplexSelector/ComplexSelector.test.tsx +183 -0
- package/src/ComplexSelector/ComplexSelector.tsx +22 -12
- package/src/DateInput/DateInput.doc.mjs +17 -1
- 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 +3 -3
- package/src/DateRangeInput/DateRangeInput.test.tsx +46 -0
- package/src/DateRangeInput/DateRangeInput.tsx +8 -13
- package/src/DateTimeInput/DateTimeInput.doc.mjs +39 -22
- 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/Field.doc.mjs +1 -1
- 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/FieldStatus/FieldStatus.doc.mjs +1 -1
- package/src/FileInput/FileInput.doc.mjs +1 -1
- 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 +3 -1
- package/src/InputGroup/InputGroup.doc.mjs +1 -1
- 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 +23 -2
- 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 +27 -8
- 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/PowerSearch.doc.mjs +1 -1
- 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/RadioList/RadioList.doc.mjs +1 -1
- 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 +15 -1
- 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.doc.mjs +2 -2
- 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 +3 -1
- 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 +13 -3
- package/src/TextArea/TextArea.test.tsx +11 -0
- package/src/TextArea/TextArea.tsx +34 -22
- package/src/TextInput/TextInput.doc.mjs +1 -1
- package/src/TimeInput/TimeInput.doc.mjs +1 -1
- 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 +17 -4
- 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 +7 -1
- 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/i18n/InternationalizationContext.ts +3 -0
- package/src/i18n/InternationalizationProvider.tsx +8 -1
- package/src/i18n/__tests__/resolve.test.ts +23 -1
- package/src/i18n/resolve.ts +46 -49
- package/src/i18n/useTranslator.ts +2 -7
- 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
|
@@ -38,6 +38,10 @@
|
|
|
38
38
|
* 3. The title is the escape hatch. Tap it and the same box becomes a month
|
|
39
39
|
* wheel and a year wheel — a flick each to reach 2019 instead of forty.
|
|
40
40
|
*
|
|
41
|
+
* Reset is chrome, so it sits in the header beside the arrows rather than in
|
|
42
|
+
* the footer: the footer is where the task ends, and an undo of equal weight
|
|
43
|
+
* beside Save is a mis-tap that throws away the date just chosen.
|
|
44
|
+
*
|
|
41
45
|
* SYNC: When modified, update these files to stay in sync:
|
|
42
46
|
* - /packages/core/src/DateInput/DateInput.tsx
|
|
43
47
|
* - /packages/core/src/DateInput/DateInput.doc.mjs
|
|
@@ -71,7 +75,7 @@ import {useInputStatusIcon, useMergedRefs} from '../hooks';
|
|
|
71
75
|
import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
72
76
|
import {Icon} from '../Icon';
|
|
73
77
|
import {IconButton} from '../IconButton';
|
|
74
|
-
import {useTranslator} from '../i18n';
|
|
78
|
+
import {useLocale, useTranslator} from '../i18n';
|
|
75
79
|
import {useInputGroup} from '../InputGroup';
|
|
76
80
|
import {groupStyles} from '../InputGroup/groupStyles';
|
|
77
81
|
import {stableClassName} from '../naming';
|
|
@@ -106,6 +110,7 @@ import {
|
|
|
106
110
|
DATE_FORMAT_WEEKDAY_ONLY,
|
|
107
111
|
type ISODateString,
|
|
108
112
|
} from '../utils';
|
|
113
|
+
import {interactionOverlayStyles} from '../utils/interactionOverlay.stylex';
|
|
109
114
|
import {normalizeDayOfWeek} from '../utils/dateTypes';
|
|
110
115
|
import {MonthScroller, type MonthScrollerHandle} from './MonthScroller';
|
|
111
116
|
import {MonthYearWheels} from './MonthYearWheels';
|
|
@@ -118,9 +123,8 @@ import {
|
|
|
118
123
|
import {dateInputTouchSizes, dateInputTouchGeometry} from './tokens.stylex';
|
|
119
124
|
|
|
120
125
|
/**
|
|
121
|
-
* The comfortable minimum tap target on both iOS and Android
|
|
122
|
-
*
|
|
123
|
-
* it means, it just cannot produce a control a thumb misses.
|
|
126
|
+
* The comfortable minimum tap target on both iOS and Android, honoured by
|
|
127
|
+
* every target inside the sheet.
|
|
124
128
|
*/
|
|
125
129
|
const TOUCH_TARGET = dateInputTouchSizes.daySize;
|
|
126
130
|
|
|
@@ -147,17 +151,14 @@ const sizeStyles = stylex.create({
|
|
|
147
151
|
sm: {
|
|
148
152
|
height: sizeVars['--size-element-sm'],
|
|
149
153
|
minWidth: 180,
|
|
150
|
-
minBlockSize: {default: null, '@media (pointer: coarse)': TOUCH_TARGET},
|
|
151
154
|
},
|
|
152
155
|
md: {
|
|
153
156
|
height: sizeVars['--size-element-md'],
|
|
154
157
|
minWidth: 180,
|
|
155
|
-
minBlockSize: {default: null, '@media (pointer: coarse)': TOUCH_TARGET},
|
|
156
158
|
},
|
|
157
159
|
lg: {
|
|
158
160
|
height: sizeVars['--size-element-lg'],
|
|
159
161
|
minWidth: 180,
|
|
160
|
-
minBlockSize: {default: null, '@media (pointer: coarse)': TOUCH_TARGET},
|
|
161
162
|
},
|
|
162
163
|
});
|
|
163
164
|
|
|
@@ -282,7 +283,7 @@ const styles = stylex.create({
|
|
|
282
283
|
/**
|
|
283
284
|
* `Button`'s own sizes top out at 36px, which is fine for a mouse and short
|
|
284
285
|
* of the 44px every other target in this sheet honours. Floor it on a
|
|
285
|
-
* coarse pointer, the same way the
|
|
286
|
+
* coarse pointer, the same way the day cells do.
|
|
286
287
|
*/
|
|
287
288
|
monthArrow: {
|
|
288
289
|
minBlockSize: {default: null, '@media (pointer: coarse)': TOUCH_TARGET},
|
|
@@ -297,6 +298,34 @@ const styles = stylex.create({
|
|
|
297
298
|
monthArrowIcon: {
|
|
298
299
|
display: 'inline-flex',
|
|
299
300
|
},
|
|
301
|
+
/**
|
|
302
|
+
* Reset, past the arrows. It fades on their timing for their reason: the
|
|
303
|
+
* plate starts below the header, so the two of them are what the layer
|
|
304
|
+
* above cannot cover, and they have to leave together.
|
|
305
|
+
*/
|
|
306
|
+
headerReset: {
|
|
307
|
+
display: 'flex',
|
|
308
|
+
alignItems: 'center',
|
|
309
|
+
transitionProperty: 'opacity, visibility',
|
|
310
|
+
transitionDuration: SWAP_DURATION,
|
|
311
|
+
transitionTimingFunction: 'linear',
|
|
312
|
+
'@media (prefers-reduced-motion: reduce)': {
|
|
313
|
+
transitionDuration: '0.01s',
|
|
314
|
+
},
|
|
315
|
+
},
|
|
316
|
+
headerResetHidden: {
|
|
317
|
+
visibility: 'hidden',
|
|
318
|
+
opacity: 0,
|
|
319
|
+
pointerEvents: 'none',
|
|
320
|
+
},
|
|
321
|
+
/**
|
|
322
|
+
* The same 44px floor the arrows take. `Button`'s `sm` is 32px, which is
|
|
323
|
+
* fine beside a mouse and short of what every other target in this sheet
|
|
324
|
+
* honours.
|
|
325
|
+
*/
|
|
326
|
+
resetButton: {
|
|
327
|
+
minBlockSize: {default: null, '@media (pointer: coarse)': TOUCH_TARGET},
|
|
328
|
+
},
|
|
300
329
|
/**
|
|
301
330
|
* The month and year, and the toggle into the wheels. Leading, so it reads
|
|
302
331
|
* first and sits on the same line as the day grid below it.
|
|
@@ -313,15 +342,7 @@ const styles = stylex.create({
|
|
|
313
342
|
borderWidth: 0,
|
|
314
343
|
borderStyle: 'none',
|
|
315
344
|
borderRadius: radiusVars['--radius-element'],
|
|
316
|
-
backgroundColor:
|
|
317
|
-
default: 'transparent',
|
|
318
|
-
'@media (hover: hover)': {
|
|
319
|
-
default: 'transparent',
|
|
320
|
-
':hover:where(:not(:disabled,[aria-disabled="true"]))':
|
|
321
|
-
colorVars['--color-overlay-hover'],
|
|
322
|
-
},
|
|
323
|
-
':active': colorVars['--color-overlay-pressed'],
|
|
324
|
-
},
|
|
345
|
+
backgroundColor: 'transparent',
|
|
325
346
|
color: colorVars['--color-text-primary'],
|
|
326
347
|
fontSize: typeScaleVars['--text-large-size'],
|
|
327
348
|
fontWeight: fontWeightVars['--font-weight-semibold'],
|
|
@@ -330,9 +351,19 @@ const styles = stylex.create({
|
|
|
330
351
|
':is(:disabled,[aria-disabled="true"])': 'default',
|
|
331
352
|
},
|
|
332
353
|
whiteSpace: 'nowrap',
|
|
354
|
+
// The header now ends with Reset, so the title is the part that gives:
|
|
355
|
+
// it ellipses rather than pushing the corner off a narrow screen.
|
|
356
|
+
minInlineSize: 0,
|
|
357
|
+
overflow: 'hidden',
|
|
358
|
+
},
|
|
359
|
+
titleText: {
|
|
360
|
+
minInlineSize: 0,
|
|
361
|
+
overflow: 'hidden',
|
|
362
|
+
textOverflow: 'ellipsis',
|
|
333
363
|
},
|
|
334
364
|
titleChevron: {
|
|
335
365
|
display: 'inline-flex',
|
|
366
|
+
flexShrink: 0,
|
|
336
367
|
// The one part of the swap that keeps `--ease-standard`, because it is
|
|
337
368
|
// the one part that travels: a rotation has a distance to cover, and
|
|
338
369
|
// fast-out-slow-in is what that curve is for. Same duration as the
|
|
@@ -479,16 +510,14 @@ const styles = stylex.create({
|
|
|
479
510
|
},
|
|
480
511
|
/**
|
|
481
512
|
* One footer action. Both occupy the same cell, and the wheels' one is a
|
|
482
|
-
* layer over the calendar's
|
|
513
|
+
* layer over the calendar's, exactly as the panels above are. The row
|
|
483
514
|
* never changes height either way.
|
|
484
515
|
*/
|
|
485
516
|
footerAction: {
|
|
486
517
|
gridArea: '1 / 1',
|
|
487
|
-
//
|
|
488
|
-
// wheels
|
|
489
|
-
// neither label's length decides how the row is divided.
|
|
518
|
+
// One button per surface, filling the row: Save on the calendar, Done on
|
|
519
|
+
// the wheels.
|
|
490
520
|
display: 'flex',
|
|
491
|
-
gap: spacingVars['--spacing-2'],
|
|
492
521
|
},
|
|
493
522
|
sheetBody: {
|
|
494
523
|
// One inset on every edge. The block-start is the exception and has to
|
|
@@ -545,6 +574,7 @@ export function TouchDateField({
|
|
|
545
574
|
...rest
|
|
546
575
|
}: DateInputProps) {
|
|
547
576
|
const t = useTranslator();
|
|
577
|
+
const locale = useLocale();
|
|
548
578
|
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
549
579
|
const placeholder =
|
|
550
580
|
placeholderFromProps ?? t('@astryx.dateInput.placeholder');
|
|
@@ -670,13 +700,15 @@ export function TouchDateField({
|
|
|
670
700
|
plainDateFormat(
|
|
671
701
|
{year: 1970, month: 1, day: 4 + ((weekStartsOn + offset) % 7)},
|
|
672
702
|
DATE_FORMAT_WEEKDAY_ONLY,
|
|
703
|
+
locale,
|
|
673
704
|
),
|
|
674
705
|
),
|
|
675
|
-
[weekStartsOn],
|
|
706
|
+
[locale, weekStartsOn],
|
|
676
707
|
);
|
|
677
708
|
const monthYearLabel = plainDateFormat(
|
|
678
709
|
{year, month, day: 1},
|
|
679
710
|
DATE_FORMAT_MONTH_YEAR,
|
|
711
|
+
locale,
|
|
680
712
|
);
|
|
681
713
|
|
|
682
714
|
// Formats the committed value only. A function format is called with the ISO
|
|
@@ -686,7 +718,7 @@ export function TouchDateField({
|
|
|
686
718
|
optimisticValue != null && /^\d{4}-\d{2}-\d{2}$/.test(optimisticValue)
|
|
687
719
|
? typeof format === 'function'
|
|
688
720
|
? format(optimisticValue)
|
|
689
|
-
: formatSharedDate(plainDateFromISO(optimisticValue), format)
|
|
721
|
+
: formatSharedDate(plainDateFromISO(optimisticValue), format, locale)
|
|
690
722
|
: '';
|
|
691
723
|
|
|
692
724
|
const fireChange = useCallback(
|
|
@@ -918,8 +950,12 @@ export function TouchDateField({
|
|
|
918
950
|
// restyle the header button. Adding a target later is additive;
|
|
919
951
|
// withdrawing one is not.
|
|
920
952
|
data-title="month-year"
|
|
921
|
-
{...stylex.props(
|
|
922
|
-
|
|
953
|
+
{...stylex.props(
|
|
954
|
+
styles.title,
|
|
955
|
+
interactionOverlayStyles.backgroundColor,
|
|
956
|
+
focusOutlineStyles.focusVisible,
|
|
957
|
+
)}>
|
|
958
|
+
<span {...stylex.props(styles.titleText)}>{monthYearLabel}</span>
|
|
923
959
|
<Icon
|
|
924
960
|
icon="chevronDown"
|
|
925
961
|
size="sm"
|
|
@@ -983,6 +1019,27 @@ export function TouchDateField({
|
|
|
983
1019
|
}
|
|
984
1020
|
/>
|
|
985
1021
|
</span>
|
|
1022
|
+
{/* Reset, past the arrows, and gone with them on the wheels: the
|
|
1023
|
+
wheels choose a month, and there is no date there to put back.
|
|
1024
|
+
Hidden rather than unmounted, for the arrows' reason — the corner
|
|
1025
|
+
keeps its size, so the header cannot change height mid-swap. */}
|
|
1026
|
+
<span
|
|
1027
|
+
data-action="reset"
|
|
1028
|
+
inert={isWheelOpen ? true : undefined}
|
|
1029
|
+
{...stylex.props(
|
|
1030
|
+
styles.headerReset,
|
|
1031
|
+
isWheelOpen && styles.headerResetHidden,
|
|
1032
|
+
)}>
|
|
1033
|
+
<Button
|
|
1034
|
+
// ghost: a filled button up here would outrank the Save that
|
|
1035
|
+
// finishes the task.
|
|
1036
|
+
variant="ghost"
|
|
1037
|
+
size="sm"
|
|
1038
|
+
xstyle={styles.resetButton}
|
|
1039
|
+
label={t('@astryx.dateInput.resetPicking')}
|
|
1040
|
+
onClick={handleResetInSheet}
|
|
1041
|
+
/>
|
|
1042
|
+
</span>
|
|
986
1043
|
</div>
|
|
987
1044
|
|
|
988
1045
|
{/* Decorative: each day carries its weekday in its accessible name, so
|
|
@@ -1077,13 +1134,6 @@ export function TouchDateField({
|
|
|
1077
1134
|
styles.panelBeneath,
|
|
1078
1135
|
isWheelOpen && styles.panelBeneathHidden,
|
|
1079
1136
|
)}>
|
|
1080
|
-
<Button
|
|
1081
|
-
variant="secondary"
|
|
1082
|
-
size="md"
|
|
1083
|
-
width="100%"
|
|
1084
|
-
label={t('@astryx.dateInput.resetPicking')}
|
|
1085
|
-
onClick={handleResetInSheet}
|
|
1086
|
-
/>
|
|
1087
1137
|
<Button
|
|
1088
1138
|
variant="primary"
|
|
1089
1139
|
// md, not sm: it is the action a thumb reaches for, so it gets
|
package/src/DateInput/Wheel.tsx
CHANGED
|
@@ -28,6 +28,7 @@
|
|
|
28
28
|
*
|
|
29
29
|
* SYNC: When modified, update:
|
|
30
30
|
* - /packages/core/src/DateInput/TouchDateField.tsx
|
|
31
|
+
* - /packages/core/src/DateTimeInput/TouchDateTimeField.tsx
|
|
31
32
|
* - /packages/core/src/DateInput/DateInput.doc.mjs
|
|
32
33
|
* - /packages/core/src/DateInput/DateInputTouch.test.tsx
|
|
33
34
|
*/
|
package/src/DateInput/index.ts
CHANGED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
// Copyright (c) Meta Platforms, Inc. and affiliates.
|
|
2
|
+
|
|
3
|
+
'use client';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @file nativeDateSegments.ts
|
|
7
|
+
* @input Uses the DOM only
|
|
8
|
+
* @output Exports hasEditableDateSegments, resetDateSegmentProbe
|
|
9
|
+
* @position Internal helper for NativeDateField; answers "can the user type
|
|
10
|
+
* into this engine's `<input type="date">`?"
|
|
11
|
+
*
|
|
12
|
+
* `<input type="date">` is two different controls wearing one tag name: a
|
|
13
|
+
* single untypable run the OS picker drives (iOS, Android), or a row of
|
|
14
|
+
* editable `mm`/`dd`/`yyyy` fields (desktop engines). Hiding the first costs
|
|
15
|
+
* nothing; hiding the second hides what the user is editing.
|
|
16
|
+
*
|
|
17
|
+
* Neither obvious test tells them apart. The pointer is wrong on Chrome's
|
|
18
|
+
* touch simulator, a Windows tablet and a ChromeOS convertible, which report
|
|
19
|
+
* a coarse pointer while Blink still renders segments. And measured, iOS and
|
|
20
|
+
* Chromium BOTH accept every `-webkit-datetime-*` selector, so
|
|
21
|
+
* `CSS.supports('selector(...)')` only proves the parser knows the name. What
|
|
22
|
+
* separates them is which pseudo is a real box, so this measures that.
|
|
23
|
+
*
|
|
24
|
+
* SYNC: When modified, update these files to stay in sync:
|
|
25
|
+
* - /packages/core/src/DateInput/NativeDateField.tsx (the caller)
|
|
26
|
+
* - /packages/core/src/DateInput/NativeDateField.test.tsx (tests)
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
/** Marks the throwaway probe element for the probe stylesheet. */
|
|
30
|
+
const PROBE_ATTR = 'data-astryx-date-probe';
|
|
31
|
+
|
|
32
|
+
/** How much padding the probe adds, in px. Large enough to beat rounding. */
|
|
33
|
+
const PROBE_PADDING = 100;
|
|
34
|
+
|
|
35
|
+
type EngineKind = 'segmented' | 'picker-only' | 'unknown';
|
|
36
|
+
|
|
37
|
+
let cachedEngine: EngineKind | null = null;
|
|
38
|
+
|
|
39
|
+
/** Whether padding this pseudo-element moves the control's box. */
|
|
40
|
+
function pseudoIsRealBox(
|
|
41
|
+
input: HTMLInputElement,
|
|
42
|
+
style: HTMLStyleElement,
|
|
43
|
+
pseudo: string,
|
|
44
|
+
baseWidth: number,
|
|
45
|
+
): boolean {
|
|
46
|
+
style.textContent = `[${PROBE_ATTR}]${pseudo}{padding-inline-start:${PROBE_PADDING}px !important}`;
|
|
47
|
+
// Reading geometry flushes style and layout, so this already reflects it.
|
|
48
|
+
return input.getBoundingClientRect().width > baseWidth + PROBE_PADDING / 2;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Classifies the engine's date control. Cached: the answer is a build-time
|
|
53
|
+
* property of the browser, not of the field or the pointer in use.
|
|
54
|
+
*/
|
|
55
|
+
function probeEngine(): EngineKind {
|
|
56
|
+
if (cachedEngine !== null) {
|
|
57
|
+
return cachedEngine;
|
|
58
|
+
}
|
|
59
|
+
if (typeof document === 'undefined' || !document.body) {
|
|
60
|
+
return 'unknown';
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const input = document.createElement('input');
|
|
64
|
+
input.setAttribute('type', 'date');
|
|
65
|
+
input.setAttribute(PROBE_ATTR, '');
|
|
66
|
+
// Off-screen, and immune to the page's own `input` rules: the probe reads a
|
|
67
|
+
// width DELTA, so anything pinning the width would swallow the signal.
|
|
68
|
+
input.style.cssText =
|
|
69
|
+
'position:fixed;top:-9999px;left:0;width:auto;min-width:0;max-width:none;' +
|
|
70
|
+
'padding:0;border:0;font-size:16px;box-sizing:content-box;';
|
|
71
|
+
|
|
72
|
+
const style = document.createElement('style');
|
|
73
|
+
|
|
74
|
+
let kind: EngineKind = 'unknown';
|
|
75
|
+
try {
|
|
76
|
+
document.body.appendChild(input);
|
|
77
|
+
document.head.appendChild(style);
|
|
78
|
+
const base = input.getBoundingClientRect().width;
|
|
79
|
+
if (pseudoIsRealBox(input, style, '::-webkit-datetime-edit', base)) {
|
|
80
|
+
// Chromium's editable field row, and WebKit's on macOS/GTK. Probe the
|
|
81
|
+
// container: the individual field pseudos overflow it rather than
|
|
82
|
+
// expand it, so they do not move the box even in Chromium.
|
|
83
|
+
kind = 'segmented';
|
|
84
|
+
} else if (
|
|
85
|
+
pseudoIsRealBox(input, style, '::-webkit-date-and-time-value', base)
|
|
86
|
+
) {
|
|
87
|
+
// The single, untypable run iOS Safari and Chrome on Android paint.
|
|
88
|
+
kind = 'picker-only';
|
|
89
|
+
}
|
|
90
|
+
} catch {
|
|
91
|
+
// A hostile CSSOM leaves the answer unknown, resolved by the pointer.
|
|
92
|
+
} finally {
|
|
93
|
+
input.remove();
|
|
94
|
+
style.remove();
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
cachedEngine = kind;
|
|
98
|
+
return kind;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Whether the user can type into this engine's `<input type="date">`.
|
|
103
|
+
*
|
|
104
|
+
* Firefox exposes neither pseudo-element, so it — and any future engine —
|
|
105
|
+
* comes back `'unknown'` and the pointer breaks the tie. That is the right
|
|
106
|
+
* fallback precisely where the probe is blind: the pointer is wrong for
|
|
107
|
+
* Chromium because Blink's answer is fixed at build time and contradicts it,
|
|
108
|
+
* and an engine we cannot see is not in that position. It lands Firefox on
|
|
109
|
+
* the desktop (segmented) and on Android (picker-only) correctly.
|
|
110
|
+
*
|
|
111
|
+
* @param isTouchPointer Whether `(pointer: coarse)` matches.
|
|
112
|
+
* @internal Exported for tests.
|
|
113
|
+
*/
|
|
114
|
+
export function hasEditableDateSegments(isTouchPointer: boolean): boolean {
|
|
115
|
+
const engine = probeEngine();
|
|
116
|
+
return engine === 'unknown' ? !isTouchPointer : engine === 'segmented';
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/**
|
|
120
|
+
* Drops the cached classification.
|
|
121
|
+
*
|
|
122
|
+
* @internal Exists for tests, which render against several engines in one
|
|
123
|
+
* document.
|
|
124
|
+
*/
|
|
125
|
+
export function resetDateSegmentProbe(): void {
|
|
126
|
+
cachedEngine = null;
|
|
127
|
+
}
|
|
@@ -6,7 +6,7 @@ export const docs = {
|
|
|
6
6
|
name: 'DateRangeInput',
|
|
7
7
|
displayName: 'Date Range Input',
|
|
8
8
|
group: 'DateInput',
|
|
9
|
-
category: '
|
|
9
|
+
category: 'Form Controls',
|
|
10
10
|
keywords: [
|
|
11
11
|
'daterangepicker',
|
|
12
12
|
'daterange',
|
|
@@ -108,7 +108,7 @@ export const docs = {
|
|
|
108
108
|
name: 'minRangeSpan',
|
|
109
109
|
type: 'number',
|
|
110
110
|
description:
|
|
111
|
-
'Minimum days a selected range must span, counting both endpoints (`2` forbids a single-day range). Once a start is picked, days closer than this are disabled. Defaults to 1 (same-day start and end allowed).',
|
|
111
|
+
'Minimum days a selected range must span, counting both endpoints (`2` forbids a single-day range). Once a start is picked, days closer than this are disabled. Clicking the start again commits a one-day range when allowed, or cancels the in-progress selection when the minimum is longer. Defaults to 1 (same-day start and end allowed).',
|
|
112
112
|
},
|
|
113
113
|
{
|
|
114
114
|
name: 'presets',
|
|
@@ -328,7 +328,7 @@ export const docsDense = {
|
|
|
328
328
|
maxRangeSpan:
|
|
329
329
|
'max days a range may span, both endpoints counted (7 = a 7-day window); caps the window from the picked start. Selection-only; does not rewrite an over-wide value',
|
|
330
330
|
minRangeSpan:
|
|
331
|
-
'min days a range must span, both endpoints counted (2 forbids a single-day range); default 1',
|
|
331
|
+
'min days a range must span, both endpoints counted (2 forbids a single-day range); repeated start click commits one day when allowed, otherwise cancels; default 1',
|
|
332
332
|
presets: 'preset ranges as quick-select options',
|
|
333
333
|
hasClear: 'clear button when range is set (default true)',
|
|
334
334
|
placeholder: 'placeholder when empty',
|
|
@@ -27,6 +27,7 @@ import type {DateRange} from './DateRangeInput';
|
|
|
27
27
|
import {Icon} from '../Icon';
|
|
28
28
|
import {defineTheme} from '../theme/defineTheme';
|
|
29
29
|
import {generateThemeCSS} from '../theme/generateThemeRules';
|
|
30
|
+
import {InternationalizationProvider} from '../i18n';
|
|
30
31
|
|
|
31
32
|
describe('DateRangeInput', () => {
|
|
32
33
|
it('renders with label', () => {
|
|
@@ -72,6 +73,29 @@ describe('DateRangeInput', () => {
|
|
|
72
73
|
expect(trigger.textContent).toMatch(/22/);
|
|
73
74
|
});
|
|
74
75
|
|
|
76
|
+
it('updates the committed range display when provider locale changes', () => {
|
|
77
|
+
const range: DateRange = {
|
|
78
|
+
start: '2025-01-02',
|
|
79
|
+
end: '2025-01-05',
|
|
80
|
+
};
|
|
81
|
+
const renderDateRangeInput = (locale: 'en-US' | 'es-ES') => (
|
|
82
|
+
<InternationalizationProvider locale={locale}>
|
|
83
|
+
<DateRangeInput
|
|
84
|
+
label="Range"
|
|
85
|
+
value={range}
|
|
86
|
+
onChange={() => {}}
|
|
87
|
+
hasClear={false}
|
|
88
|
+
/>
|
|
89
|
+
</InternationalizationProvider>
|
|
90
|
+
);
|
|
91
|
+
const {rerender} = render(renderDateRangeInput('en-US'));
|
|
92
|
+
|
|
93
|
+
expect(screen.getByText('Jan 2, 2025 – Jan 5, 2025')).toBeInTheDocument();
|
|
94
|
+
|
|
95
|
+
rerender(renderDateRangeInput('es-ES'));
|
|
96
|
+
expect(screen.getByText('2 ene 2025 – 5 ene 2025')).toBeInTheDocument();
|
|
97
|
+
});
|
|
98
|
+
|
|
75
99
|
it('forwards ref to trigger button', () => {
|
|
76
100
|
const ref = vi.fn();
|
|
77
101
|
render(
|
|
@@ -730,6 +754,28 @@ describe('DateRangeInput range-span forwarding', () => {
|
|
|
730
754
|
const dayButton = (iso: string): HTMLButtonElement | null =>
|
|
731
755
|
document.querySelector<HTMLButtonElement>(`button[data-date="${iso}"]`);
|
|
732
756
|
|
|
757
|
+
it('allows selecting a one-day range when minRangeSpan is 1', () => {
|
|
758
|
+
const handleChange = vi.fn();
|
|
759
|
+
render(
|
|
760
|
+
<DateRangeInput
|
|
761
|
+
label="Reporting period"
|
|
762
|
+
value={null}
|
|
763
|
+
onChange={handleChange}
|
|
764
|
+
minRangeSpan={1}
|
|
765
|
+
numberOfMonths={1}
|
|
766
|
+
/>,
|
|
767
|
+
);
|
|
768
|
+
|
|
769
|
+
fireEvent.click(getButton('Open calendar'));
|
|
770
|
+
fireEvent.click(dayButton('2026-01-10') as HTMLButtonElement);
|
|
771
|
+
fireEvent.click(dayButton('2026-01-10') as HTMLButtonElement);
|
|
772
|
+
|
|
773
|
+
expect(handleChange).toHaveBeenCalledWith({
|
|
774
|
+
start: '2026-01-10',
|
|
775
|
+
end: '2026-01-10',
|
|
776
|
+
});
|
|
777
|
+
});
|
|
778
|
+
|
|
733
779
|
it('forwards maxRangeSpan so the window caps after a start is picked', () => {
|
|
734
780
|
render(
|
|
735
781
|
<DateRangeInput
|
|
@@ -16,14 +16,7 @@
|
|
|
16
16
|
* - /packages/cli/assets/templates/blocks/components/DateRangeInput/ (showcase blocks)
|
|
17
17
|
*/
|
|
18
18
|
|
|
19
|
-
import {
|
|
20
|
-
use,
|
|
21
|
-
useId,
|
|
22
|
-
useCallback,
|
|
23
|
-
useMemo,
|
|
24
|
-
useOptimistic,
|
|
25
|
-
useTransition,
|
|
26
|
-
} from 'react';
|
|
19
|
+
import {useId, useCallback, useMemo, useOptimistic, useTransition} from 'react';
|
|
27
20
|
import * as stylex from '@stylexjs/stylex';
|
|
28
21
|
import {
|
|
29
22
|
plainDateFromISO,
|
|
@@ -72,7 +65,7 @@ import {useResolvedRequired} from '../hooks/useResolvedRequired';
|
|
|
72
65
|
import {themeProps} from '../utils/themeProps';
|
|
73
66
|
import {focusOutlineStyles} from '../utils/focusOutline.stylex';
|
|
74
67
|
import {stableClassName} from '../naming';
|
|
75
|
-
import {
|
|
68
|
+
import {useLocale, useTranslator} from '../i18n';
|
|
76
69
|
import type {Locale} from '../i18n/types';
|
|
77
70
|
|
|
78
71
|
export type {DateRange} from '../Calendar';
|
|
@@ -202,7 +195,7 @@ const sizeStyles = stylex.create({
|
|
|
202
195
|
},
|
|
203
196
|
});
|
|
204
197
|
|
|
205
|
-
function formatRangeDisplay(range: DateRange | null, locale
|
|
198
|
+
function formatRangeDisplay(range: DateRange | null, locale: Locale): string {
|
|
206
199
|
if (!range) {
|
|
207
200
|
return '';
|
|
208
201
|
}
|
|
@@ -374,8 +367,10 @@ export interface DateRangeInputProps extends Omit<
|
|
|
374
367
|
* Minimum number of days the selected range must span, counting both
|
|
375
368
|
* endpoints — `minRangeSpan={2}` forbids a single-day range. Once a start
|
|
376
369
|
* date is picked, days closer than this to it are disabled — except the
|
|
377
|
-
* start itself, which stays selectable
|
|
378
|
-
*
|
|
370
|
+
* start itself, which stays selectable. Clicking the start again commits a
|
|
371
|
+
* one-day range when the minimum allows it; otherwise it cancels the
|
|
372
|
+
* in-progress selection so the start can be moved. Defaults to 1 (a
|
|
373
|
+
* same-day start and end is allowed).
|
|
379
374
|
*/
|
|
380
375
|
minRangeSpan?: number;
|
|
381
376
|
|
|
@@ -491,8 +486,8 @@ export function DateRangeInput({
|
|
|
491
486
|
...rest
|
|
492
487
|
}: DateRangeInputProps) {
|
|
493
488
|
const t = useTranslator();
|
|
489
|
+
const locale = useLocale();
|
|
494
490
|
const isEffectivelyRequired = useResolvedRequired({isRequired, isOptional});
|
|
495
|
-
const {locale} = use(InternationalizationContext);
|
|
496
491
|
const placeholder =
|
|
497
492
|
placeholderFromProps ?? t('@astryx.dateRangeInput.placeholder');
|
|
498
493
|
const size = useSize(sizeProp, 'md');
|