@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
|
@@ -556,12 +556,18 @@ export function TextArea({
|
|
|
556
556
|
onClick={handleWrapperClick}
|
|
557
557
|
onMouseUp={handleWrapperMouseUp}
|
|
558
558
|
{...mergeProps(
|
|
559
|
-
themeProps(
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
559
|
+
themeProps(
|
|
560
|
+
'text-area',
|
|
561
|
+
{
|
|
562
|
+
size,
|
|
563
|
+
status: status?.type ?? null,
|
|
564
|
+
disabled: isDisabled ? 'disabled' : null,
|
|
565
|
+
readonly: isReadOnly ? 'readonly' : null,
|
|
566
|
+
},
|
|
567
|
+
// `textarea` ran the compound name together; themes styling it
|
|
568
|
+
// keep working until the next major.
|
|
569
|
+
{legacyNames: ['textarea']},
|
|
570
|
+
),
|
|
565
571
|
stylex.props(
|
|
566
572
|
inputWrapperStyles.base,
|
|
567
573
|
styles.wrapper,
|
|
@@ -609,19 +615,22 @@ export function TextArea({
|
|
|
609
615
|
: undefined
|
|
610
616
|
}
|
|
611
617
|
aria-busy={isBusy || undefined}
|
|
612
|
-
{...
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
618
|
+
{...mergeProps(
|
|
619
|
+
themeProps('text-area-control'),
|
|
620
|
+
stylex.props(
|
|
621
|
+
styles.textarea,
|
|
622
|
+
textareaSizeStyles[size],
|
|
623
|
+
isDisabled && styles.textareaDisabled,
|
|
624
|
+
Boolean(startIcon) && styles.textareaWithStartIcon,
|
|
625
|
+
// Reserve trailing space only when the end slot actually renders
|
|
626
|
+
// something (spinner or on-field status icon). The `detached`
|
|
627
|
+
// status variant suppresses the on-field icon — its glyph lives
|
|
628
|
+
// in the message box below — so reserving here would inset the
|
|
629
|
+
// text for an icon that never appears.
|
|
630
|
+
(isBusy || statusIcon != null) && styles.textareaWithStatus,
|
|
631
|
+
isBusy && statusIcon != null && styles.textareaWithBusyStatus,
|
|
632
|
+
maxLength != null && styles.textareaWithCounter,
|
|
633
|
+
),
|
|
625
634
|
)}
|
|
626
635
|
/>
|
|
627
636
|
{(isBusy || statusIcon) && (
|
|
@@ -633,9 +642,12 @@ export function TextArea({
|
|
|
633
642
|
{maxLength != null && (
|
|
634
643
|
<div
|
|
635
644
|
id={counterID}
|
|
636
|
-
{...
|
|
637
|
-
|
|
638
|
-
|
|
645
|
+
{...mergeProps(
|
|
646
|
+
themeProps('text-area-counter'),
|
|
647
|
+
stylex.props(
|
|
648
|
+
styles.counter,
|
|
649
|
+
valueLength > maxLength && styles.counterError,
|
|
650
|
+
),
|
|
639
651
|
)}>
|
|
640
652
|
{valueLength > maxLength && (
|
|
641
653
|
// Non-color cue so the over-limit state isn't conveyed by the red
|
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
import {render, screen, act, waitFor, fireEvent} from '@testing-library/react';
|
|
13
13
|
import userEvent from '@testing-library/user-event';
|
|
14
14
|
import {Timestamp} from './Timestamp';
|
|
15
|
+
import {formatInstant} from './formatInstant';
|
|
15
16
|
import {formatTooltipLines} from './tooltipEntries';
|
|
16
17
|
import {__resetLiveRegionsForTest} from '../hooks/useAnnounce';
|
|
17
18
|
import {InternationalizationProvider} from '../i18n';
|
|
@@ -277,6 +278,36 @@ describe('Timestamp', () => {
|
|
|
277
278
|
expect(screen.getByTestId('ts')).toHaveTextContent('25. Januar 2026');
|
|
278
279
|
});
|
|
279
280
|
|
|
281
|
+
it.each(['full', 'date', 'date_long', 'date_weekday', 'date_time'] as const)(
|
|
282
|
+
'keeps Gregorian years for the %s format under a non-Gregorian locale',
|
|
283
|
+
format => {
|
|
284
|
+
const value = formatInstant(
|
|
285
|
+
new Date('2026-08-22T12:00:00Z'),
|
|
286
|
+
format,
|
|
287
|
+
'th-TH',
|
|
288
|
+
{timeZone: 'UTC'},
|
|
289
|
+
);
|
|
290
|
+
expect(value).toContain('2026');
|
|
291
|
+
expect(value).not.toContain('2569');
|
|
292
|
+
},
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
it('keeps Gregorian years in Timestamp output under a non-Gregorian locale', () => {
|
|
296
|
+
render(
|
|
297
|
+
<InternationalizationProvider locale="th-TH">
|
|
298
|
+
<Timestamp
|
|
299
|
+
value="2026-08-22T12:00:00Z"
|
|
300
|
+
format="date_long"
|
|
301
|
+
hasTooltip={false}
|
|
302
|
+
data-testid="ts"
|
|
303
|
+
/>
|
|
304
|
+
</InternationalizationProvider>,
|
|
305
|
+
);
|
|
306
|
+
|
|
307
|
+
expect(screen.getByTestId('ts')).toHaveTextContent('2026');
|
|
308
|
+
expect(screen.getByTestId('ts')).not.toHaveTextContent('2569');
|
|
309
|
+
});
|
|
310
|
+
|
|
280
311
|
it('renders date format', () => {
|
|
281
312
|
render(
|
|
282
313
|
<Timestamp value="2026-02-19T17:00:00Z" format="date" data-testid="ts" />,
|
|
@@ -673,6 +704,24 @@ describe('Timestamp', () => {
|
|
|
673
704
|
expect(screen.getByTestId('ts')).toHaveAttribute('tabindex', '0');
|
|
674
705
|
});
|
|
675
706
|
|
|
707
|
+
it('does not put aria-expanded on the role-less hover-card trigger', async () => {
|
|
708
|
+
render(
|
|
709
|
+
<Timestamp
|
|
710
|
+
value={Date.now() / 1000 - 3600}
|
|
711
|
+
format="relative"
|
|
712
|
+
data-testid="ts"
|
|
713
|
+
/>,
|
|
714
|
+
);
|
|
715
|
+
const trigger = screen.getByTestId('ts').parentElement;
|
|
716
|
+
// The trigger is Text's <span>, which has no role, so aria-expanded is
|
|
717
|
+
// invalid on it (axe aria-allowed-attr, critical). aria-haspopup is
|
|
718
|
+
// global and still advertises the dialog.
|
|
719
|
+
await waitFor(() => {
|
|
720
|
+
expect(trigger).toHaveAttribute('aria-haspopup', 'dialog');
|
|
721
|
+
});
|
|
722
|
+
expect(trigger).not.toHaveAttribute('aria-expanded');
|
|
723
|
+
});
|
|
724
|
+
|
|
676
725
|
it('shows the hover card when the timestamp receives keyboard focus', async () => {
|
|
677
726
|
const user = userEvent.setup();
|
|
678
727
|
render(
|
|
@@ -1305,3 +1354,43 @@ describe('Timestamp', () => {
|
|
|
1305
1354
|
});
|
|
1306
1355
|
});
|
|
1307
1356
|
});
|
|
1357
|
+
|
|
1358
|
+
describe('Timestamp pass-through props', () => {
|
|
1359
|
+
it('forwards pass-through props to the time element', () => {
|
|
1360
|
+
render(
|
|
1361
|
+
<Timestamp
|
|
1362
|
+
value="2024-01-15T10:30:00Z"
|
|
1363
|
+
format="date_time"
|
|
1364
|
+
aria-label="Published"
|
|
1365
|
+
id="published-at"
|
|
1366
|
+
data-source="cms"
|
|
1367
|
+
data-testid="stamp"
|
|
1368
|
+
/>,
|
|
1369
|
+
);
|
|
1370
|
+
const time = screen.getByTestId('stamp');
|
|
1371
|
+
expect(time.tagName).toBe('TIME');
|
|
1372
|
+
expect(time).toHaveAttribute('aria-label', 'Published');
|
|
1373
|
+
expect(time).toHaveAttribute('id', 'published-at');
|
|
1374
|
+
expect(time).toHaveAttribute('data-source', 'cms');
|
|
1375
|
+
});
|
|
1376
|
+
|
|
1377
|
+
it('keeps its own spelled-out label on a relative timestamp', () => {
|
|
1378
|
+
render(
|
|
1379
|
+
<Timestamp
|
|
1380
|
+
value={Date.now()}
|
|
1381
|
+
format="relative"
|
|
1382
|
+
aria-label="Caller label"
|
|
1383
|
+
data-source="cms"
|
|
1384
|
+
data-testid="stamp"
|
|
1385
|
+
/>,
|
|
1386
|
+
);
|
|
1387
|
+
const stamp = screen.getByTestId('stamp');
|
|
1388
|
+
expect({
|
|
1389
|
+
ariaLabel: stamp.getAttribute('aria-label'),
|
|
1390
|
+
dataSource: stamp.getAttribute('data-source'),
|
|
1391
|
+
}).toEqual({
|
|
1392
|
+
ariaLabel: expect.not.stringMatching(/^Caller label$/),
|
|
1393
|
+
dataSource: 'cms',
|
|
1394
|
+
});
|
|
1395
|
+
});
|
|
1396
|
+
});
|
|
@@ -419,6 +419,7 @@ export function Timestamp({
|
|
|
419
419
|
style,
|
|
420
420
|
ref,
|
|
421
421
|
'data-testid': testId,
|
|
422
|
+
...rest
|
|
422
423
|
}: TimestampProps) {
|
|
423
424
|
const t = useTranslator();
|
|
424
425
|
const locale = useLocale();
|
|
@@ -530,15 +531,16 @@ export function Timestamp({
|
|
|
530
531
|
<time
|
|
531
532
|
ref={mergedTimeRef}
|
|
532
533
|
dateTime={isoString}
|
|
534
|
+
data-testid={testId}
|
|
535
|
+
{...stylex.props(styles.time)}
|
|
536
|
+
{...rest}
|
|
533
537
|
// `ariaLabelText` is '' only for an invalid date, which bails out
|
|
534
538
|
// before rendering — but keep the guard local: an empty aria-label
|
|
535
539
|
// must be omitted entirely (not rendered as aria-label="") so AT
|
|
536
540
|
// falls back to reading the visible <time> content.
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
: undefined
|
|
541
|
-
}
|
|
541
|
+
{...(isRelativeFormat(effectiveFormat) && ariaLabelText !== ''
|
|
542
|
+
? {'aria-label': ariaLabelText}
|
|
543
|
+
: {})}
|
|
542
544
|
// The hover card is anchored here with focusTrigger="always", which
|
|
543
545
|
// attaches focus listeners but does not itself make the anchor
|
|
544
546
|
// focusable. A bare <time> is not focusable, so without a tab stop
|
|
@@ -547,9 +549,7 @@ export function Timestamp({
|
|
|
547
549
|
// gratuitous tab stops otherwise. The card carries its own
|
|
548
550
|
// dashed-underline hover indication as the affordance, so the anchor
|
|
549
551
|
// needs no separate focus outline.
|
|
550
|
-
|
|
551
|
-
data-testid={testId}
|
|
552
|
-
{...stylex.props(styles.time)}>
|
|
552
|
+
{...(showTooltip ? {tabIndex: 0} : {})}>
|
|
553
553
|
{displayText}
|
|
554
554
|
</time>
|
|
555
555
|
</Text>
|
|
@@ -182,24 +182,28 @@ export function formatInstant(
|
|
|
182
182
|
...FULL_OPTIONS,
|
|
183
183
|
timeZoneName: timeZoneNameStyle,
|
|
184
184
|
...zone,
|
|
185
|
+
calendar: 'gregory',
|
|
185
186
|
}).format(date);
|
|
186
187
|
|
|
187
188
|
case 'date':
|
|
188
189
|
return new Intl.DateTimeFormat(locale, {
|
|
189
190
|
...SHARED_DATE_FORMAT_OPTIONS.date,
|
|
190
191
|
...zone,
|
|
192
|
+
calendar: 'gregory',
|
|
191
193
|
}).format(date);
|
|
192
194
|
|
|
193
195
|
case 'date_long':
|
|
194
196
|
return new Intl.DateTimeFormat(locale, {
|
|
195
197
|
...SHARED_DATE_FORMAT_OPTIONS.date_long,
|
|
196
198
|
...zone,
|
|
199
|
+
calendar: 'gregory',
|
|
197
200
|
}).format(date);
|
|
198
201
|
|
|
199
202
|
case 'date_weekday':
|
|
200
203
|
return new Intl.DateTimeFormat(locale, {
|
|
201
204
|
...SHARED_DATE_FORMAT_OPTIONS.date_weekday,
|
|
202
205
|
...zone,
|
|
206
|
+
calendar: 'gregory',
|
|
203
207
|
}).format(date);
|
|
204
208
|
|
|
205
209
|
case 'date_time':
|
|
@@ -207,6 +211,7 @@ export function formatInstant(
|
|
|
207
211
|
...DATE_TIME_OPTIONS,
|
|
208
212
|
...zoneName,
|
|
209
213
|
...zone,
|
|
214
|
+
calendar: 'gregory',
|
|
210
215
|
}).format(date);
|
|
211
216
|
|
|
212
217
|
case 'time':
|
package/src/Toast/Toast.doc.mjs
CHANGED
|
@@ -8,7 +8,15 @@ export const docs = {
|
|
|
8
8
|
group: 'Toast',
|
|
9
9
|
category: 'Overlay',
|
|
10
10
|
hiddenComponents: ['ToastViewport'],
|
|
11
|
-
keywords: [
|
|
11
|
+
keywords: [
|
|
12
|
+
'toast',
|
|
13
|
+
'notification',
|
|
14
|
+
'snackbar',
|
|
15
|
+
'alert',
|
|
16
|
+
'message',
|
|
17
|
+
'feedback',
|
|
18
|
+
'status',
|
|
19
|
+
],
|
|
12
20
|
|
|
13
21
|
props: [
|
|
14
22
|
{
|
|
@@ -16,29 +24,35 @@ export const docs = {
|
|
|
16
24
|
type: 'ReactNode',
|
|
17
25
|
description: 'Primary message content.',
|
|
18
26
|
required: true,
|
|
19
|
-
slotElements: [
|
|
27
|
+
slotElements: [
|
|
28
|
+
{__element: 'Text', props: {type: 'body'}, children: 'Toast message'},
|
|
29
|
+
],
|
|
20
30
|
},
|
|
21
31
|
{
|
|
22
32
|
name: 'type',
|
|
23
33
|
type: "'info' | 'error'",
|
|
24
|
-
description:
|
|
34
|
+
description:
|
|
35
|
+
'Toast type controlling background color. Error toasts persist until dismissed.',
|
|
25
36
|
default: "'info'",
|
|
26
37
|
},
|
|
27
38
|
{
|
|
28
39
|
name: 'isAutoHide',
|
|
29
40
|
type: 'boolean',
|
|
30
|
-
description:
|
|
41
|
+
description:
|
|
42
|
+
'Whether the toast auto-dismisses. Defaults to true for info, false for error.',
|
|
31
43
|
},
|
|
32
44
|
{
|
|
33
45
|
name: 'autoHideDuration',
|
|
34
46
|
type: 'number',
|
|
35
|
-
description:
|
|
47
|
+
description:
|
|
48
|
+
'Duration in ms before auto-dismiss. Timed content must satisfy WCAG 2.2.1.',
|
|
36
49
|
default: '5000',
|
|
37
50
|
},
|
|
38
51
|
{
|
|
39
52
|
name: 'endContent',
|
|
40
53
|
type: 'ReactNode',
|
|
41
|
-
description:
|
|
54
|
+
description:
|
|
55
|
+
'Content rendered at the trailing end (e.g. Undo button, link). Keep action labels short.',
|
|
42
56
|
slotElements: [
|
|
43
57
|
{__element: 'Icon', props: {icon: 'chevronDown', size: 'sm'}},
|
|
44
58
|
{__element: 'Badge', props: {label: '3'}},
|
|
@@ -52,7 +66,8 @@ export const docs = {
|
|
|
52
66
|
{
|
|
53
67
|
name: 'collisionBehavior',
|
|
54
68
|
type: "'overwrite' | 'ignore'",
|
|
55
|
-
description:
|
|
69
|
+
description:
|
|
70
|
+
'Behavior when a toast with matching uniqueID already exists.',
|
|
56
71
|
default: "'overwrite'",
|
|
57
72
|
},
|
|
58
73
|
{
|
|
@@ -66,28 +81,109 @@ export const docs = {
|
|
|
66
81
|
description: 'Callback fired when the toast is dismissed.',
|
|
67
82
|
required: true,
|
|
68
83
|
},
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
84
|
+
{
|
|
85
|
+
name: 'renderContent',
|
|
86
|
+
type: '(toast: ToastContentRenderProps) => ReactNode',
|
|
87
|
+
description:
|
|
88
|
+
"Replaces the content of this toast's card with your own layout. Astryx keeps the card, its astryx-toast theme target, the live-region role and auto-hide behavior, then hands the renderer the message, endContent, resolved toast settings and a dismiss callback. The custom renderer owns every control in its layout: compose the control you want and call dismiss from it. Astryx does not inject a fallback close into custom content. Per-toast: an app shares one layout by wrapping useToast and passing it on every call, while a toast raised by library code that never passes it renders as an ordinary Astryx toast. The argument is {body, endContent, type, isAutoHide, autoHideDuration, dismiss}, where type is 'info' | 'error'.",
|
|
89
|
+
},
|
|
90
|
+
],
|
|
91
|
+
theming: {
|
|
92
|
+
targets: [{className: 'astryx-toast', visualProps: ['type']}],
|
|
93
|
+
vars: [
|
|
94
|
+
{
|
|
95
|
+
name: '--_toast-slide-y',
|
|
96
|
+
description:
|
|
97
|
+
'Private block-axis offset inherited from ToastViewport for entry and exit motion',
|
|
98
|
+
default: 'var(--spacing-2)',
|
|
99
|
+
private: true,
|
|
100
|
+
},
|
|
101
|
+
{
|
|
102
|
+
name: '--_toast-swipe-y',
|
|
103
|
+
description: 'Private active swipe offset along the block axis',
|
|
104
|
+
default: '0px',
|
|
105
|
+
private: true,
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
name: '--_toast-swipe-exit-y',
|
|
109
|
+
description: 'Private completed-swipe exit offset',
|
|
110
|
+
default: 'var(--_toast-swipe-y)',
|
|
111
|
+
private: true,
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: '--_toast-swipe-opacity',
|
|
115
|
+
description: 'Private opacity feedback during an accepted swipe',
|
|
116
|
+
default: '1',
|
|
117
|
+
private: true,
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
name: '--_toast-swipe-scale',
|
|
121
|
+
description: 'Private scale feedback during an accepted swipe',
|
|
122
|
+
default: '1',
|
|
123
|
+
private: true,
|
|
124
|
+
},
|
|
72
125
|
],
|
|
73
126
|
},
|
|
74
127
|
|
|
75
128
|
usage: {
|
|
76
129
|
description:
|
|
77
|
-
'Toast shows a brief, non-blocking notification to confirm an action or present temporary information. Use it for scenarios where the user needs feedback but not a decision, such as saving, deleting, or changing a status.\n\nFor production use, prefer the `useToast()` hook; it handles positioning, stacking, auto-dismiss, and deduplication via `ToastViewport`. The `Toast` component renders the visual toast element inline and is useful for previews, documentation, and static showcases where the viewport lifecycle is not needed.',
|
|
130
|
+
'Toast shows a brief, non-blocking notification to confirm an action or present temporary information. Use it for scenarios where the user needs feedback but not a decision, such as saving, deleting, or changing a status.\n\nFor production use, prefer the `useToast()` hook; it handles positioning, stacking, auto-dismiss, and deduplication via `ToastViewport`. Toasts stay within viewport and safe-area gutters, wrap long message content, and enter, exit, or swipe-dismiss toward their configured top or bottom edge. The vertical swipe uses the same spatial model as placement motion: top Toasts leave upward and bottom Toasts leave downward. Swipe waits for dominant edge-directed intent before cancelling native touch movement and reports the existing manual dismissal reason. Pen is supported as direct-contact input; mouse drag is excluded to avoid conflicting with desktop text selection, where the visible close control remains available. Set `isAutoHide: false` explicitly when an action or message must remain available. The `Toast` component renders the visual toast element inline and is useful for previews, documentation, and static showcases where the viewport lifecycle is not needed.',
|
|
78
131
|
bestPractices: [
|
|
79
|
-
{
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
{
|
|
85
|
-
|
|
132
|
+
{
|
|
133
|
+
guidance: true,
|
|
134
|
+
description:
|
|
135
|
+
'Keep messages short: only a few words that tell the user what happened, like "Changes saved" or "Message sent".',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
guidance: true,
|
|
139
|
+
description:
|
|
140
|
+
'Add a short undo action in the endContent slot for reversible operations. Set isAutoHide to false when the action must remain available.',
|
|
141
|
+
},
|
|
142
|
+
{
|
|
143
|
+
guidance: true,
|
|
144
|
+
description:
|
|
145
|
+
'Use uniqueID to deduplicate toasts that fire from repeated actions, like clicking a save button multiple times.',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
guidance: true,
|
|
149
|
+
description:
|
|
150
|
+
"Use error type for failures that need attention but not immediate action; it persists until dismissed so the user won't miss it.",
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
guidance: false,
|
|
154
|
+
description:
|
|
155
|
+
"Don't use a toast for critical errors that block the user. Use Banner for persistent, in-context messaging that requires acknowledgment.",
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
guidance: false,
|
|
159
|
+
description:
|
|
160
|
+
"Don't put long or multi-line content in a toast; it disappears after 5 seconds and the user may not finish reading.",
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
guidance: false,
|
|
164
|
+
description:
|
|
165
|
+
"Don't show form validation errors as toasts. Use inline field validation so the user can see exactly which field needs fixing.",
|
|
166
|
+
},
|
|
86
167
|
],
|
|
87
168
|
anatomy: [
|
|
88
|
-
{
|
|
89
|
-
|
|
90
|
-
|
|
169
|
+
{
|
|
170
|
+
name: 'Body',
|
|
171
|
+
required: true,
|
|
172
|
+
description:
|
|
173
|
+
'The primary message text describing what happened or what the user should know.',
|
|
174
|
+
},
|
|
175
|
+
{
|
|
176
|
+
name: 'End content',
|
|
177
|
+
required: false,
|
|
178
|
+
description:
|
|
179
|
+
'A trailing action like an Undo button or a link, placed after the body text.',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
name: 'Dismiss button',
|
|
183
|
+
required: true,
|
|
184
|
+
description:
|
|
185
|
+
'A close button that lets the user manually dismiss the toast before auto-hide.',
|
|
186
|
+
},
|
|
91
187
|
],
|
|
92
188
|
},
|
|
93
189
|
};
|
|
@@ -104,28 +200,71 @@ export const docsZh = {
|
|
|
104
200
|
body: '主要消息内容。',
|
|
105
201
|
type: 'Toast 类型,控制背景颜色。error toast 持续显示直到关闭。',
|
|
106
202
|
isAutoHide: '是否自动关闭。info 默认为 true,error 默认为 false。',
|
|
107
|
-
autoHideDuration:
|
|
108
|
-
|
|
203
|
+
autoHideDuration:
|
|
204
|
+
'自动关闭前的持续时间(毫秒)。定时内容必须符合 WCAG 2.2.1。',
|
|
205
|
+
endContent: '尾部渲染的内容(如撤销按钮、链接)。操作标签应保持简短。',
|
|
109
206
|
uniqueID: '用于去重的唯一标识符。',
|
|
110
207
|
collisionBehavior: '当已存在相同 uniqueID 的 toast 时的行为。',
|
|
111
208
|
onHide: '当 toast 被移除时触发的回调。',
|
|
209
|
+
renderContent:
|
|
210
|
+
"用你自己的布局替换该 toast 卡片内部的内容。Astryx 保留卡片本身、astryx-toast 主题目标、实时区域角色和自动关闭行为,并把消息、endContent、解析后的 toast 设置和 dismiss 回调交给渲染函数。自定义渲染函数完全拥有布局中的控件:请组合所需的控件并通过它调用 dismiss。Astryx 不会向自定义内容注入后备关闭按钮。按 toast 单独设置:应用可通过封装 useToast 并在每次调用时传入来共享同一套布局;而由库代码发起、从不传入该参数的 toast 会渲染为普通的 Astryx toast。传入参数为 {body, endContent, type, isAutoHide, autoHideDuration, dismiss},其中 type 为 'info' | 'error'。",
|
|
112
211
|
},
|
|
113
212
|
usage: {
|
|
114
213
|
description:
|
|
115
|
-
'Toast 显示简短的非阻塞通知,用于确认操作或呈现临时信息。适用于用户需要反馈但不需要做决定的场景,如保存、删除或状态变更。\n\n生产环境中推荐使用 `useToast()` hook,它通过 `ToastViewport`
|
|
214
|
+
'Toast 显示简短的非阻塞通知,用于确认操作或呈现临时信息。适用于用户需要反馈但不需要做决定的场景,如保存、删除或状态变更。\n\n生产环境中推荐使用 `useToast()` hook,它通过 `ToastViewport` 处理定位、堆叠、自动关闭和去重。Toast 会保持在视口和安全区域边距内,较长的消息会换行,并根据配置的顶部或底部边缘进入、退出或滑动关闭。垂直滑动与位置动效使用同一空间模型:顶部 Toast 向上离开,底部 Toast 向下离开。只有在动作明确朝向关闭边缘时才会接管原生触摸移动,滑动关闭继续报告现有的 manual 原因。触控笔属于直接接触输入,因此支持相同手势;鼠标拖动会与桌面文本选择冲突,所以不启用,关闭按钮始终可用。当操作或消息必须持续可用时,请显式设置 `isAutoHide: false`。`Toast` 组件以内联方式渲染 toast 视觉元素,适用于不需要视口生命周期的预览、文档和静态展示。',
|
|
116
215
|
bestPractices: [
|
|
117
|
-
{
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
{
|
|
123
|
-
|
|
216
|
+
{
|
|
217
|
+
guidance: true,
|
|
218
|
+
description:
|
|
219
|
+
'保持消息简短,只需几个词告诉用户发生了什么,如"更改已保存"或"消息已发送"。',
|
|
220
|
+
},
|
|
221
|
+
{
|
|
222
|
+
guidance: true,
|
|
223
|
+
description:
|
|
224
|
+
'在 endContent 插槽中添加简短的撤销操作,用于可逆操作。当操作必须持续可用时,将 isAutoHide 设置为 false。',
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
guidance: true,
|
|
228
|
+
description:
|
|
229
|
+
'使用 uniqueID 去重重复操作触发的 toast,如多次点击保存按钮。',
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
guidance: true,
|
|
233
|
+
description:
|
|
234
|
+
'对需要关注但不需要立即操作的错误使用 error 类型,它会持续显示直到关闭。',
|
|
235
|
+
},
|
|
236
|
+
{
|
|
237
|
+
guidance: false,
|
|
238
|
+
description:
|
|
239
|
+
'不要对阻塞用户的严重错误使用 toast,使用 Banner 进行持久的上下文消息传递。',
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
guidance: false,
|
|
243
|
+
description:
|
|
244
|
+
'不要在 toast 中放置长内容或多行内容,它会在5秒后消失,用户可能来不及阅读。',
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
guidance: false,
|
|
248
|
+
description:
|
|
249
|
+
'不要将表单验证错误显示为 toast,使用内联字段验证让用户看到具体哪个字段需要修复。',
|
|
250
|
+
},
|
|
124
251
|
],
|
|
125
252
|
anatomy: [
|
|
126
|
-
{
|
|
127
|
-
|
|
128
|
-
|
|
253
|
+
{
|
|
254
|
+
name: '正文',
|
|
255
|
+
required: true,
|
|
256
|
+
description: '描述发生了什么或用户应该知道什么的主要消息文本。',
|
|
257
|
+
},
|
|
258
|
+
{
|
|
259
|
+
name: '尾部内容',
|
|
260
|
+
required: false,
|
|
261
|
+
description: '正文后的尾随操作,如撤销按钮或链接。',
|
|
262
|
+
},
|
|
263
|
+
{
|
|
264
|
+
name: '关闭按钮',
|
|
265
|
+
required: true,
|
|
266
|
+
description: '让用户在自动隐藏前手动关闭 toast 的关闭按钮。',
|
|
267
|
+
},
|
|
129
268
|
],
|
|
130
269
|
},
|
|
131
270
|
};
|
|
@@ -136,25 +275,55 @@ export const docsDense = {
|
|
|
136
275
|
'toast notification w/ auto-dismiss, stacking, dedup, smooth animations; MediaTheme inverted surface',
|
|
137
276
|
usage: {
|
|
138
277
|
description:
|
|
139
|
-
'Brief non-blocking notification for action confirmations and temporary info. Use where user needs feedback not decisions: saves, deletes, status changes. useToast() hook for production (positioning, stacking, auto-dismiss, dedup via ToastViewport). Toast renders inline for previews/docs/static showcases.',
|
|
278
|
+
'Brief non-blocking notification for action confirmations and temporary info. Use where user needs feedback not decisions: saves, deletes, status changes. useToast() hook for production (safe-area positioning, responsive message wrapping, stacking, auto-dismiss, dedup via ToastViewport). Enters, exits, or swipe-dismisses toward configured edge; touch is claimed only after dominant edge-directed intent; swipe reports manual. Pen uses the direct-contact gesture; mouse drag stays off to preserve text selection and the close control remains available. Set isAutoHide false explicitly for must-remain actions/messages. Toast renders inline for previews/docs/static showcases.',
|
|
140
279
|
bestPractices: [
|
|
141
|
-
{
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
{
|
|
147
|
-
|
|
280
|
+
{
|
|
281
|
+
guidance: true,
|
|
282
|
+
description:
|
|
283
|
+
'Short messages, a few words: "Changes saved", "Message sent".',
|
|
284
|
+
},
|
|
285
|
+
{
|
|
286
|
+
guidance: true,
|
|
287
|
+
description:
|
|
288
|
+
'Short Undo action in endContent for reversible ops; set isAutoHide false when it must remain available.',
|
|
289
|
+
},
|
|
290
|
+
{
|
|
291
|
+
guidance: true,
|
|
292
|
+
description: 'uniqueID to dedup repeated action toasts.',
|
|
293
|
+
},
|
|
294
|
+
{
|
|
295
|
+
guidance: true,
|
|
296
|
+
description:
|
|
297
|
+
'Error type for failures needing attention; persists until dismissed.',
|
|
298
|
+
},
|
|
299
|
+
{
|
|
300
|
+
guidance: false,
|
|
301
|
+
description:
|
|
302
|
+
"Don't use for critical blocking errors. Use Banner for persistent in-context messaging.",
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
guidance: false,
|
|
306
|
+
description:
|
|
307
|
+
"Don't put long/multi-line content; disappears in 5s, user may not finish reading.",
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
guidance: false,
|
|
311
|
+
description:
|
|
312
|
+
"Don't show form validation errors. Use inline field validation instead.",
|
|
313
|
+
},
|
|
148
314
|
],
|
|
149
315
|
},
|
|
150
316
|
propDescriptions: {
|
|
151
317
|
body: 'primary message content',
|
|
152
318
|
type: 'toast type; controls bg color; error persists until dismissed',
|
|
153
319
|
isAutoHide: 'auto-dismiss; true for info, false for error',
|
|
154
|
-
autoHideDuration:
|
|
155
|
-
|
|
320
|
+
autoHideDuration:
|
|
321
|
+
'ms before auto-dismiss; timed content must satisfy WCAG 2.2.1',
|
|
322
|
+
endContent:
|
|
323
|
+
'trailing end content (undo btn, link); keep action labels short',
|
|
156
324
|
uniqueID: 'unique id for dedup',
|
|
157
325
|
collisionBehavior: 'behavior when matching uniqueID exists',
|
|
158
326
|
onHide: 'callback when toast removed',
|
|
327
|
+
renderContent: 'custom inner layout; receives content, resolved settings + dismiss callback; no injected fallback control',
|
|
159
328
|
},
|
|
160
329
|
};
|