@dxos/react-ui 0.8.4-staging.ac66bdf99f → 0.9.1-main.c7dcc2e112
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/LICENSE +102 -5
- package/README.md +1 -1
- package/dist/lib/browser/chunk-F3PLXTDA.mjs +1608 -0
- package/dist/lib/browser/chunk-F3PLXTDA.mjs.map +7 -0
- package/dist/lib/browser/chunk-HFJYTGHU.mjs +43 -0
- package/dist/lib/browser/chunk-HFJYTGHU.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +3785 -2451
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +14 -17
- package/dist/lib/browser/testing/index.mjs.map +3 -3
- package/dist/lib/browser/translations.mjs +9 -0
- package/dist/lib/browser/translations.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-LLVUYLAM.mjs +1610 -0
- package/dist/lib/node-esm/chunk-LLVUYLAM.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-OJYUPUCY.mjs +45 -0
- package/dist/lib/node-esm/chunk-OJYUPUCY.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +3785 -2451
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +14 -17
- package/dist/lib/node-esm/testing/index.mjs.map +3 -3
- package/dist/lib/node-esm/translations.mjs +10 -0
- package/dist/lib/node-esm/translations.mjs.map +7 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/Avatar.theme.d.ts +11 -0
- package/dist/types/src/components/Avatars/Avatar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Avatars/AvatarGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +5 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.stories.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts +4 -0
- package/dist/types/src/components/Breadcrumb/Breadcrumb.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/Button.d.ts +3 -1
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts +1 -1
- package/dist/types/src/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/Button.theme.d.ts +11 -0
- package/dist/types/src/components/Button/Button.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts +1 -1
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts +35 -0
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.theme.d.ts +8 -0
- package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -0
- package/dist/types/src/components/Button/SystemIconButton.d.ts +20 -0
- package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -0
- package/dist/types/src/components/Button/Toggle.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleGroup.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts +2 -2
- package/dist/types/src/components/Button/ToggleGroup.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/ToggleIconButton.d.ts +15 -0
- package/dist/types/src/components/Button/ToggleIconButton.d.ts.map +1 -0
- package/dist/types/src/components/Button/index.d.ts +2 -0
- package/dist/types/src/components/Button/index.d.ts.map +1 -1
- package/dist/types/src/components/Calendar/Calendar.d.ts +33 -0
- package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/Calendar.stories.d.ts +9 -0
- package/dist/types/src/components/Calendar/Calendar.stories.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/Calendar.theme.d.ts +4 -0
- package/dist/types/src/components/Calendar/Calendar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Calendar/index.d.ts +2 -0
- package/dist/types/src/components/Calendar/index.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.d.ts +67 -55
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.stories.d.ts +2 -1
- package/dist/types/src/components/Card/Card.stories.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.theme.d.ts +12 -0
- package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts +106 -0
- package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/Carousel.stories.d.ts +14 -0
- package/dist/types/src/components/Carousel/Carousel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/index.d.ts +2 -0
- package/dist/types/src/components/Carousel/index.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/CopyButton.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +2 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/Column/Column.d.ts +51 -0
- package/dist/types/src/components/Column/Column.d.ts.map +1 -0
- package/dist/types/src/components/Column/Column.stories.d.ts.map +1 -0
- package/dist/types/src/components/Column/Column.theme.d.ts +17 -0
- package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -0
- package/dist/types/src/components/Column/index.d.ts +3 -0
- package/dist/types/src/components/Column/index.d.ts.map +1 -0
- package/dist/types/src/components/Column/withColumn.d.ts +21 -0
- package/dist/types/src/components/Column/withColumn.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.d.ts +72 -0
- package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts +10 -0
- package/dist/types/src/components/DatePicker/DatePicker.stories.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts +6 -0
- package/dist/types/src/components/DatePicker/DatePicker.theme.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/index.d.ts +2 -0
- package/dist/types/src/components/DatePicker/index.d.ts.map +1 -0
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +20 -20
- package/dist/types/src/components/Dialog/AlertDialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.d.ts +21 -19
- package/dist/types/src/components/Dialog/Dialog.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/Dialog.theme.d.ts +10 -0
- package/dist/types/src/components/Dialog/Dialog.theme.d.ts.map +1 -0
- package/dist/types/src/components/ErrorFallback/ErrorFallback.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorFallback.stories.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/ThrowError.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.d.ts +2 -2
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.stories.d.ts.map +1 -1
- package/dist/types/src/components/Focus/Focus.theme.d.ts +6 -0
- package/dist/types/src/components/Focus/Focus.theme.d.ts.map +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts +1 -0
- package/dist/types/src/components/Icon/Icon.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts +1 -1
- package/dist/types/src/components/Icon/Icon.stories.d.ts.map +1 -1
- package/dist/types/src/components/Icon/Icon.theme.d.ts +11 -0
- package/dist/types/src/components/Icon/Icon.theme.d.ts.map +1 -0
- package/dist/types/src/components/Icon/IconBlock.d.ts +15 -0
- package/dist/types/src/components/Icon/IconBlock.d.ts.map +1 -0
- package/dist/types/src/components/Icon/index.d.ts +1 -0
- package/dist/types/src/components/Icon/index.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.d.ts +8 -1
- package/dist/types/src/components/Image/Image.d.ts.map +1 -1
- package/dist/types/src/components/Image/Image.stories.d.ts +3 -2
- package/dist/types/src/components/Image/Image.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +88 -13
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +14 -3
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.theme.d.ts +115 -0
- package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -0
- package/dist/types/src/components/Input/SegmentedInput.d.ts +79 -0
- package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -0
- package/dist/types/src/components/Input/constants.d.ts +5 -0
- package/dist/types/src/components/Input/constants.d.ts.map +1 -0
- package/dist/types/src/components/Input/index.d.ts +2 -0
- package/dist/types/src/components/Input/index.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.stories.d.ts.map +1 -1
- package/dist/types/src/components/Link/Link.theme.d.ts +6 -0
- package/dist/types/src/components/Link/Link.theme.d.ts.map +1 -0
- package/dist/types/src/components/List/List.d.ts +2 -2
- package/dist/types/src/components/List/List.d.ts.map +1 -1
- package/dist/types/src/components/List/List.stories.d.ts +1 -1
- package/dist/types/src/components/List/List.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/List.theme.d.ts +7 -0
- package/dist/types/src/components/List/List.theme.d.ts.map +1 -0
- package/dist/types/src/components/List/ListDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.d.ts +2 -2
- package/dist/types/src/components/List/Tree.d.ts.map +1 -1
- package/dist/types/src/components/List/Tree.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/TreeDropIndicator.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.d.ts +2 -2
- package/dist/types/src/components/List/Treegrid.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.stories.d.ts.map +1 -1
- package/dist/types/src/components/List/Treegrid.theme.d.ts +7 -0
- package/dist/types/src/components/List/Treegrid.theme.d.ts.map +1 -0
- package/dist/types/src/components/Main/Main.d.ts +9 -5
- package/dist/types/src/components/Main/Main.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.stories.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.theme.d.ts +20 -0
- package/dist/types/src/components/Main/Main.theme.d.ts.map +1 -0
- package/dist/types/src/components/Main/constants.d.ts +3 -0
- package/dist/types/src/components/Main/constants.d.ts.map +1 -0
- package/dist/types/src/components/Main/index.d.ts +1 -0
- package/dist/types/src/components/Main/index.d.ts.map +1 -1
- package/dist/types/src/components/Main/useSwipeToDismiss.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts +47 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts +16 -0
- package/dist/types/src/components/MediaPlayer/MediaPlayer.stories.d.ts.map +1 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts +2 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -0
- package/dist/types/src/components/Menu/ContextMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/ContextMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +11 -3
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/Menu.theme.d.ts +7 -0
- package/dist/types/src/components/Menu/Menu.theme.d.ts.map +1 -0
- package/dist/types/src/components/Message/Message.d.ts +3 -3
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +5 -1
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.theme.d.ts +7 -0
- package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -0
- package/dist/types/src/{primitives → components}/Panel/Panel.d.ts +5 -5
- package/dist/types/src/components/Panel/Panel.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.theme.d.ts +13 -0
- package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -0
- package/dist/types/src/components/Panel/index.d.ts.map +1 -0
- package/dist/types/src/components/Popover/Popover.d.ts +10 -2
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.stories.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.theme.d.ts +8 -0
- package/dist/types/src/components/Popover/Popover.theme.d.ts.map +1 -0
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts +17 -0
- package/dist/types/src/components/ScrollArea/ScrollArea.theme.d.ts.map +1 -0
- package/dist/types/src/components/ScrollArea/index.d.ts +1 -0
- package/dist/types/src/components/ScrollArea/index.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/scrollbar.d.ts +18 -0
- package/dist/types/src/components/ScrollArea/scrollbar.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +20 -18
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.stories.d.ts.map +1 -1
- package/dist/types/src/components/Select/Select.theme.d.ts +6 -0
- package/dist/types/src/components/Select/Select.theme.d.ts.map +1 -0
- package/dist/types/src/components/Separator/Separator.theme.d.ts +7 -0
- package/dist/types/src/components/Separator/Separator.theme.d.ts.map +1 -0
- package/dist/types/src/components/Skeleton/Skeleton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts +6 -0
- package/dist/types/src/components/Skeleton/Skeleton.theme.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts +6 -8
- package/dist/types/src/components/Splitter/Splitter.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.stories.d.ts.map +1 -1
- package/dist/types/src/components/Splitter/Splitter.theme.d.ts +4 -0
- package/dist/types/src/components/Splitter/Splitter.theme.d.ts.map +1 -0
- package/dist/types/src/components/Status/Status.d.ts +1 -1
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.stories.d.ts.map +1 -1
- package/dist/types/src/components/Status/Status.theme.d.ts +7 -0
- package/dist/types/src/components/Status/Status.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tag/Tag.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tag/Tag.theme.d.ts +6 -0
- package/dist/types/src/components/Tag/Tag.theme.d.ts.map +1 -0
- package/dist/types/src/components/Toast/Toast.d.ts +12 -9
- package/dist/types/src/components/Toast/Toast.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.stories.d.ts +5 -2
- package/dist/types/src/components/Toast/Toast.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toast/Toast.theme.d.ts +4 -0
- package/dist/types/src/components/Toast/Toast.theme.d.ts.map +1 -0
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +24 -12
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts +8 -0
- package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/TextTooltip.d.ts +19 -0
- package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +8 -8
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.stories.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts +6 -0
- package/dist/types/src/components/Tooltip/Tooltip.theme.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/index.d.ts +2 -0
- package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/tooltipContent.d.ts +4 -0
- package/dist/types/src/components/Tooltip/tooltipContent.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +7 -4
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts +1 -1
- package/dist/types/src/exemplars/generics.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/slot.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/tabster.stories.d.ts.map +1 -1
- package/dist/types/src/exemplars/virtualizer.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/useDensityContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useElevationContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeArea.d.ts.map +1 -1
- package/dist/types/src/hooks/useSafeCollisionPadding.d.ts.map +1 -1
- package/dist/types/src/hooks/useTranslationsContext.d.ts +1 -1
- package/dist/types/src/hooks/useVisualViewport.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/playground/Controls.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts +1 -1
- package/dist/types/src/playground/Custom.stories.d.ts.map +1 -1
- package/dist/types/src/playground/Typography.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts +1 -1
- package/dist/types/src/primitives/Container/Container.d.ts.map +1 -1
- package/dist/types/src/primitives/Container/Container.stories.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -0
- package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ElevationProvider/index.d.ts.map +1 -0
- package/dist/types/src/primitives/Flex/Flex.d.ts +1 -1
- package/dist/types/src/primitives/Flex/Flex.d.ts.map +1 -1
- package/dist/types/src/primitives/Flex/Flex.stories.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/primitives/Grid/Grid.stories.d.ts.map +1 -1
- package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +128 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/index.d.ts +4 -0
- package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -0
- package/dist/types/src/primitives/index.d.ts +3 -2
- package/dist/types/src/primitives/index.d.ts.map +1 -1
- package/dist/types/src/testing/Loading.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayout.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withLayoutVariants.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +5 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/theme/bindTheme.d.ts +3 -0
- package/dist/types/src/theme/bindTheme.d.ts.map +1 -0
- package/dist/types/src/theme/defaultTheme.d.ts +4 -0
- package/dist/types/src/theme/defaultTheme.d.ts.map +1 -0
- package/dist/types/src/theme/index.d.ts +31 -0
- package/dist/types/src/theme/index.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +27 -3
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/util/index.d.ts +2 -1
- package/dist/types/src/util/index.d.ts.map +1 -1
- package/dist/types/src/util/mobile.d.ts +5 -0
- package/dist/types/src/util/mobile.d.ts.map +1 -0
- package/dist/types/src/util/slots.d.ts +57 -0
- package/dist/types/src/util/slots.d.ts.map +1 -0
- package/dist/types/src/util/usePx.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +29 -25
- package/src/components/Avatars/Avatar.theme.ts +93 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +1 -1
- package/src/components/Breadcrumb/Breadcrumb.theme.ts +26 -0
- package/src/components/Breadcrumb/Breadcrumb.tsx +14 -2
- package/src/components/Button/Button.theme.ts +31 -0
- package/src/components/Button/Button.tsx +25 -4
- package/src/components/Button/IconButton.stories.tsx +132 -4
- package/src/components/Button/IconButton.theme.ts +21 -0
- package/src/components/Button/IconButton.tsx +3 -4
- package/src/components/Button/SystemIconButton.tsx +153 -0
- package/src/components/Button/ToggleIconButton.tsx +32 -0
- package/src/components/Button/index.ts +2 -0
- package/src/components/Calendar/Calendar.stories.tsx +43 -0
- package/src/components/Calendar/Calendar.theme.ts +74 -0
- package/src/components/Calendar/Calendar.tsx +196 -0
- package/src/components/Calendar/index.ts +5 -0
- package/src/components/Card/Card.stories.tsx +109 -46
- package/src/components/Card/Card.theme.ts +111 -0
- package/src/components/Card/Card.tsx +281 -212
- package/src/components/Carousel/Carousel.stories.tsx +47 -0
- package/src/components/Carousel/Carousel.tsx +373 -0
- package/src/components/Carousel/index.ts +5 -0
- package/src/components/Clipboard/CopyButton.tsx +3 -3
- package/src/{primitives → components}/Column/Column.stories.tsx +1 -1
- package/src/components/Column/Column.theme.ts +76 -0
- package/src/{primitives → components}/Column/Column.tsx +38 -2
- package/src/{primitives → components}/Column/index.ts +1 -0
- package/src/components/Column/withColumn.ts +27 -0
- package/src/components/DatePicker/DatePicker.stories.tsx +102 -0
- package/src/components/DatePicker/DatePicker.theme.ts +35 -0
- package/src/components/DatePicker/DatePicker.tsx +279 -0
- package/src/components/DatePicker/index.ts +5 -0
- package/src/components/Dialog/AlertDialog.tsx +12 -16
- package/src/components/Dialog/Dialog.stories.tsx +2 -2
- package/src/components/Dialog/Dialog.theme.ts +61 -0
- package/src/components/Dialog/Dialog.tsx +46 -17
- package/src/components/ErrorFallback/ErrorFallback.tsx +14 -8
- package/src/components/ErrorFallback/ErrorStack.tsx +12 -6
- package/src/components/Focus/Focus.theme.ts +32 -0
- package/src/components/Focus/Focus.tsx +1 -1
- package/src/components/Icon/Icon.theme.ts +45 -0
- package/src/components/Icon/Icon.tsx +10 -3
- package/src/components/Icon/IconBlock.tsx +38 -0
- package/src/components/Icon/index.ts +1 -0
- package/src/components/Image/Image.stories.tsx +1 -1
- package/src/components/Image/Image.tsx +38 -9
- package/src/components/Input/Input.stories.tsx +132 -29
- package/src/components/Input/Input.theme.ts +191 -0
- package/src/components/Input/Input.tsx +208 -2
- package/src/components/Input/SegmentedInput.tsx +454 -0
- package/src/components/Input/constants.ts +8 -0
- package/src/components/Input/index.ts +2 -0
- package/src/components/Link/Link.theme.ts +16 -0
- package/src/components/Link/Link.tsx +10 -2
- package/src/components/List/List.stories.tsx +1 -1
- package/src/components/List/List.theme.ts +47 -0
- package/src/components/List/List.tsx +3 -3
- package/src/components/List/ListDropIndicator.tsx +1 -2
- package/src/components/List/Tree.stories.tsx +1 -1
- package/src/components/List/TreeDropIndicator.tsx +3 -3
- package/src/components/List/Treegrid.theme.ts +35 -0
- package/src/components/List/Treegrid.tsx +3 -4
- package/src/components/Main/Main.theme.ts +29 -0
- package/src/components/Main/Main.tsx +9 -7
- package/src/components/Main/constants.ts +6 -0
- package/src/components/Main/index.ts +1 -0
- package/src/components/MediaPlayer/MediaPlayer.stories.tsx +50 -0
- package/src/components/MediaPlayer/MediaPlayer.tsx +182 -0
- package/src/components/MediaPlayer/index.ts +5 -0
- package/src/components/Menu/ContextMenu.stories.tsx +0 -3
- package/src/components/Menu/DropdownMenu.stories.tsx +0 -3
- package/src/components/Menu/DropdownMenu.tsx +15 -15
- package/src/components/Menu/Menu.theme.ts +48 -0
- package/src/components/Message/Message.stories.tsx +43 -5
- package/src/components/Message/Message.theme.ts +34 -0
- package/src/components/Message/Message.tsx +76 -16
- package/src/{primitives → components}/Panel/Panel.stories.tsx +2 -3
- package/src/components/Panel/Panel.theme.ts +41 -0
- package/src/{primitives → components}/Panel/Panel.tsx +2 -1
- package/src/components/Popover/Popover.theme.ts +40 -0
- package/src/components/Popover/Popover.tsx +7 -7
- package/src/components/ScrollArea/ScrollArea.stories.tsx +2 -6
- package/src/components/ScrollArea/ScrollArea.theme.ts +107 -0
- package/src/components/ScrollArea/ScrollArea.tsx +3 -2
- package/src/components/ScrollArea/index.ts +1 -0
- package/src/components/ScrollArea/scrollbar.ts +21 -0
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
- package/src/components/ScrollContainer/ScrollContainer.tsx +58 -58
- package/src/components/Select/Select.theme.ts +55 -0
- package/src/components/Select/Select.tsx +26 -10
- package/src/components/Separator/Separator.theme.ts +23 -0
- package/src/components/Skeleton/Skeleton.theme.ts +22 -0
- package/src/components/Splitter/Splitter.stories.tsx +1 -1
- package/src/components/Splitter/Splitter.theme.ts +18 -0
- package/src/components/Splitter/Splitter.tsx +10 -15
- package/src/components/Status/Status.theme.ts +31 -0
- package/src/components/Status/Status.tsx +1 -2
- package/src/components/Tag/Tag.theme.ts +22 -0
- package/src/components/Toast/Toast.stories.tsx +41 -20
- package/src/components/Toast/Toast.theme.ts +50 -0
- package/src/components/Toast/Toast.tsx +96 -27
- package/src/components/Toolbar/Toolbar.theme.ts +36 -0
- package/src/components/Toolbar/Toolbar.tsx +67 -15
- package/src/components/Tooltip/TextTooltip.tsx +54 -0
- package/src/components/Tooltip/Tooltip.stories.tsx +1 -10
- package/src/components/Tooltip/Tooltip.theme.ts +19 -0
- package/src/components/Tooltip/Tooltip.tsx +18 -17
- package/src/components/Tooltip/index.ts +2 -0
- package/src/components/Tooltip/tooltipContent.ts +16 -0
- package/src/components/index.ts +7 -5
- package/src/exemplars/generics.stories.tsx +1 -2
- package/src/exemplars/slot.stories.tsx +5 -6
- package/src/exemplars/virtualizer.stories.tsx +0 -1
- package/src/hooks/useDensityContext.ts +1 -1
- package/src/hooks/useElevationContext.ts +1 -1
- package/src/hooks/useThemeContext.ts +1 -1
- package/src/hooks/useTranslationsContext.ts +1 -1
- package/src/index.ts +1 -0
- package/src/playground/Custom.stories.tsx +12 -32
- package/src/primitives/Container/Container.tsx +3 -1
- package/src/{components → primitives}/DensityProvider/DensityProvider.tsx +1 -1
- package/src/primitives/Flex/Flex.tsx +3 -1
- package/src/primitives/Grid/Grid.tsx +3 -1
- package/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.tsx +1 -1
- package/src/{components → primitives}/ThemeProvider/ThemeProvider.tsx +1 -1
- package/src/{components → primitives}/ThemeProvider/index.ts +2 -2
- package/src/primitives/index.ts +4 -2
- package/src/testing/Loading.tsx +2 -1
- package/src/testing/decorators/withLayout.tsx +7 -17
- package/src/testing/decorators/withLayoutVariants.tsx +1 -1
- package/src/testing/decorators/withTheme.tsx +21 -13
- package/src/theme/bindTheme.ts +13 -0
- package/src/theme/defaultTheme.ts +83 -0
- package/src/theme/index.ts +37 -0
- package/src/translations.ts +24 -0
- package/src/util/index.ts +2 -1
- package/src/util/mobile.ts +11 -0
- package/src/util/slots.ts +129 -0
- package/src/util/usePx.ts +4 -1
- package/dist/lib/browser/chunk-OCVRIJCH.mjs +0 -848
- package/dist/lib/browser/chunk-OCVRIJCH.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-QUD5P3RU.mjs +0 -850
- package/dist/lib/node-esm/chunk-QUD5P3RU.mjs.map +0 -7
- package/dist/types/src/components/DensityProvider/index.d.ts.map +0 -1
- package/dist/types/src/components/ElevationProvider/index.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/ThemeProvider.stories.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts +0 -129
- package/dist/types/src/components/ThemeProvider/TranslationsProvider.d.ts.map +0 -1
- package/dist/types/src/components/ThemeProvider/index.d.ts +0 -4
- package/dist/types/src/components/ThemeProvider/index.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/Column.d.ts +0 -33
- package/dist/types/src/primitives/Column/Column.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/Column.stories.d.ts.map +0 -1
- package/dist/types/src/primitives/Column/index.d.ts +0 -2
- package/dist/types/src/primitives/Column/index.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/Panel.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/Panel.stories.d.ts.map +0 -1
- package/dist/types/src/primitives/Panel/index.d.ts.map +0 -1
- package/dist/types/src/util/hasIosKeyboard.d.ts +0 -2
- package/dist/types/src/util/hasIosKeyboard.d.ts.map +0 -1
- package/src/util/hasIosKeyboard.ts +0 -8
- /package/dist/types/src/{primitives → components}/Column/Column.stories.d.ts +0 -0
- /package/dist/types/src/{primitives → components}/Panel/Panel.stories.d.ts +0 -0
- /package/dist/types/src/{primitives → components}/Panel/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/DensityProvider/DensityProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/DensityProvider/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ElevationProvider/ElevationProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ElevationProvider/index.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.d.ts +0 -0
- /package/dist/types/src/{components → primitives}/ThemeProvider/ThemeProvider.stories.d.ts +0 -0
- /package/src/{primitives → components}/Column/AUDIT.md +0 -0
- /package/src/{primitives → components}/Panel/index.ts +0 -0
- /package/src/{components → primitives}/DensityProvider/index.ts +0 -0
- /package/src/{components → primitives}/ElevationProvider/ElevationProvider.tsx +0 -0
- /package/src/{components → primitives}/ElevationProvider/index.ts +0 -0
- /package/src/{components → primitives}/ThemeProvider/TranslationsProvider.tsx +0 -0
|
@@ -5,46 +5,23 @@
|
|
|
5
5
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
6
6
|
import { Slot } from '@radix-ui/react-slot';
|
|
7
7
|
import DOMPurify from 'dompurify';
|
|
8
|
-
import React, {
|
|
9
|
-
|
|
10
|
-
MouseEventHandler,
|
|
11
|
-
type PropsWithChildren,
|
|
12
|
-
createContext,
|
|
13
|
-
forwardRef,
|
|
14
|
-
useContext,
|
|
15
|
-
useMemo,
|
|
16
|
-
} from 'react';
|
|
17
|
-
|
|
18
|
-
import { composable, composableProps, iconSize, mx, slottable } from '@dxos/ui-theme';
|
|
19
|
-
import { type Density } from '@dxos/ui-types';
|
|
8
|
+
import React, { CSSProperties, MouseEventHandler, type ReactNode, forwardRef, useId, useMemo } from 'react';
|
|
9
|
+
import { useTranslation } from 'react-i18next';
|
|
20
10
|
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
23
|
-
import { type ThemedClassName } from '../../util';
|
|
24
|
-
import { Button } from '../Button';
|
|
25
|
-
import { Icon, type IconProps } from '../Icon';
|
|
26
|
-
import { Image } from '../Image';
|
|
27
|
-
import {
|
|
28
|
-
Toolbar,
|
|
29
|
-
ToolbarCloseIconButtonProps,
|
|
30
|
-
ToolbarDragHandleProps,
|
|
31
|
-
type ToolbarMenuItem,
|
|
32
|
-
type ToolbarMenuProps,
|
|
33
|
-
type ToolbarRootProps,
|
|
34
|
-
} from '../Toolbar';
|
|
35
|
-
|
|
36
|
-
//
|
|
37
|
-
// Context
|
|
38
|
-
//
|
|
11
|
+
import { iconSize } from '@dxos/ui-theme';
|
|
12
|
+
import { type Density, type SlottableProps } from '@dxos/ui-types';
|
|
39
13
|
|
|
40
|
-
|
|
14
|
+
import { translationKey } from '#translations';
|
|
41
15
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
16
|
+
import { useThemeContext } from '../../hooks';
|
|
17
|
+
import { composable, composableProps, slottable } from '../../util';
|
|
18
|
+
import { type ThemedClassName } from '../../util';
|
|
19
|
+
import { Button, IconButton } from '../Button';
|
|
20
|
+
import { Column } from '../Column';
|
|
21
|
+
import { Icon } from '../Icon';
|
|
22
|
+
import { Image, type ImageProps } from '../Image';
|
|
23
|
+
import { DropdownMenu } from '../Menu';
|
|
24
|
+
import { type ToolbarActionIconButtonProps, type ToolbarDragHandleProps, type ToolbarMenuProps } from '../Toolbar';
|
|
48
25
|
|
|
49
26
|
//
|
|
50
27
|
// Root
|
|
@@ -52,7 +29,7 @@ const CardContext = createContext<CardContextValue>({});
|
|
|
52
29
|
|
|
53
30
|
const CARD_ROOT_NAME = 'Card.Root';
|
|
54
31
|
|
|
55
|
-
type
|
|
32
|
+
type CardRootProps = {
|
|
56
33
|
id?: string;
|
|
57
34
|
border?: boolean;
|
|
58
35
|
fullWidth?: boolean;
|
|
@@ -64,24 +41,33 @@ type CardRootOwnProps = {
|
|
|
64
41
|
'data-testid'?: string;
|
|
65
42
|
};
|
|
66
43
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
44
|
+
/**
|
|
45
|
+
* `Card.Root` does not support `asChild`. The Column grid is the root element
|
|
46
|
+
* (one `<div>` carrying both the `dx-card` and `dx-column-root` classes
|
|
47
|
+
* instead of the previous outer-card + inner-column pair), so caller-provided
|
|
48
|
+
* HTML attributes — `onClick`, `tabIndex`, `style`, `data-*`, `grid-template-rows`
|
|
49
|
+
* overrides via `classNames` — land directly on the grid container.
|
|
50
|
+
* Slot-parents (`Focus.Item asChild`, `Mosaic.Tile asChild`, etc.) continue to
|
|
51
|
+
* work because `composable()` preserves the COMPOSABLE marker that slottable parents
|
|
52
|
+
* check before warning, and Radix `Slot` merges the parent's props onto the inner
|
|
53
|
+
* `<div>` exactly the way `slottable`'s `Slot`/`Primitive.div` branch did.
|
|
54
|
+
*/
|
|
55
|
+
const CardRoot = composable<HTMLDivElement, CardRootProps>(
|
|
56
|
+
({ children, id, role, border = true, fullWidth, density, ...props }, forwardedRef) => {
|
|
71
57
|
const { className, ...rest } = composableProps(props);
|
|
72
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
73
58
|
const { tx } = useThemeContext();
|
|
74
59
|
|
|
75
60
|
return (
|
|
76
|
-
<
|
|
77
|
-
|
|
78
|
-
{
|
|
61
|
+
<Column.Root
|
|
62
|
+
asChild
|
|
63
|
+
gutter={density === 'lg' ? 'lg' : density === 'sm' || density === 'xs' ? 'sm' : 'md'}
|
|
64
|
+
classNames={tx('card.root', { border, fullWidth }, className)}
|
|
79
65
|
role={role ?? 'group'}
|
|
80
|
-
className={tx('card.root', { border, fullWidth }, className)}
|
|
81
|
-
ref={forwardedRef}
|
|
82
66
|
>
|
|
83
|
-
<
|
|
84
|
-
|
|
67
|
+
<div {...rest} {...(id && { 'data-object-id': id })} ref={forwardedRef}>
|
|
68
|
+
{children}
|
|
69
|
+
</div>
|
|
70
|
+
</Column.Root>
|
|
85
71
|
);
|
|
86
72
|
},
|
|
87
73
|
);
|
|
@@ -89,24 +75,41 @@ const CardRoot = slottable<HTMLDivElement, CardRootOwnProps>(
|
|
|
89
75
|
CardRoot.displayName = CARD_ROOT_NAME;
|
|
90
76
|
|
|
91
77
|
//
|
|
92
|
-
//
|
|
78
|
+
// Header
|
|
93
79
|
//
|
|
94
80
|
|
|
95
|
-
const
|
|
81
|
+
const CARD_HEADER_NAME = 'Card.Header';
|
|
96
82
|
|
|
97
|
-
type
|
|
83
|
+
type CardHeaderProps = SlottableProps;
|
|
98
84
|
|
|
99
|
-
|
|
100
|
-
|
|
85
|
+
/**
|
|
86
|
+
* Top header row of a Card. Renders as a `<header>` and shares `Card.Row`'s subgrid +
|
|
87
|
+
* `data-slot` layout: `Card.Block` children land in the gutters, anonymous children
|
|
88
|
+
* (e.g. `Card.Title`) in the center. Sets `--icon-size` 5 — header icons are larger than
|
|
89
|
+
* row icons (which use 4). Not a toolbar: most headers carry 0–1 controls, so `role="toolbar"`
|
|
90
|
+
* was inaccurate; controls are reached by normal tab order.
|
|
91
|
+
*/
|
|
92
|
+
const CardHeader = slottable<HTMLDivElement, CardHeaderProps>(
|
|
93
|
+
({ children, asChild, style, ...props }, forwardedRef) => {
|
|
94
|
+
const { tx } = useThemeContext();
|
|
95
|
+
const { className, ...rest } = composableProps(props);
|
|
96
|
+
// `@radix-ui/react-primitive` has no `header` node; the intrinsic element handles asChild via Slot.
|
|
97
|
+
const Comp = asChild ? Slot : 'header';
|
|
101
98
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
}
|
|
99
|
+
return (
|
|
100
|
+
<Comp
|
|
101
|
+
{...rest}
|
|
102
|
+
style={{ ...iconSize(5), ...style }}
|
|
103
|
+
className={tx('card.header', {}, className)}
|
|
104
|
+
ref={forwardedRef}
|
|
105
|
+
>
|
|
106
|
+
{children}
|
|
107
|
+
</Comp>
|
|
108
|
+
);
|
|
109
|
+
},
|
|
110
|
+
);
|
|
108
111
|
|
|
109
|
-
|
|
112
|
+
CardHeader.displayName = CARD_HEADER_NAME;
|
|
110
113
|
|
|
111
114
|
//
|
|
112
115
|
// DragHandle
|
|
@@ -116,33 +119,62 @@ const CARD_DRAG_HANDLE_NAME = 'Card.DragHandle';
|
|
|
116
119
|
|
|
117
120
|
type CardDragHandleProps = ToolbarDragHandleProps;
|
|
118
121
|
|
|
119
|
-
const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
122
|
+
const CardDragHandle = forwardRef<HTMLButtonElement, CardDragHandleProps>(
|
|
123
|
+
({ testId = 'drag-handle', label }, forwardedRef) => {
|
|
124
|
+
const { t } = useTranslation(translationKey);
|
|
125
|
+
return (
|
|
126
|
+
<CardBlock>
|
|
127
|
+
<IconButton
|
|
128
|
+
data-testid={testId}
|
|
129
|
+
tabIndex={-1}
|
|
130
|
+
noTooltip
|
|
131
|
+
iconOnly
|
|
132
|
+
icon='ph--dots-six-vertical--regular'
|
|
133
|
+
variant='ghost'
|
|
134
|
+
label={label ?? t('toolbar-drag-handle.label')}
|
|
135
|
+
classNames='dx-focus-ring-none cursor-pointer text-base-fg'
|
|
136
|
+
disabled={!forwardedRef}
|
|
137
|
+
ref={forwardedRef}
|
|
138
|
+
/>
|
|
139
|
+
</CardBlock>
|
|
140
|
+
);
|
|
141
|
+
},
|
|
142
|
+
);
|
|
126
143
|
|
|
127
144
|
CardDragHandle.displayName = CARD_DRAG_HANDLE_NAME;
|
|
128
145
|
|
|
129
146
|
//
|
|
130
|
-
//
|
|
147
|
+
// ActionIconButton
|
|
131
148
|
//
|
|
132
149
|
|
|
133
|
-
const
|
|
150
|
+
const CARD_ACTION_ICON_BUTTON_NAME = 'Card.ActionIconButton';
|
|
134
151
|
|
|
135
|
-
type
|
|
152
|
+
type CardActionIconButtonProps = ToolbarActionIconButtonProps;
|
|
136
153
|
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
)
|
|
143
|
-
});
|
|
154
|
+
const CARD_ACTION_ICONS = { close: 'ph--x--regular', delete: 'ph--trash--regular' } as const;
|
|
155
|
+
|
|
156
|
+
const CARD_ACTION_LABEL_KEYS = { close: 'toolbar-close.label', delete: 'toolbar-delete.label' } as const;
|
|
157
|
+
|
|
158
|
+
const CardActionIconButton = forwardRef<HTMLButtonElement, CardActionIconButtonProps>(
|
|
159
|
+
({ action, onClick, label }, forwardedRef) => {
|
|
160
|
+
const { t } = useTranslation(translationKey);
|
|
161
|
+
return (
|
|
162
|
+
<CardBlock end>
|
|
163
|
+
<IconButton
|
|
164
|
+
iconOnly
|
|
165
|
+
icon={CARD_ACTION_ICONS[action]}
|
|
166
|
+
variant='ghost'
|
|
167
|
+
label={label ?? t(CARD_ACTION_LABEL_KEYS[action])}
|
|
168
|
+
classNames='cursor-pointer'
|
|
169
|
+
onClick={onClick}
|
|
170
|
+
ref={forwardedRef}
|
|
171
|
+
/>
|
|
172
|
+
</CardBlock>
|
|
173
|
+
);
|
|
174
|
+
},
|
|
175
|
+
);
|
|
144
176
|
|
|
145
|
-
|
|
177
|
+
CardActionIconButton.displayName = CARD_ACTION_ICON_BUTTON_NAME;
|
|
146
178
|
|
|
147
179
|
//
|
|
148
180
|
// Menu
|
|
@@ -150,58 +182,69 @@ CloseIconButton.displayName = CARD_CLOSE_ICON_BUTTON_NAME;
|
|
|
150
182
|
|
|
151
183
|
const CARD_MENU_NAME = 'Card.Menu';
|
|
152
184
|
|
|
153
|
-
type CardMenuItem<T extends any | void = void> = ToolbarMenuItem<T>;
|
|
154
|
-
|
|
155
185
|
type CardMenuProps<T extends any | void = void> = ToolbarMenuProps<T>;
|
|
156
186
|
|
|
157
|
-
|
|
158
|
-
const {
|
|
159
|
-
const combinedItems = [...(items ?? []), ...((menuItems as CardMenuItem<T>[]) ?? [])];
|
|
160
|
-
|
|
187
|
+
function CardMenu<T extends any | void = void>({ context, items }: CardMenuProps<T>) {
|
|
188
|
+
const { t } = useTranslation(translationKey);
|
|
161
189
|
return (
|
|
162
|
-
<
|
|
163
|
-
<
|
|
164
|
-
|
|
190
|
+
<CardBlock end>
|
|
191
|
+
<DropdownMenu.Root>
|
|
192
|
+
<DropdownMenu.Trigger disabled={!items?.length} asChild>
|
|
193
|
+
<IconButton
|
|
194
|
+
iconOnly
|
|
195
|
+
variant='ghost'
|
|
196
|
+
icon='ph--dots-three-vertical--regular'
|
|
197
|
+
label={t('toolbar-menu.label')}
|
|
198
|
+
/>
|
|
199
|
+
</DropdownMenu.Trigger>
|
|
200
|
+
{(items?.length ?? 0) > 0 && (
|
|
201
|
+
<DropdownMenu.Portal>
|
|
202
|
+
<DropdownMenu.Content>
|
|
203
|
+
<DropdownMenu.Viewport>
|
|
204
|
+
{items?.map(({ label, onClick: onSelect }, index) => (
|
|
205
|
+
// `context` is the generic payload threaded to each handler; the cast is the
|
|
206
|
+
// generic boundary (T may be `void`, so `context` is typed `T | undefined`).
|
|
207
|
+
<DropdownMenu.Item key={index} onSelect={() => onSelect(context as T)}>
|
|
208
|
+
{label}
|
|
209
|
+
</DropdownMenu.Item>
|
|
210
|
+
))}
|
|
211
|
+
</DropdownMenu.Viewport>
|
|
212
|
+
<DropdownMenu.Arrow />
|
|
213
|
+
</DropdownMenu.Content>
|
|
214
|
+
</DropdownMenu.Portal>
|
|
215
|
+
)}
|
|
216
|
+
</DropdownMenu.Root>
|
|
217
|
+
</CardBlock>
|
|
165
218
|
);
|
|
166
|
-
}
|
|
219
|
+
}
|
|
167
220
|
|
|
168
|
-
|
|
221
|
+
CardMenu.displayName = CARD_MENU_NAME;
|
|
169
222
|
|
|
170
223
|
//
|
|
171
|
-
//
|
|
224
|
+
// Block
|
|
172
225
|
//
|
|
173
226
|
|
|
174
|
-
const
|
|
227
|
+
const CARD_BLOCK_NAME = 'Card.Block';
|
|
175
228
|
|
|
176
|
-
|
|
177
|
-
return (
|
|
178
|
-
<CardIconBlock>
|
|
179
|
-
<Icon {...props} />
|
|
180
|
-
</CardIconBlock>
|
|
181
|
-
);
|
|
182
|
-
};
|
|
229
|
+
type CardBlockProps = SlottableProps<{ end?: boolean; compact?: boolean; square?: boolean }>;
|
|
183
230
|
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
const
|
|
191
|
-
|
|
192
|
-
const CardIconBlock = forwardRef<HTMLDivElement, ThemedClassName<PropsWithChildren<{ padding?: boolean }>>>(
|
|
193
|
-
({ classNames, children, padding, ...props }, forwardedRef) => {
|
|
194
|
-
const { tx } = useThemeContext();
|
|
231
|
+
/**
|
|
232
|
+
* Leading (default) or trailing (`end`) gutter slot of a Card row/header. Sized to the
|
|
233
|
+
* rail-item square so a passive `<Icon>` aligns with an `IconButton`. Defaults text color to
|
|
234
|
+
* `subdued` so a decorative `<Icon>` child needs no styling; interactive children set their own.
|
|
235
|
+
*/
|
|
236
|
+
const CardBlock = composable<HTMLDivElement, CardBlockProps>(({ children, ...props }, forwardedRef) => {
|
|
237
|
+
const { tx } = useThemeContext();
|
|
238
|
+
const { className, ...rest } = composableProps(props);
|
|
195
239
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
);
|
|
240
|
+
return (
|
|
241
|
+
<Column.Block {...rest} classNames={tx('card.block', {}, className)} ref={forwardedRef}>
|
|
242
|
+
{children}
|
|
243
|
+
</Column.Block>
|
|
244
|
+
);
|
|
245
|
+
});
|
|
203
246
|
|
|
204
|
-
|
|
247
|
+
CardBlock.displayName = CARD_BLOCK_NAME;
|
|
205
248
|
|
|
206
249
|
//
|
|
207
250
|
// Title
|
|
@@ -224,47 +267,24 @@ const CardTitle = slottable<HTMLDivElement>(({ children, asChild, ...props }, fo
|
|
|
224
267
|
CardTitle.displayName = CARD_TITLE_NAME;
|
|
225
268
|
|
|
226
269
|
//
|
|
227
|
-
//
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
const CARD_CONTENT_NAME = 'Card.Content';
|
|
231
|
-
|
|
232
|
-
const CardContent = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
233
|
-
const { className, ...rest } = composableProps(props);
|
|
234
|
-
const Comp = asChild ? Slot : Primitive.div;
|
|
235
|
-
const { tx } = useThemeContext();
|
|
236
|
-
|
|
237
|
-
return (
|
|
238
|
-
<Comp {...rest} className={tx('card.content', {}, className)} ref={forwardedRef}>
|
|
239
|
-
{children}
|
|
240
|
-
</Comp>
|
|
241
|
-
);
|
|
242
|
-
});
|
|
243
|
-
|
|
244
|
-
CardContent.displayName = CARD_CONTENT_NAME;
|
|
245
|
-
|
|
246
|
-
//
|
|
247
|
-
// Row
|
|
270
|
+
// Body
|
|
248
271
|
//
|
|
249
272
|
|
|
250
|
-
const
|
|
251
|
-
|
|
252
|
-
type CardRowProps = { icon?: string; fullWidth?: boolean };
|
|
273
|
+
const CARD_BODY_NAME = 'Card.Body';
|
|
253
274
|
|
|
254
|
-
const
|
|
275
|
+
const CardBody = slottable<HTMLDivElement>(({ children, asChild, ...props }, forwardedRef) => {
|
|
255
276
|
const { className, ...rest } = composableProps(props);
|
|
256
277
|
const Comp = asChild ? Slot : Primitive.div;
|
|
257
278
|
const { tx } = useThemeContext();
|
|
258
279
|
|
|
259
280
|
return (
|
|
260
|
-
<Comp {...rest} className={tx('card.
|
|
261
|
-
{(icon && <CardIcon classNames='text-subdued' icon={icon} size={4} />) || <div />}
|
|
281
|
+
<Comp {...rest} className={tx('card.body', {}, className)} ref={forwardedRef}>
|
|
262
282
|
{children}
|
|
263
283
|
</Comp>
|
|
264
284
|
);
|
|
265
285
|
});
|
|
266
286
|
|
|
267
|
-
|
|
287
|
+
CardBody.displayName = CARD_BODY_NAME;
|
|
268
288
|
|
|
269
289
|
//
|
|
270
290
|
// Section
|
|
@@ -272,44 +292,68 @@ CardRow.displayName = CARD_ROW_NAME;
|
|
|
272
292
|
|
|
273
293
|
const CARD_SECTION_NAME = 'Card.Section';
|
|
274
294
|
|
|
295
|
+
type CardSectionProps = { title?: ReactNode };
|
|
296
|
+
|
|
275
297
|
/**
|
|
276
|
-
*
|
|
298
|
+
* A labeled grouping of card content. `display: contents` keeps children aligned
|
|
299
|
+
* to the Card's column grid (like `Card.Body`); when `title` is provided,
|
|
300
|
+
* renders a subheading row at the top and exposes the group with
|
|
301
|
+
* `role='group' aria-labelledby=…` for screen readers.
|
|
277
302
|
*/
|
|
278
|
-
const CardSection = slottable<HTMLDivElement>(
|
|
279
|
-
|
|
280
|
-
|
|
303
|
+
const CardSection = slottable<HTMLDivElement, CardSectionProps>(
|
|
304
|
+
({ children, asChild, title, role, ...props }, forwardedRef) => {
|
|
305
|
+
const { className, ...rest } = composableProps(props);
|
|
306
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
307
|
+
const { tx } = useThemeContext();
|
|
308
|
+
const titleId = useId();
|
|
281
309
|
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
})
|
|
310
|
+
return (
|
|
311
|
+
<Comp
|
|
312
|
+
{...rest}
|
|
313
|
+
role={role ?? (title ? 'group' : 'none')}
|
|
314
|
+
aria-labelledby={title ? titleId : undefined}
|
|
315
|
+
className={tx('card.section', {}, className)}
|
|
316
|
+
ref={forwardedRef}
|
|
317
|
+
>
|
|
318
|
+
{title && (
|
|
319
|
+
<div id={titleId} className={tx('card.section-title', {})}>
|
|
320
|
+
{title}
|
|
321
|
+
</div>
|
|
322
|
+
)}
|
|
323
|
+
{children}
|
|
324
|
+
</Comp>
|
|
325
|
+
);
|
|
326
|
+
},
|
|
327
|
+
);
|
|
288
328
|
|
|
289
329
|
CardSection.displayName = CARD_SECTION_NAME;
|
|
290
330
|
|
|
291
331
|
//
|
|
292
|
-
//
|
|
332
|
+
// Row
|
|
293
333
|
//
|
|
294
334
|
|
|
295
|
-
const
|
|
335
|
+
const CARD_ROW_NAME = 'Card.Row';
|
|
296
336
|
|
|
297
|
-
type
|
|
337
|
+
type CardRowProps = { fullWidth?: boolean };
|
|
298
338
|
|
|
299
339
|
/**
|
|
300
|
-
*
|
|
340
|
+
* A row inside a Card.
|
|
341
|
+
* - Default: spans all 3 columns as a subgrid; children align via `data-slot` — `Card.Block`
|
|
342
|
+
* lands in the gutters (start/end), anonymous children in the center. Sets `--icon-size` 4.
|
|
343
|
+
* - `fullWidth`: spans all columns without a subgrid — children do their own internal layout;
|
|
344
|
+
* `Card.Block` placement is inert in this mode.
|
|
301
345
|
*/
|
|
302
|
-
const
|
|
303
|
-
({ children, asChild,
|
|
346
|
+
const CardRow = slottable<HTMLDivElement, CardRowProps>(
|
|
347
|
+
({ children, asChild, fullWidth, style, ...props }, forwardedRef) => {
|
|
348
|
+
const { tx } = useThemeContext();
|
|
304
349
|
const { className, ...rest } = composableProps(props);
|
|
305
350
|
const Comp = asChild ? Slot : Primitive.div;
|
|
306
|
-
const { tx } = useThemeContext();
|
|
307
351
|
|
|
308
352
|
return (
|
|
309
353
|
<Comp
|
|
310
354
|
{...rest}
|
|
311
|
-
|
|
312
|
-
className={tx('card.
|
|
355
|
+
style={{ ...iconSize(4), ...style }}
|
|
356
|
+
className={tx('card.row', { fullWidth }, className)}
|
|
313
357
|
ref={forwardedRef}
|
|
314
358
|
>
|
|
315
359
|
{children}
|
|
@@ -318,7 +362,7 @@ const CardHeading = slottable<HTMLDivElement, CardHeadingProps>(
|
|
|
318
362
|
},
|
|
319
363
|
);
|
|
320
364
|
|
|
321
|
-
|
|
365
|
+
CardRow.displayName = CARD_ROW_NAME;
|
|
322
366
|
|
|
323
367
|
//
|
|
324
368
|
// Text
|
|
@@ -326,13 +370,19 @@ CardHeading.displayName = CARD_HEADING_NAME;
|
|
|
326
370
|
|
|
327
371
|
const CARD_TEXT_NAME = 'Card.Text';
|
|
328
372
|
|
|
329
|
-
|
|
373
|
+
// `onClick` is opted in explicitly: `ComposableProps` deliberately excludes event handlers, but the
|
|
374
|
+
// part spreads rest props onto its element, so the handler is forwarded at runtime.
|
|
375
|
+
type CardTextProps = {
|
|
376
|
+
truncate?: boolean;
|
|
377
|
+
variant?: 'default' | 'description';
|
|
378
|
+
onClick?: MouseEventHandler<HTMLDivElement>;
|
|
379
|
+
};
|
|
330
380
|
|
|
331
381
|
const CardText = slottable<HTMLDivElement, CardTextProps>(
|
|
332
382
|
({ children, asChild, role, truncate, variant = 'default', ...props }, forwardedRef) => {
|
|
383
|
+
const { tx } = useThemeContext();
|
|
333
384
|
const { className, ...rest } = composableProps(props);
|
|
334
385
|
const Comp = asChild ? Slot : Primitive.div;
|
|
335
|
-
const { tx } = useThemeContext();
|
|
336
386
|
|
|
337
387
|
return (
|
|
338
388
|
<Comp {...rest} role={role ?? 'none'} className={tx('card.text', { variant }, className)} ref={forwardedRef}>
|
|
@@ -350,28 +400,27 @@ CardText.displayName = CARD_TEXT_NAME;
|
|
|
350
400
|
|
|
351
401
|
const CARD_HTML_NAME = 'Card.Html';
|
|
352
402
|
|
|
353
|
-
type CardHtmlProps = { html
|
|
403
|
+
type CardHtmlProps = { html?: string; variant?: 'default' | 'description' };
|
|
354
404
|
|
|
355
405
|
/**
|
|
356
406
|
* Renders sanitized HTML content inside a card text slot.
|
|
357
407
|
* Uses DOMPurify to prevent XSS from untrusted markup (e.g. RSS feed content).
|
|
358
408
|
*/
|
|
359
|
-
|
|
409
|
+
function CardHtml({ html = '', variant = 'default', ...props }: CardHtmlProps & ThemedClassName<object>) {
|
|
360
410
|
const { tx } = useThemeContext();
|
|
361
411
|
const sanitized = useMemo(() => DOMPurify.sanitize(html), [html]);
|
|
362
412
|
|
|
363
413
|
return (
|
|
364
414
|
<div
|
|
365
415
|
{...props}
|
|
366
|
-
role='none'
|
|
367
416
|
className={tx('card.text', { variant })}
|
|
368
417
|
// eslint-disable-next-line react/no-danger
|
|
369
418
|
dangerouslySetInnerHTML={{ __html: sanitized }}
|
|
370
419
|
/>
|
|
371
420
|
);
|
|
372
|
-
}
|
|
421
|
+
}
|
|
373
422
|
|
|
374
|
-
|
|
423
|
+
CardHtml.displayName = CARD_HTML_NAME;
|
|
375
424
|
|
|
376
425
|
//
|
|
377
426
|
// Poster
|
|
@@ -383,31 +432,40 @@ type CardPosterProps = ThemedClassName<
|
|
|
383
432
|
{
|
|
384
433
|
alt: string;
|
|
385
434
|
aspect?: 'video' | 'auto';
|
|
386
|
-
} & Partial<{ image: string; icon: string }>
|
|
435
|
+
} & Partial<{ image: string; icon: string }> &
|
|
436
|
+
// The image-rendering props (`fit`, `crossOrigin`, color-extraction options) are forwarded to
|
|
437
|
+
// the underlying `Image`. `src`/`alt`/`classNames` are owned by the poster.
|
|
438
|
+
Omit<ImageProps, 'src' | 'alt' | 'classNames'>
|
|
387
439
|
>;
|
|
388
440
|
|
|
389
|
-
|
|
441
|
+
function CardPoster({
|
|
442
|
+
classNames,
|
|
443
|
+
alt,
|
|
444
|
+
aspect: aspectProp,
|
|
445
|
+
image,
|
|
446
|
+
icon,
|
|
447
|
+
fit = 'cover',
|
|
448
|
+
...imageProps
|
|
449
|
+
}: CardPosterProps) {
|
|
390
450
|
const { tx } = useThemeContext();
|
|
391
|
-
const aspect =
|
|
451
|
+
const aspect = aspectProp === 'auto' ? 'aspect-auto' : 'aspect-video';
|
|
392
452
|
|
|
393
|
-
if (
|
|
453
|
+
if (image) {
|
|
394
454
|
return (
|
|
395
|
-
<
|
|
396
|
-
<Image classNames={[tx('card.poster', {}), aspect, props.classNames]} src={props.image} alt={props.alt} />
|
|
397
|
-
</div>
|
|
455
|
+
<Image classNames={[tx('card.poster', {}), aspect, classNames]} src={image} alt={alt} fit={fit} {...imageProps} />
|
|
398
456
|
);
|
|
399
457
|
}
|
|
400
458
|
|
|
401
|
-
if (
|
|
459
|
+
if (icon) {
|
|
402
460
|
return (
|
|
403
|
-
<div role='image' className={tx('card.poster-icon', {}, [aspect,
|
|
404
|
-
<Icon icon={
|
|
461
|
+
<div role='image' className={tx('card.poster-icon', {}, [aspect, classNames])} aria-label={alt}>
|
|
462
|
+
<Icon icon={icon} size={10} />
|
|
405
463
|
</div>
|
|
406
464
|
);
|
|
407
465
|
}
|
|
408
|
-
}
|
|
466
|
+
}
|
|
409
467
|
|
|
410
|
-
|
|
468
|
+
CardPoster.displayName = CARD_POSTER_NAME;
|
|
411
469
|
|
|
412
470
|
//
|
|
413
471
|
// Action
|
|
@@ -417,18 +475,26 @@ const CARD_ACTION_NAME = 'Card.Action';
|
|
|
417
475
|
|
|
418
476
|
type CardActionProps = { icon?: string; label: string; actionIcon?: string; onClick?: () => void };
|
|
419
477
|
|
|
420
|
-
|
|
478
|
+
function CardAction({ icon, actionIcon = 'ph--arrow-right--regular', label, onClick }: CardActionProps) {
|
|
421
479
|
const { tx } = useThemeContext();
|
|
422
480
|
return (
|
|
423
481
|
<Button variant='ghost' classNames={tx('card.action', {})} onClick={onClick}>
|
|
424
|
-
{icon
|
|
425
|
-
|
|
426
|
-
|
|
482
|
+
{icon && (
|
|
483
|
+
<CardBlock>
|
|
484
|
+
<Icon icon={icon} size={4} />
|
|
485
|
+
</CardBlock>
|
|
486
|
+
)}
|
|
487
|
+
<span className={tx('card.action-label', {})}>{label}</span>
|
|
488
|
+
{actionIcon && (
|
|
489
|
+
<CardBlock end>
|
|
490
|
+
<Icon icon={actionIcon} size={4} />
|
|
491
|
+
</CardBlock>
|
|
492
|
+
)}
|
|
427
493
|
</Button>
|
|
428
494
|
);
|
|
429
|
-
}
|
|
495
|
+
}
|
|
430
496
|
|
|
431
|
-
|
|
497
|
+
CardAction.displayName = CARD_ACTION_NAME;
|
|
432
498
|
|
|
433
499
|
//
|
|
434
500
|
// Link
|
|
@@ -438,18 +504,22 @@ const CARD_LINK_NAME = 'Card.Link';
|
|
|
438
504
|
|
|
439
505
|
type CardLinkProps = { label: string; href: string };
|
|
440
506
|
|
|
441
|
-
|
|
507
|
+
function CardLink({ label, href }: CardLinkProps) {
|
|
442
508
|
const { tx } = useThemeContext();
|
|
443
509
|
return (
|
|
444
510
|
<a className={tx('card.link', {})} data-variant='ghost' href={href} target='_blank' rel='noreferrer'>
|
|
445
|
-
<
|
|
511
|
+
<CardBlock>
|
|
512
|
+
<Icon icon='ph--link--regular' size={4} />
|
|
513
|
+
</CardBlock>
|
|
446
514
|
<span className={tx('card.link-label', {})}>{label}</span>
|
|
447
|
-
<
|
|
515
|
+
<CardBlock end classNames='invisible group-hover:visible'>
|
|
516
|
+
<Icon icon='ph--arrow-square-out--regular' size={4} />
|
|
517
|
+
</CardBlock>
|
|
448
518
|
</a>
|
|
449
519
|
);
|
|
450
|
-
}
|
|
520
|
+
}
|
|
451
521
|
|
|
452
|
-
|
|
522
|
+
CardLink.displayName = CARD_LINK_NAME;
|
|
453
523
|
|
|
454
524
|
//
|
|
455
525
|
// Card
|
|
@@ -458,24 +528,22 @@ const CardLink = ({ label, href }: CardLinkProps) => {
|
|
|
458
528
|
export const Card = {
|
|
459
529
|
Root: CardRoot,
|
|
460
530
|
|
|
461
|
-
//
|
|
462
|
-
|
|
463
|
-
ToolbarIconButton: Toolbar.IconButton,
|
|
464
|
-
ToolbarSeparator: Toolbar.Separator,
|
|
531
|
+
// Header
|
|
532
|
+
Header: CardHeader,
|
|
465
533
|
|
|
466
|
-
//
|
|
467
|
-
|
|
534
|
+
// Header / row parts
|
|
535
|
+
Block: CardBlock,
|
|
468
536
|
DragHandle: CardDragHandle,
|
|
469
|
-
|
|
537
|
+
ActionIconButton: CardActionIconButton,
|
|
470
538
|
Menu: CardMenu,
|
|
471
|
-
Icon: CardIcon,
|
|
472
539
|
Title: CardTitle,
|
|
473
540
|
|
|
474
|
-
//
|
|
475
|
-
|
|
476
|
-
Row: CardRow,
|
|
541
|
+
// Body
|
|
542
|
+
Body: CardBody,
|
|
477
543
|
Section: CardSection,
|
|
478
|
-
|
|
544
|
+
Row: CardRow,
|
|
545
|
+
|
|
546
|
+
// Body parts
|
|
479
547
|
Text: CardText,
|
|
480
548
|
Html: CardHtml,
|
|
481
549
|
Poster: CardPoster,
|
|
@@ -484,10 +552,11 @@ export const Card = {
|
|
|
484
552
|
};
|
|
485
553
|
|
|
486
554
|
export type {
|
|
487
|
-
CardContextValue,
|
|
488
555
|
CardRootProps,
|
|
489
|
-
|
|
556
|
+
CardHeaderProps,
|
|
557
|
+
CardBlockProps,
|
|
490
558
|
CardDragHandleProps,
|
|
491
|
-
|
|
559
|
+
CardActionIconButtonProps,
|
|
492
560
|
CardMenuProps,
|
|
561
|
+
CardSectionProps,
|
|
493
562
|
};
|