@dxos/react-ui 0.10.0 → 0.11.1
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/dist/lib/chunk-parse-stack.mjs +1566 -0
- package/dist/lib/chunk-parse-stack.mjs.map +1 -0
- package/dist/lib/index.mjs +5220 -0
- package/dist/lib/index.mjs.map +1 -0
- package/dist/lib/testing.mjs +144 -0
- package/dist/lib/testing.mjs.map +1 -0
- package/dist/lib/translations.mjs +38 -0
- package/dist/lib/translations.mjs.map +1 -0
- package/dist/types/src/components/Avatars/Avatar.d.ts +1 -6
- package/dist/types/src/components/Avatars/Avatar.d.ts.map +1 -1
- package/dist/types/src/components/Avatars/AvatarContext.d.ts +9 -0
- package/dist/types/src/components/Avatars/AvatarContext.d.ts.map +1 -0
- package/dist/types/src/components/Avatars/index.d.ts +1 -0
- package/dist/types/src/components/Avatars/index.d.ts.map +1 -1
- package/dist/types/src/components/Breadcrumb/Breadcrumb.d.ts +1 -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.map +1 -1
- package/dist/types/src/components/Button/Button.d.ts +1 -6
- package/dist/types/src/components/Button/Button.d.ts.map +1 -1
- package/dist/types/src/components/Button/ButtonGroupContext.d.ts +9 -0
- package/dist/types/src/components/Button/ButtonGroupContext.d.ts.map +1 -0
- package/dist/types/src/components/Button/IconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.stories.d.ts.map +1 -1
- package/dist/types/src/components/Button/IconButton.theme.d.ts +1 -0
- package/dist/types/src/components/Button/IconButton.theme.d.ts.map +1 -1
- package/dist/types/src/components/Button/SystemIconButton.d.ts +1 -1
- package/dist/types/src/components/Button/SystemIconButton.d.ts.map +1 -1
- package/dist/types/src/components/Button/index.d.ts +1 -0
- package/dist/types/src/components/Button/index.d.ts.map +1 -1
- package/dist/types/src/components/Calendar/Calendar.d.ts +0 -2
- package/dist/types/src/components/Calendar/Calendar.d.ts.map +1 -1
- package/dist/types/src/components/Calendar/index.d.ts +1 -0
- package/dist/types/src/components/Calendar/index.d.ts.map +1 -1
- package/dist/types/src/components/Calendar/parse-calendar-date.d.ts +3 -0
- package/dist/types/src/components/Calendar/parse-calendar-date.d.ts.map +1 -0
- package/dist/types/src/components/Card/Card.d.ts +42 -15
- package/dist/types/src/components/Card/Card.d.ts.map +1 -1
- package/dist/types/src/components/Card/Card.theme.d.ts +0 -1
- package/dist/types/src/components/Card/Card.theme.d.ts.map +1 -1
- package/dist/types/src/components/Carousel/Carousel.d.ts +2 -4
- package/dist/types/src/components/Carousel/Carousel.d.ts.map +1 -1
- package/dist/types/src/components/Carousel/CarouselContext.d.ts +8 -0
- package/dist/types/src/components/Carousel/CarouselContext.d.ts.map +1 -0
- package/dist/types/src/components/Carousel/index.d.ts +1 -0
- package/dist/types/src/components/Carousel/index.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/ClipboardContext.d.ts +7 -0
- package/dist/types/src/components/Clipboard/ClipboardContext.d.ts.map +1 -0
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts +0 -6
- package/dist/types/src/components/Clipboard/ClipboardProvider.d.ts.map +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts +1 -1
- package/dist/types/src/components/Clipboard/index.d.ts.map +1 -1
- package/dist/types/src/components/Column/Column.d.ts +7 -12
- package/dist/types/src/components/Column/Column.d.ts.map +1 -1
- package/dist/types/src/components/Column/Column.stories.d.ts +2 -2
- package/dist/types/src/components/Column/Column.theme.d.ts +0 -1
- package/dist/types/src/components/Column/Column.theme.d.ts.map +1 -1
- package/dist/types/src/components/Column/ColumnContext.d.ts +9 -0
- package/dist/types/src/components/Column/ColumnContext.d.ts.map +1 -0
- package/dist/types/src/components/Column/index.d.ts +1 -0
- package/dist/types/src/components/Column/index.d.ts.map +1 -1
- package/dist/types/src/components/Column/withColumn.d.ts +40 -4
- package/dist/types/src/components/Column/withColumn.d.ts.map +1 -1
- package/dist/types/src/components/DatePicker/DatePicker.d.ts +0 -10
- package/dist/types/src/components/DatePicker/DatePicker.d.ts.map +1 -1
- package/dist/types/src/components/DatePicker/DatePickerContext.d.ts +13 -0
- package/dist/types/src/components/DatePicker/DatePickerContext.d.ts.map +1 -0
- package/dist/types/src/components/DatePicker/index.d.ts +1 -0
- package/dist/types/src/components/DatePicker/index.d.ts.map +1 -1
- package/dist/types/src/components/Dialog/AlertDialog.d.ts +3 -3
- package/dist/types/src/components/Dialog/Dialog.d.ts +3 -3
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts +5 -10
- package/dist/types/src/components/ErrorFallback/ErrorStack.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/index.d.ts +1 -0
- package/dist/types/src/components/ErrorFallback/index.d.ts.map +1 -1
- package/dist/types/src/components/ErrorFallback/parse-stack.d.ts +8 -0
- package/dist/types/src/components/ErrorFallback/parse-stack.d.ts.map +1 -0
- package/dist/types/src/components/Focus/Focus.d.ts +2 -10
- package/dist/types/src/components/Focus/Focus.d.ts.map +1 -1
- package/dist/types/src/components/Focus/FocusContext.d.ts +10 -0
- package/dist/types/src/components/Focus/FocusContext.d.ts.map +1 -0
- package/dist/types/src/components/Focus/index.d.ts +1 -0
- package/dist/types/src/components/Focus/index.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.d.ts +9 -10
- package/dist/types/src/components/Input/Input.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.stories.d.ts +7 -2
- package/dist/types/src/components/Input/Input.stories.d.ts.map +1 -1
- package/dist/types/src/components/Input/Input.theme.d.ts +13 -0
- package/dist/types/src/components/Input/Input.theme.d.ts.map +1 -1
- package/dist/types/src/components/Input/InputTriggerContext.d.ts +15 -0
- package/dist/types/src/components/Input/InputTriggerContext.d.ts.map +1 -0
- package/dist/types/src/components/Input/SegmentedInput.d.ts.map +1 -1
- package/dist/types/src/components/Input/index.d.ts +1 -0
- package/dist/types/src/components/Input/index.d.ts.map +1 -1
- package/dist/types/src/components/Main/Main.d.ts +2 -35
- 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.map +1 -1
- package/dist/types/src/components/Main/MainContext.d.ts +38 -0
- package/dist/types/src/components/Main/MainContext.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/MediaPlayer/MediaPlayer.d.ts +1 -17
- package/dist/types/src/components/MediaPlayer/MediaPlayer.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/index.d.ts +1 -0
- package/dist/types/src/components/MediaPlayer/index.d.ts.map +1 -1
- package/dist/types/src/components/MediaPlayer/media-kind.d.ts +18 -0
- package/dist/types/src/components/MediaPlayer/media-kind.d.ts.map +1 -0
- package/dist/types/src/components/Menu/DropdownMenu.d.ts +6 -22
- package/dist/types/src/components/Menu/DropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts +1 -11
- package/dist/types/src/components/Menu/DropdownMenu.stories.d.ts.map +1 -1
- package/dist/types/src/components/Menu/DropdownMenuContext.d.ts +27 -0
- package/dist/types/src/components/Menu/DropdownMenuContext.d.ts.map +1 -0
- package/dist/types/src/components/Menu/index.d.ts +1 -0
- package/dist/types/src/components/Menu/index.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.d.ts +11 -6
- package/dist/types/src/components/Message/Message.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.stories.d.ts +4 -1
- package/dist/types/src/components/Message/Message.stories.d.ts.map +1 -1
- package/dist/types/src/components/Message/Message.theme.d.ts.map +1 -1
- package/dist/types/src/components/Message/index.d.ts +1 -0
- package/dist/types/src/components/Message/index.d.ts.map +1 -1
- package/dist/types/src/components/Message/message-icons.d.ts +3 -0
- package/dist/types/src/components/Message/message-icons.d.ts.map +1 -0
- package/dist/types/src/components/Panel/Panel.d.ts +4 -4
- package/dist/types/src/components/Panel/Panel.stories.d.ts.map +1 -1
- package/dist/types/src/components/Panel/Panel.theme.d.ts +1 -1
- package/dist/types/src/components/Panel/Panel.theme.d.ts.map +1 -1
- package/dist/types/src/components/Popover/Popover.d.ts +6 -10
- package/dist/types/src/components/Popover/Popover.d.ts.map +1 -1
- package/dist/types/src/components/Popover/PopoverContext.d.ts +29 -0
- package/dist/types/src/components/Popover/PopoverContext.d.ts.map +1 -0
- package/dist/types/src/components/Popover/index.d.ts +1 -0
- package/dist/types/src/components/Popover/index.d.ts.map +1 -1
- package/dist/types/src/components/ScrollArea/ScrollArea.d.ts +2 -2
- package/dist/types/src/components/ScrollArea/ScrollArea.stories.d.ts +2 -2
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts +3 -16
- package/dist/types/src/components/ScrollContainer/ScrollContainer.d.ts.map +1 -1
- package/dist/types/src/components/ScrollContainer/ScrollContainerContext.d.ts +16 -0
- package/dist/types/src/components/ScrollContainer/ScrollContainerContext.d.ts.map +1 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts +1 -0
- package/dist/types/src/components/ScrollContainer/index.d.ts.map +1 -1
- package/dist/types/src/components/Slider/Slider.d.ts +25 -0
- package/dist/types/src/components/Slider/Slider.d.ts.map +1 -0
- package/dist/types/src/components/Slider/Slider.stories.d.ts +29 -0
- package/dist/types/src/components/Slider/Slider.stories.d.ts.map +1 -0
- package/dist/types/src/components/Slider/Slider.test.d.ts +2 -0
- package/dist/types/src/components/Slider/Slider.test.d.ts.map +1 -0
- package/dist/types/src/components/Slider/Slider.theme.d.ts +7 -0
- package/dist/types/src/components/Slider/Slider.theme.d.ts.map +1 -0
- package/dist/types/src/components/Slider/index.d.ts +2 -0
- package/dist/types/src/components/Slider/index.d.ts.map +1 -0
- package/dist/types/src/components/Splitter/Splitter.d.ts +3 -3
- package/dist/types/src/components/Status/Status.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts +4 -2
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.theme.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/TextTooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/Tooltip.d.ts +2 -23
- package/dist/types/src/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/types/src/components/Tooltip/TooltipContext.d.ts +35 -0
- package/dist/types/src/components/Tooltip/TooltipContext.d.ts.map +1 -0
- package/dist/types/src/components/Tooltip/index.d.ts +1 -0
- package/dist/types/src/components/Tooltip/index.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- 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/hooks/useIconHref.d.ts +8 -0
- package/dist/types/src/hooks/useIconHref.d.ts.map +1 -1
- package/dist/types/src/hooks/useThemeContext.d.ts +2 -1
- package/dist/types/src/hooks/useThemeContext.d.ts.map +1 -1
- package/dist/types/src/hooks/useThemeContext.test.d.ts +2 -0
- package/dist/types/src/hooks/useThemeContext.test.d.ts.map +1 -0
- package/dist/types/src/playground/Density.stories.d.ts +11 -0
- package/dist/types/src/playground/Density.stories.d.ts.map +1 -0
- package/dist/types/src/playground/Elevation.stories.d.ts +14 -0
- package/dist/types/src/playground/Elevation.stories.d.ts.map +1 -0
- 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/DensityProvider/DensityContext.d.ts +6 -0
- package/dist/types/src/primitives/DensityProvider/DensityContext.d.ts.map +1 -0
- package/dist/types/src/primitives/DensityProvider/DensityProvider.d.ts +10 -4
- package/dist/types/src/primitives/DensityProvider/DensityProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/DensityProvider/index.d.ts +1 -0
- package/dist/types/src/primitives/DensityProvider/index.d.ts.map +1 -1
- 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/Grid/Grid.d.ts +1 -1
- package/dist/types/src/primitives/Grid/Grid.d.ts.map +1 -1
- package/dist/types/src/primitives/ThemeProvider/IconRegistry.d.ts +15 -0
- package/dist/types/src/primitives/ThemeProvider/IconRegistry.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/ThemeProvider.d.ts +1 -2
- package/dist/types/src/primitives/ThemeProvider/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ThemeProvider/ThemeProvider.stories.d.ts +1 -1
- package/dist/types/src/primitives/ThemeProvider/TranslationsContext.d.ts +112 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsContext.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts +0 -109
- package/dist/types/src/primitives/ThemeProvider/TranslationsProvider.d.ts.map +1 -1
- package/dist/types/src/primitives/ThemeProvider/icon-registry.d.ts +34 -0
- package/dist/types/src/primitives/ThemeProvider/icon-registry.d.ts.map +1 -0
- package/dist/types/src/primitives/ThemeProvider/index.d.ts +3 -1
- package/dist/types/src/primitives/ThemeProvider/index.d.ts.map +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts +1 -1
- package/dist/types/src/testing/decorators/withTheme.d.ts.map +1 -1
- package/dist/types/src/theme/defaultTheme.d.ts.map +1 -1
- package/dist/types/src/theme/index.d.ts +1 -0
- package/dist/types/src/theme/index.d.ts.map +1 -1
- package/dist/types/src/util/slots.d.ts +6 -3
- package/dist/types/src/util/slots.d.ts.map +1 -1
- package/dist/types/src/util/slots.stories.d.ts +14 -0
- package/dist/types/src/util/slots.stories.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +25 -27
- package/src/components/Avatars/Avatar.tsx +1 -11
- package/src/components/Avatars/AvatarContext.ts +16 -0
- package/src/components/Avatars/index.ts +2 -0
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +27 -25
- package/src/components/Breadcrumb/Breadcrumb.theme.ts +7 -5
- package/src/components/Breadcrumb/Breadcrumb.tsx +2 -2
- package/src/components/Button/Button.tsx +2 -11
- package/src/components/Button/ButtonGroupContext.ts +17 -0
- package/src/components/Button/IconButton.stories.tsx +2 -3
- package/src/components/Button/IconButton.theme.ts +15 -2
- package/src/components/Button/IconButton.tsx +6 -1
- package/src/components/Button/SystemIconButton.tsx +23 -16
- package/src/components/Button/index.ts +2 -0
- package/src/components/Calendar/Calendar.theme.ts +5 -5
- package/src/components/Calendar/Calendar.tsx +1 -3
- package/src/components/Calendar/index.ts +2 -0
- package/src/components/Calendar/parse-calendar-date.ts +9 -0
- package/src/components/Card/Card.theme.ts +48 -38
- package/src/components/Card/Card.tsx +77 -16
- package/src/components/Carousel/Carousel.tsx +4 -11
- package/src/components/Carousel/CarouselContext.ts +17 -0
- package/src/components/Carousel/index.ts +2 -0
- package/src/components/Clipboard/ClipboardContext.ts +20 -0
- package/src/components/Clipboard/ClipboardProvider.tsx +2 -12
- package/src/components/Clipboard/CopyButton.tsx +1 -1
- package/src/components/Clipboard/index.ts +1 -1
- package/src/components/Column/Column.stories.tsx +2 -2
- package/src/components/Column/Column.theme.ts +2 -11
- package/src/components/Column/Column.tsx +35 -57
- package/src/components/Column/ColumnContext.ts +22 -0
- package/src/components/Column/index.ts +2 -0
- package/src/components/Column/withColumn.ts +41 -4
- package/src/components/DatePicker/DatePicker.theme.ts +2 -2
- package/src/components/DatePicker/DatePicker.tsx +1 -14
- package/src/components/DatePicker/DatePickerContext.ts +21 -0
- package/src/components/DatePicker/index.ts +2 -0
- package/src/components/ErrorFallback/ErrorStack.tsx +8 -28
- package/src/components/ErrorFallback/index.ts +1 -0
- package/src/components/ErrorFallback/parse-stack.ts +33 -0
- package/src/components/Focus/Focus.stories.tsx +6 -6
- package/src/components/Focus/Focus.tsx +2 -30
- package/src/components/Focus/FocusContext.ts +22 -0
- package/src/components/Focus/index.ts +2 -0
- package/src/components/Image/Image.tsx +1 -1
- package/src/components/Input/Input.stories.tsx +63 -48
- package/src/components/Input/Input.theme.ts +33 -27
- package/src/components/Input/Input.tsx +46 -43
- package/src/components/Input/InputTriggerContext.ts +45 -0
- package/src/components/Input/SegmentedInput.tsx +2 -1
- package/src/components/Input/index.ts +2 -0
- package/src/components/Main/Main.stories.tsx +2 -1
- package/src/components/Main/Main.theme.ts +10 -1
- package/src/components/Main/Main.tsx +1 -115
- package/src/components/Main/MainContext.ts +126 -0
- package/src/components/Main/index.ts +2 -0
- package/src/components/MediaPlayer/MediaPlayer.tsx +16 -47
- package/src/components/MediaPlayer/index.ts +2 -0
- package/src/components/MediaPlayer/media-kind.ts +41 -0
- package/src/components/Menu/DropdownMenu.tsx +27 -44
- package/src/components/Menu/DropdownMenuContext.ts +35 -0
- package/src/components/Menu/Menu.theme.ts +3 -3
- package/src/components/Menu/index.ts +2 -0
- package/src/components/Message/Message.stories.tsx +32 -15
- package/src/components/Message/Message.theme.ts +8 -2
- package/src/components/Message/Message.tsx +47 -23
- package/src/components/Message/index.ts +2 -0
- package/src/components/Message/message-icons.ts +16 -0
- package/src/components/Panel/Panel.stories.tsx +15 -2
- package/src/components/Panel/Panel.theme.ts +15 -6
- package/src/components/Popover/Popover.theme.ts +1 -1
- package/src/components/Popover/Popover.tsx +22 -37
- package/src/components/Popover/PopoverContext.ts +32 -0
- package/src/components/Popover/index.ts +2 -0
- package/src/components/ScrollContainer/ScrollContainer.stories.tsx +1 -1
- package/src/components/ScrollContainer/ScrollContainer.tsx +1 -18
- package/src/components/ScrollContainer/ScrollContainerContext.ts +25 -0
- package/src/components/ScrollContainer/index.ts +2 -0
- package/src/components/Select/Select.theme.ts +2 -2
- package/src/components/Slider/Slider.stories.tsx +107 -0
- package/src/components/Slider/Slider.test.tsx +105 -0
- package/src/components/Slider/Slider.theme.ts +38 -0
- package/src/components/Slider/Slider.tsx +64 -0
- package/src/components/Slider/index.ts +5 -0
- package/src/components/Status/Status.theme.ts +1 -1
- package/src/components/Status/Status.tsx +0 -1
- package/src/components/Tag/Tag.stories.tsx +1 -1
- package/src/components/Toolbar/Toolbar.theme.ts +14 -5
- package/src/components/Toolbar/Toolbar.tsx +5 -1
- package/src/components/Tooltip/TextTooltip.tsx +2 -1
- package/src/components/Tooltip/Tooltip.tsx +12 -35
- package/src/components/Tooltip/TooltipContext.ts +41 -0
- package/src/components/Tooltip/index.ts +2 -0
- package/src/components/index.ts +1 -0
- package/src/hooks/useIconHref.ts +26 -5
- package/src/hooks/useThemeContext.test.tsx +33 -0
- package/src/hooks/useThemeContext.ts +28 -3
- package/src/playground/Density.stories.tsx +41 -0
- package/src/playground/Elevation.stories.tsx +348 -0
- package/src/primitives/DensityProvider/DensityContext.ts +15 -0
- package/src/primitives/DensityProvider/DensityProvider.tsx +12 -6
- package/src/primitives/DensityProvider/index.ts +1 -0
- package/src/primitives/Flex/Flex.stories.tsx +1 -1
- package/src/primitives/Grid/Grid.stories.tsx +1 -1
- package/src/primitives/ThemeProvider/IconRegistry.tsx +42 -0
- package/src/primitives/ThemeProvider/ThemeProvider.tsx +16 -15
- package/src/primitives/ThemeProvider/TranslationsContext.ts +24 -0
- package/src/primitives/ThemeProvider/TranslationsProvider.tsx +4 -16
- package/src/primitives/ThemeProvider/icon-registry.ts +272 -0
- package/src/primitives/ThemeProvider/index.ts +9 -1
- package/src/testing/decorators/withLayout.tsx +4 -4
- package/src/testing/decorators/withLayoutVariants.tsx +3 -3
- package/src/testing/decorators/withTheme.tsx +1 -2
- package/src/theme/defaultTheme.ts +2 -0
- package/src/theme/index.ts +1 -0
- package/src/util/slots.stories.tsx +80 -0
- package/src/util/slots.ts +14 -5
- package/dist/lib/browser/chunk-CMHHVHX3.mjs +0 -46
- package/dist/lib/browser/chunk-CMHHVHX3.mjs.map +0 -7
- package/dist/lib/browser/chunk-GTHV4WYK.mjs +0 -1499
- package/dist/lib/browser/chunk-GTHV4WYK.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -5632
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/testing/index.mjs +0 -133
- package/dist/lib/browser/testing/index.mjs.map +0 -7
- package/dist/lib/browser/translations.mjs +0 -9
- package/dist/lib/browser/translations.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs +0 -1501
- package/dist/lib/node-esm/chunk-3VSKWNCQ.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-P4KFQGJI.mjs +0 -48
- package/dist/lib/node-esm/chunk-P4KFQGJI.mjs.map +0 -7
- package/dist/lib/node-esm/index.mjs +0 -5633
- package/dist/lib/node-esm/index.mjs.map +0 -7
- package/dist/lib/node-esm/meta.json +0 -1
- package/dist/lib/node-esm/testing/index.mjs +0 -134
- package/dist/lib/node-esm/testing/index.mjs.map +0 -7
- package/dist/lib/node-esm/translations.mjs +0 -10
- package/dist/lib/node-esm/translations.mjs.map +0 -7
- package/src/components/Column/AUDIT.md +0 -148
- package/src/components/Focus/AUDIT.md +0 -43
|
@@ -18,14 +18,7 @@ import { type ThemedClassName } from '../../util';
|
|
|
18
18
|
import { IconButton } from '../Button';
|
|
19
19
|
import { Column } from '../Column';
|
|
20
20
|
import { Icon } from '../Icon';
|
|
21
|
-
|
|
22
|
-
const messageIcons: Record<MessageValence, string> = {
|
|
23
|
-
success: 'ph--check-circle--duotone',
|
|
24
|
-
info: 'ph--info--duotone',
|
|
25
|
-
warning: 'ph--warning--duotone',
|
|
26
|
-
error: 'ph--warning-circle--duotone',
|
|
27
|
-
neutral: 'ph--info--duotone',
|
|
28
|
-
};
|
|
21
|
+
import { messageIcons } from './message-icons';
|
|
29
22
|
|
|
30
23
|
type MessageRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
31
24
|
valence?: MessageValence;
|
|
@@ -33,9 +26,11 @@ type MessageRootProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.d
|
|
|
33
26
|
asChild?: boolean;
|
|
34
27
|
titleId?: string;
|
|
35
28
|
descriptionId?: string;
|
|
29
|
+
/** Overrides the default valence icon; consumed by {@link MessageTitle}. */
|
|
30
|
+
icon?: string;
|
|
36
31
|
};
|
|
37
32
|
|
|
38
|
-
type MessageContextValue = { titleId?: string; descriptionId: string; valence: MessageValence };
|
|
33
|
+
type MessageContextValue = { titleId?: string; descriptionId: string; valence: MessageValence; icon?: string };
|
|
39
34
|
|
|
40
35
|
const MESSAGE_NAME = 'Message';
|
|
41
36
|
|
|
@@ -90,6 +85,7 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
90
85
|
classNames,
|
|
91
86
|
titleId: propsTitleId,
|
|
92
87
|
descriptionId: propsDescriptionId,
|
|
88
|
+
icon,
|
|
93
89
|
children,
|
|
94
90
|
...props
|
|
95
91
|
},
|
|
@@ -101,7 +97,7 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
101
97
|
const elevation = useElevationContext(propsElevation);
|
|
102
98
|
|
|
103
99
|
return (
|
|
104
|
-
<MessageProvider {...{ titleId, descriptionId, valence }}>
|
|
100
|
+
<MessageProvider {...{ titleId, descriptionId, valence, icon }}>
|
|
105
101
|
<Column.Root
|
|
106
102
|
asChild={asChild}
|
|
107
103
|
role={valence === 'neutral' ? 'paragraph' : 'alert'}
|
|
@@ -121,6 +117,35 @@ const MessageRoot = forwardRef<HTMLDivElement, MessageRootProps>(
|
|
|
121
117
|
|
|
122
118
|
MessageRoot.displayName = MESSAGE_NAME;
|
|
123
119
|
|
|
120
|
+
//
|
|
121
|
+
// Content
|
|
122
|
+
//
|
|
123
|
+
|
|
124
|
+
type MessageContentProps = ThemedClassName<ComponentPropsWithRef<typeof Primitive.div>> & {
|
|
125
|
+
asChild?: boolean;
|
|
126
|
+
};
|
|
127
|
+
|
|
128
|
+
const MESSAGE_CONTENT_NAME = 'Message.Content';
|
|
129
|
+
|
|
130
|
+
/**
|
|
131
|
+
* Optional padded wrapper around a message's title and body — supplies the inset that hosts
|
|
132
|
+
* otherwise had to add with their own wrapper `div`. Spans the root's tracks via subgrid so
|
|
133
|
+
* `Message.Title` still places its icon in the gutter.
|
|
134
|
+
*/
|
|
135
|
+
const MessageContent = forwardRef<HTMLDivElement, MessageContentProps>(
|
|
136
|
+
({ asChild, classNames, children, ...props }, forwardedRef) => {
|
|
137
|
+
const { tx } = useThemeContext();
|
|
138
|
+
const Comp = asChild ? Slot : Primitive.div;
|
|
139
|
+
return (
|
|
140
|
+
<Comp {...props} className={tx('message.content', {}, classNames)} ref={forwardedRef}>
|
|
141
|
+
{children}
|
|
142
|
+
</Comp>
|
|
143
|
+
);
|
|
144
|
+
},
|
|
145
|
+
);
|
|
146
|
+
|
|
147
|
+
MessageContent.displayName = MESSAGE_CONTENT_NAME;
|
|
148
|
+
|
|
124
149
|
//
|
|
125
150
|
// Title
|
|
126
151
|
//
|
|
@@ -136,8 +161,8 @@ const MessageTitle = forwardRef<HTMLDivElement, MessageTitleProps>(
|
|
|
136
161
|
({ classNames, children, icon: iconProp, onClose }, forwardedRef) => {
|
|
137
162
|
const { t } = useTranslation(translationKey);
|
|
138
163
|
const { tx } = useThemeContext();
|
|
139
|
-
const { titleId, valence } = useMessageContext(MESSAGE_TITLE_NAME);
|
|
140
|
-
const icon = iconProp ?? messageIcons[valence];
|
|
164
|
+
const { titleId, valence, icon: contextIcon } = useMessageContext(MESSAGE_TITLE_NAME);
|
|
165
|
+
const icon = iconProp ?? contextIcon ?? messageIcons[valence];
|
|
141
166
|
return (
|
|
142
167
|
<Column.Row classNames={tx('message.header', {}, classNames)} ref={forwardedRef}>
|
|
143
168
|
{icon && (
|
|
@@ -168,29 +193,29 @@ const MessageTitle = forwardRef<HTMLDivElement, MessageTitleProps>(
|
|
|
168
193
|
MessageTitle.displayName = MESSAGE_TITLE_NAME;
|
|
169
194
|
|
|
170
195
|
//
|
|
171
|
-
//
|
|
196
|
+
// Body
|
|
172
197
|
//
|
|
173
198
|
|
|
174
|
-
type
|
|
199
|
+
type MessageBodyProps = Omit<ThemedClassName<ComponentPropsWithRef<typeof Primitive.h2>>, 'id'> & {
|
|
175
200
|
asChild?: boolean;
|
|
176
201
|
};
|
|
177
202
|
|
|
178
|
-
const
|
|
203
|
+
const MESSAGE_BODY_NAME = 'Message.Body';
|
|
179
204
|
|
|
180
|
-
const
|
|
205
|
+
const MessageBody = forwardRef<HTMLParagraphElement, MessageBodyProps>(
|
|
181
206
|
({ asChild, classNames, children, ...props }, forwardedRef) => {
|
|
182
207
|
const { tx } = useThemeContext();
|
|
183
|
-
const { descriptionId } = useMessageContext(
|
|
208
|
+
const { descriptionId } = useMessageContext(MESSAGE_BODY_NAME);
|
|
184
209
|
const Comp = asChild ? Slot : Primitive.p;
|
|
185
210
|
return (
|
|
186
|
-
<Comp {...props} className={tx('message.
|
|
211
|
+
<Comp {...props} className={tx('message.body', {}, classNames)} id={descriptionId} ref={forwardedRef}>
|
|
187
212
|
{children}
|
|
188
213
|
</Comp>
|
|
189
214
|
);
|
|
190
215
|
},
|
|
191
216
|
);
|
|
192
217
|
|
|
193
|
-
|
|
218
|
+
MessageBody.displayName = MESSAGE_BODY_NAME;
|
|
194
219
|
|
|
195
220
|
//
|
|
196
221
|
// Message
|
|
@@ -198,12 +223,11 @@ MessageContent.displayName = MESSAGE_CONTENT_NAME;
|
|
|
198
223
|
|
|
199
224
|
export const Message = {
|
|
200
225
|
Root: MessageRoot,
|
|
201
|
-
Title: MessageTitle,
|
|
202
226
|
Content: MessageContent,
|
|
227
|
+
Title: MessageTitle,
|
|
228
|
+
Body: MessageBody,
|
|
203
229
|
};
|
|
204
230
|
|
|
205
231
|
export const Callout = Message;
|
|
206
232
|
|
|
207
|
-
export type { MessageContentProps, MessageRootProps, MessageTitleProps };
|
|
208
|
-
|
|
209
|
-
export { messageIcons };
|
|
233
|
+
export type { MessageBodyProps, MessageContentProps, MessageRootProps, MessageTitleProps };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type MessageValence } from '@dxos/ui-types';
|
|
6
|
+
|
|
7
|
+
// Kept out of `Message.tsx`: react-refresh only fast-refreshes a module whose exports are all
|
|
8
|
+
// components, so a context and its hook exported beside them force a full page reload on every edit.
|
|
9
|
+
|
|
10
|
+
export const messageIcons: Record<MessageValence, string> = {
|
|
11
|
+
success: 'ph--check-circle--duotone',
|
|
12
|
+
info: 'ph--info--duotone',
|
|
13
|
+
warning: 'ph--warning--duotone',
|
|
14
|
+
error: 'ph--warning-circle--duotone',
|
|
15
|
+
neutral: 'ph--info--duotone',
|
|
16
|
+
};
|
|
@@ -24,11 +24,24 @@ const List = composable<HTMLDivElement, ScrollAreaRootProps>((props, forwardedRe
|
|
|
24
24
|
);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
+
/**
|
|
28
|
+
* Panel is the standard full-height surface layout: a CSS grid whose `auto 1fr auto`
|
|
29
|
+
* rows pin a toolbar and statusbar while the content region absorbs the remaining
|
|
30
|
+
* height, so a scroll container inside it scrolls rather than growing the page. Each
|
|
31
|
+
* region takes `asChild` to merge its grid slot onto a `Toolbar.Root` / `ScrollArea`
|
|
32
|
+
* instead of nesting an extra wrapper element.
|
|
33
|
+
*
|
|
34
|
+
* @idiom org.dxos.react-ui.panelLayout
|
|
35
|
+
* applies: Any full-height pane with a fixed toolbar/statusbar and a scrolling body
|
|
36
|
+
* instead-of: Hand-wiring flex columns with min-height:0 and a bespoke scroll container
|
|
37
|
+
* uses: {@link Panel.Root}, {@link Panel.Toolbar}, {@link Panel.Content}, {@link Panel.Statusbar}
|
|
38
|
+
* related: org.dxos.react-ui-menu.toolbarMenu
|
|
39
|
+
*/
|
|
27
40
|
const DefaultStory = () => {
|
|
28
41
|
return (
|
|
29
|
-
<Panel.Root
|
|
42
|
+
<Panel.Root classNames='dx-document'>
|
|
30
43
|
<Panel.Toolbar asChild>
|
|
31
|
-
<Toolbar.Root
|
|
44
|
+
<Toolbar.Root>
|
|
32
45
|
<Toolbar.IconButton icon='ph--plus--regular' variant='primary' label='Add' />
|
|
33
46
|
<Input.Root>
|
|
34
47
|
<Input.TextInput placeholder='Search' />
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
import { mx } from '@dxos/ui-theme';
|
|
6
6
|
import { type ComponentFunction } from '@dxos/ui-types';
|
|
7
7
|
|
|
8
|
-
type Size = 'lg' | 'md'
|
|
8
|
+
type Size = 'lg' | 'md';
|
|
9
9
|
|
|
10
10
|
export type PanelStyleProps = {
|
|
11
11
|
size?: Size;
|
|
@@ -14,7 +14,6 @@ export type PanelStyleProps = {
|
|
|
14
14
|
const sizes: Record<Size, string> = {
|
|
15
15
|
lg: 'h-(--dx-topbar-size)',
|
|
16
16
|
md: 'h-(--dx-toolbar-size)',
|
|
17
|
-
sm: 'h-(--dx-statusbar-size)',
|
|
18
17
|
};
|
|
19
18
|
|
|
20
19
|
const root: ComponentFunction<PanelStyleProps> = (_, ...etc) =>
|
|
@@ -25,14 +24,24 @@ const root: ComponentFunction<PanelStyleProps> = (_, ...etc) =>
|
|
|
25
24
|
...etc,
|
|
26
25
|
);
|
|
27
26
|
|
|
28
|
-
//
|
|
27
|
+
// `bar` is an aspect, not a level: the toolbar steps off whichever surface hosts the panel, so a
|
|
28
|
+
// panel in a card and a panel on the canvas each get a bar that reads against their own host.
|
|
29
29
|
const toolbar: ComponentFunction<PanelStyleProps> = ({ size = 'md' }, ...etc) =>
|
|
30
|
-
mx(
|
|
30
|
+
mx(
|
|
31
|
+
'[grid-area:toolbar]',
|
|
32
|
+
'shrink-0',
|
|
33
|
+
// The shadow falls onto the content row, which paints after this one in DOM order and would
|
|
34
|
+
// cover it wherever the content has its own background — the editor did, the mailbox list did
|
|
35
|
+
// not, which is why the bar looked flat in one and raised in the other.
|
|
36
|
+
'dx-toolbar-surface shadow-sm relative z-[1]',
|
|
37
|
+
sizes[size],
|
|
38
|
+
...etc,
|
|
39
|
+
);
|
|
31
40
|
|
|
32
41
|
const content: ComponentFunction<PanelStyleProps> = (_, ...etc) => mx('[grid-area:content] min-h-0', ...etc);
|
|
33
42
|
|
|
34
|
-
const statusbar: ComponentFunction<PanelStyleProps> = (
|
|
35
|
-
mx('[grid-area:statusbar]', 'shrink-0',
|
|
43
|
+
const statusbar: ComponentFunction<PanelStyleProps> = (_, ...etc) =>
|
|
44
|
+
mx('[grid-area:statusbar]', 'shrink-0', 'dx-toolbar-surface', ...etc);
|
|
36
45
|
|
|
37
46
|
export const panelTheme = {
|
|
38
47
|
root,
|
|
@@ -13,7 +13,7 @@ export type PopoverStyleProps = Partial<{
|
|
|
13
13
|
|
|
14
14
|
const content: ComponentFunction<PopoverStyleProps> = ({ elevation }, ...etc) =>
|
|
15
15
|
mx(
|
|
16
|
-
'dx-popover-surface overflow-hidden border border-separator rounded-sm',
|
|
16
|
+
'dx-popover-surface overflow-hidden border-2 border-separator rounded-sm',
|
|
17
17
|
surfaceShadow({ elevation: 'positioned' }),
|
|
18
18
|
surfaceZIndex({ elevation, level: 'menu' }),
|
|
19
19
|
'dx-focus-ring',
|
|
@@ -6,14 +6,11 @@
|
|
|
6
6
|
|
|
7
7
|
import { composeEventHandlers } from '@radix-ui/primitive';
|
|
8
8
|
import { useComposedRefs } from '@radix-ui/react-compose-refs';
|
|
9
|
-
import { createContextScope } from '@radix-ui/react-context';
|
|
10
|
-
import { type Scope } from '@radix-ui/react-context';
|
|
11
9
|
import { DismissableLayer } from '@radix-ui/react-dismissable-layer';
|
|
12
10
|
import { useFocusGuards } from '@radix-ui/react-focus-guards';
|
|
13
11
|
import { FocusScope } from '@radix-ui/react-focus-scope';
|
|
14
12
|
import { useId } from '@radix-ui/react-id';
|
|
15
13
|
import * as PopperPrimitive from '@radix-ui/react-popper';
|
|
16
|
-
import { createPopperScope } from '@radix-ui/react-popper';
|
|
17
14
|
import { Portal as PortalPrimitive } from '@radix-ui/react-portal';
|
|
18
15
|
import { Presence } from '@radix-ui/react-presence';
|
|
19
16
|
import { Primitive } from '@radix-ui/react-primitive';
|
|
@@ -38,33 +35,19 @@ import { RemoveScroll } from 'react-remove-scroll';
|
|
|
38
35
|
|
|
39
36
|
import { useElevationContext, useSafeCollisionPadding, useThemeContext } from '../../hooks';
|
|
40
37
|
import { type ThemedClassName } from '../../util';
|
|
38
|
+
import {
|
|
39
|
+
POPOVER_NAME,
|
|
40
|
+
PopoverProvider,
|
|
41
|
+
type PopoverScopedProps,
|
|
42
|
+
createPopoverContext,
|
|
43
|
+
usePopoverContext,
|
|
44
|
+
usePopperScope,
|
|
45
|
+
} from './PopoverContext';
|
|
41
46
|
|
|
42
47
|
//
|
|
43
48
|
// Context
|
|
44
49
|
//
|
|
45
50
|
|
|
46
|
-
type ScopedProps<P> = P & { __scopePopover?: Scope };
|
|
47
|
-
|
|
48
|
-
const POPOVER_NAME = 'Popover';
|
|
49
|
-
|
|
50
|
-
const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [createPopperScope]);
|
|
51
|
-
|
|
52
|
-
const usePopperScope = createPopperScope();
|
|
53
|
-
|
|
54
|
-
type PopoverContextValue = {
|
|
55
|
-
triggerRef: RefObject<HTMLButtonElement>;
|
|
56
|
-
contentId: string;
|
|
57
|
-
hasCustomAnchor: boolean;
|
|
58
|
-
modal: boolean;
|
|
59
|
-
open: boolean;
|
|
60
|
-
onOpenChange(open: boolean): void;
|
|
61
|
-
onOpenToggle(): void;
|
|
62
|
-
onCustomAnchorAdd(): void;
|
|
63
|
-
onCustomAnchorRemove(): void;
|
|
64
|
-
};
|
|
65
|
-
|
|
66
|
-
const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
|
|
67
|
-
|
|
68
51
|
//
|
|
69
52
|
// PopoverRoot
|
|
70
53
|
//
|
|
@@ -77,7 +60,7 @@ type PopoverRootProps = {
|
|
|
77
60
|
modal?: boolean;
|
|
78
61
|
};
|
|
79
62
|
|
|
80
|
-
const PopoverRoot: FC<PopoverRootProps> = (props:
|
|
63
|
+
const PopoverRoot: FC<PopoverRootProps> = (props: PopoverScopedProps<PopoverRootProps>) => {
|
|
81
64
|
const { __scopePopover, children, open: openProp, defaultOpen, onOpenChange, modal = false } = props;
|
|
82
65
|
const popperScope = usePopperScope(__scopePopover);
|
|
83
66
|
const triggerRef = useRef<HTMLButtonElement>(null);
|
|
@@ -121,7 +104,7 @@ type PopperAnchorProps = ComponentPropsWithoutRef<typeof PopperPrimitive.Anchor>
|
|
|
121
104
|
type PopoverAnchorProps = PopperAnchorProps;
|
|
122
105
|
|
|
123
106
|
const PopoverAnchor = forwardRef<PopoverAnchorElement, PopoverAnchorProps>(
|
|
124
|
-
(props:
|
|
107
|
+
(props: PopoverScopedProps<PopoverAnchorProps>, forwardedRef) => {
|
|
125
108
|
const { __scopePopover, ...anchorProps } = props;
|
|
126
109
|
const context = usePopoverContext(ANCHOR_NAME, __scopePopover);
|
|
127
110
|
const popperScope = usePopperScope(__scopePopover);
|
|
@@ -151,7 +134,7 @@ type PopoverTriggerProps = PrimitiveButtonProps & {
|
|
|
151
134
|
};
|
|
152
135
|
|
|
153
136
|
const PopoverTrigger = forwardRef<PopoverTriggerElement, PopoverTriggerProps>(
|
|
154
|
-
(props:
|
|
137
|
+
(props: PopoverScopedProps<PopoverTriggerProps>, forwardedRef) => {
|
|
155
138
|
const { __scopePopover, asChild, ...triggerProps } = props;
|
|
156
139
|
const context = usePopoverContext(TRIGGER_NAME, __scopePopover);
|
|
157
140
|
const popperScope = usePopperScope(__scopePopover);
|
|
@@ -193,7 +176,7 @@ type PopoverVirtualTriggerProps = {
|
|
|
193
176
|
virtualRef: RefObject<PopoverTriggerElement | null>;
|
|
194
177
|
};
|
|
195
178
|
|
|
196
|
-
const PopoverVirtualTrigger = (props:
|
|
179
|
+
const PopoverVirtualTrigger = (props: PopoverScopedProps<PopoverVirtualTriggerProps>) => {
|
|
197
180
|
const { __scopePopover, virtualRef } = props;
|
|
198
181
|
const context = usePopoverContext(VIRTUAL_TRIGGER_NAME, __scopePopover);
|
|
199
182
|
const popperScope = usePopperScope(__scopePopover);
|
|
@@ -232,7 +215,7 @@ type PopoverPortalProps = {
|
|
|
232
215
|
forceMount?: true;
|
|
233
216
|
};
|
|
234
217
|
|
|
235
|
-
const PopoverPortal = (props:
|
|
218
|
+
const PopoverPortal = (props: PopoverScopedProps<PopoverPortalProps>) => {
|
|
236
219
|
const { __scopePopover, forceMount, children, container } = props;
|
|
237
220
|
const context = usePopoverContext(PORTAL_NAME, __scopePopover);
|
|
238
221
|
return (
|
|
@@ -263,7 +246,7 @@ type PopoverContentProps = ThemedClassName<PopoverContentTypeProps> & {
|
|
|
263
246
|
};
|
|
264
247
|
|
|
265
248
|
const PopoverContent = forwardRef<PopoverContentTypeElement, PopoverContentProps>(
|
|
266
|
-
(props:
|
|
249
|
+
(props: PopoverScopedProps<PopoverContentProps>, forwardedRef) => {
|
|
267
250
|
const portalContext = usePortalContext(CONTENT_NAME, props.__scopePopover);
|
|
268
251
|
const { forceMount = portalContext.forceMount, ...contentProps } = props;
|
|
269
252
|
const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
|
|
@@ -289,7 +272,7 @@ export interface PopoverContentTypeProps extends Omit<
|
|
|
289
272
|
> {}
|
|
290
273
|
|
|
291
274
|
const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
|
|
292
|
-
(props:
|
|
275
|
+
(props: PopoverScopedProps<PopoverContentTypeProps>, forwardedRef) => {
|
|
293
276
|
const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
|
|
294
277
|
const contentRef = useRef<HTMLDivElement>(null);
|
|
295
278
|
const composedRefs = useComposedRefs(forwardedRef, contentRef);
|
|
@@ -340,7 +323,7 @@ const PopoverContentModal = forwardRef<PopoverContentTypeElement, PopoverContent
|
|
|
340
323
|
);
|
|
341
324
|
|
|
342
325
|
const PopoverContentNonModal = forwardRef<PopoverContentTypeElement, PopoverContentTypeProps>(
|
|
343
|
-
(props:
|
|
326
|
+
(props: PopoverScopedProps<PopoverContentTypeProps>, forwardedRef) => {
|
|
344
327
|
const context = usePopoverContext(CONTENT_NAME, props.__scopePopover);
|
|
345
328
|
const hasInteractedOutsideRef = useRef(false);
|
|
346
329
|
const hasPointerDownOutsideRef = useRef(false);
|
|
@@ -424,7 +407,7 @@ type PopoverContentImplProps = Omit<PopperContentProps, 'onPlaced'> &
|
|
|
424
407
|
};
|
|
425
408
|
|
|
426
409
|
const PopoverContentImpl = forwardRef<PopoverContentImplElement, PopoverContentImplProps>(
|
|
427
|
-
(props:
|
|
410
|
+
(props: PopoverScopedProps<PopoverContentImplProps>, forwardedRef) => {
|
|
428
411
|
const {
|
|
429
412
|
__scopePopover,
|
|
430
413
|
trapFocus,
|
|
@@ -518,7 +501,7 @@ type PopoverCloseElement = ComponentRef<typeof Primitive.button>;
|
|
|
518
501
|
type PopoverCloseProps = PrimitiveButtonProps;
|
|
519
502
|
|
|
520
503
|
const PopoverClose = forwardRef<PopoverCloseElement, PopoverCloseProps>(
|
|
521
|
-
(props:
|
|
504
|
+
(props: PopoverScopedProps<PopoverCloseProps>, forwardedRef) => {
|
|
522
505
|
const { __scopePopover, ...closeProps } = props;
|
|
523
506
|
const context = usePopoverContext(CLOSE_NAME, __scopePopover);
|
|
524
507
|
return (
|
|
@@ -545,7 +528,7 @@ type PopperArrowProps = ThemedClassName<ComponentPropsWithoutRef<typeof PopperPr
|
|
|
545
528
|
type PopoverArrowProps = PopperArrowProps;
|
|
546
529
|
|
|
547
530
|
const PopoverArrow = forwardRef<PopoverArrowElement, PopoverArrowProps>(
|
|
548
|
-
(props:
|
|
531
|
+
(props: PopoverScopedProps<PopoverArrowProps>, forwardedRef) => {
|
|
549
532
|
const { __scopePopover, classNames, ...arrowProps } = props;
|
|
550
533
|
const popperScope = usePopperScope(__scopePopover);
|
|
551
534
|
const { tx } = useThemeContext();
|
|
@@ -608,7 +591,9 @@ export const Popover = {
|
|
|
608
591
|
Viewport: PopoverViewport,
|
|
609
592
|
};
|
|
610
593
|
|
|
611
|
-
export
|
|
594
|
+
// Type-only re-export (erased, so it does not affect the refresh boundary): keeps the inferred
|
|
595
|
+
// types of downstream composites nameable across package boundaries.
|
|
596
|
+
export type { PopoverScopedProps } from './PopoverContext';
|
|
612
597
|
|
|
613
598
|
export type {
|
|
614
599
|
PopoverAnchorProps,
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Scope, createContextScope } from '@radix-ui/react-context';
|
|
6
|
+
import { createPopperScope } from '@radix-ui/react-popper';
|
|
7
|
+
import { type RefObject } from 'react';
|
|
8
|
+
|
|
9
|
+
// Kept out of `Popover.tsx`: react-refresh only fast-refreshes a module whose exports are all
|
|
10
|
+
// components, so a context and its hook exported beside them force a full page reload on every edit.
|
|
11
|
+
|
|
12
|
+
export type PopoverScopedProps<P> = P & { __scopePopover?: Scope };
|
|
13
|
+
|
|
14
|
+
export const POPOVER_NAME = 'Popover';
|
|
15
|
+
|
|
16
|
+
export const [createPopoverContext, createPopoverScope] = createContextScope(POPOVER_NAME, [createPopperScope]);
|
|
17
|
+
|
|
18
|
+
export const usePopperScope = createPopperScope();
|
|
19
|
+
|
|
20
|
+
export type PopoverContextValue = {
|
|
21
|
+
triggerRef: RefObject<HTMLButtonElement>;
|
|
22
|
+
contentId: string;
|
|
23
|
+
hasCustomAnchor: boolean;
|
|
24
|
+
modal: boolean;
|
|
25
|
+
open: boolean;
|
|
26
|
+
onOpenChange(open: boolean): void;
|
|
27
|
+
onOpenToggle(): void;
|
|
28
|
+
onCustomAnchorAdd(): void;
|
|
29
|
+
onCustomAnchorRemove(): void;
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const [PopoverProvider, usePopoverContext] = createPopoverContext<PopoverContextValue>(POPOVER_NAME);
|
|
@@ -35,7 +35,7 @@ const DefaultStory = ({ initialLines = 0, running: runningProp, ...props }: Stor
|
|
|
35
35
|
}, [running]);
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
|
-
<Panel.Root
|
|
38
|
+
<Panel.Root classNames='dx-document'>
|
|
39
39
|
<Panel.Toolbar asChild>
|
|
40
40
|
<Toolbar.Root>
|
|
41
41
|
<Button onClick={() => setRunning((running) => !running)}>{running ? 'Stop' : 'Start'}</Button>
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { createContext } from '@radix-ui/react-context';
|
|
6
5
|
import React, {
|
|
7
6
|
type PropsWithChildren,
|
|
8
7
|
type RefObject,
|
|
@@ -25,6 +24,7 @@ import { composable, composableProps, slottable } from '../../util';
|
|
|
25
24
|
import { type ThemedClassName } from '../../util';
|
|
26
25
|
import { IconButton } from '../Button';
|
|
27
26
|
import { ScrollArea, type ScrollAreaRootProps } from '../ScrollArea';
|
|
27
|
+
import { ScrollContainerProvider, useScrollContainerContext } from './ScrollContainerContext';
|
|
28
28
|
|
|
29
29
|
const isBottom = (el: HTMLElement | null) => {
|
|
30
30
|
return !!(el && el.scrollHeight - el.scrollTop === el.clientHeight);
|
|
@@ -36,21 +36,6 @@ export interface ScrollController {
|
|
|
36
36
|
scrollToBottom: (behavior?: ScrollBehavior) => void;
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
type ScrollContainerContextValue = {
|
|
40
|
-
controller?: ScrollController;
|
|
41
|
-
pinned?: boolean;
|
|
42
|
-
overflow?: boolean;
|
|
43
|
-
/** Called by Viewport to register/unregister the scroll element. */
|
|
44
|
-
setViewport: (el: HTMLDivElement | null) => void;
|
|
45
|
-
/** Called by Viewport on wheel events to update pinned state. */
|
|
46
|
-
setPinned: (value: boolean) => void;
|
|
47
|
-
/** Called by Viewport on scroll events to update overflow state. */
|
|
48
|
-
setOverflow: (value: boolean) => void;
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
const [ScrollContainerProvider, useScrollContainerContext] =
|
|
52
|
-
createContext<ScrollContainerContextValue>('ScrollContainer');
|
|
53
|
-
|
|
54
39
|
//
|
|
55
40
|
// Root
|
|
56
41
|
//
|
|
@@ -328,8 +313,6 @@ ScrollContainerScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;
|
|
|
328
313
|
// ScrollContainer
|
|
329
314
|
//
|
|
330
315
|
|
|
331
|
-
export { useScrollContainerContext };
|
|
332
|
-
|
|
333
316
|
export const ScrollContainer = {
|
|
334
317
|
Root: ScrollContainerRoot,
|
|
335
318
|
Content: ScrollContainerContent,
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { createContext } from '@radix-ui/react-context';
|
|
6
|
+
|
|
7
|
+
import { type ScrollController } from './ScrollContainer';
|
|
8
|
+
|
|
9
|
+
// Kept out of `ScrollContainer.tsx`: react-refresh only fast-refreshes a module whose exports are all
|
|
10
|
+
// components, so a context and its hook exported beside them force a full page reload on every edit.
|
|
11
|
+
|
|
12
|
+
export type ScrollContainerContextValue = {
|
|
13
|
+
controller?: ScrollController;
|
|
14
|
+
pinned?: boolean;
|
|
15
|
+
overflow?: boolean;
|
|
16
|
+
/** Called by Viewport to register/unregister the scroll element. */
|
|
17
|
+
setViewport: (el: HTMLDivElement | null) => void;
|
|
18
|
+
/** Called by Viewport on wheel events to update pinned state. */
|
|
19
|
+
setPinned: (value: boolean) => void;
|
|
20
|
+
/** Called by Viewport on scroll events to update overflow state. */
|
|
21
|
+
setOverflow: (value: boolean) => void;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const [ScrollContainerProvider, useScrollContainerContext] =
|
|
25
|
+
createContext<ScrollContainerContextValue>('ScrollContainer');
|
|
@@ -26,7 +26,7 @@ const viewport: ComponentFunction<SelectStyleProps> = (_props, ...etc) => mx(...
|
|
|
26
26
|
|
|
27
27
|
const item: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
|
|
28
28
|
mx(
|
|
29
|
-
'flex items-center min-h-
|
|
29
|
+
'flex items-center min-h-(--dx-control) px-(--dx-control-pad) py-1 gap-2',
|
|
30
30
|
'text-base-fg leading-none select-none outline-hidden',
|
|
31
31
|
'[&>svg]:invisible [&[data-state=checked]>svg]:visible',
|
|
32
32
|
'dx-highlighted',
|
|
@@ -41,7 +41,7 @@ const separator: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
|
|
|
41
41
|
mx('self-stretch border-b my-1 border-separator', ...etc);
|
|
42
42
|
|
|
43
43
|
const scrollButton: ComponentFunction<SelectStyleProps> = (_props, ...etc) =>
|
|
44
|
-
mx('dx-modal-surface flex items-center justify-center cursor-default h-
|
|
44
|
+
mx('dx-modal-surface flex items-center justify-center cursor-default h-(--dx-control-sm) w-full', ...etc);
|
|
45
45
|
|
|
46
46
|
export const selectTheme: Theme<SelectStyleProps> = {
|
|
47
47
|
content,
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React, { useState } from 'react';
|
|
7
|
+
|
|
8
|
+
import { withTheme } from '../../testing';
|
|
9
|
+
import { Slider } from './Slider';
|
|
10
|
+
|
|
11
|
+
const meta = {
|
|
12
|
+
title: 'ui/react-ui-core/components/Slider',
|
|
13
|
+
component: Slider,
|
|
14
|
+
decorators: [withTheme()],
|
|
15
|
+
parameters: {
|
|
16
|
+
layout: 'centered',
|
|
17
|
+
},
|
|
18
|
+
} satisfies Meta<typeof Slider>;
|
|
19
|
+
|
|
20
|
+
export default meta;
|
|
21
|
+
|
|
22
|
+
type Story = StoryObj<typeof meta>;
|
|
23
|
+
|
|
24
|
+
export const Default: Story = {
|
|
25
|
+
render: () => (
|
|
26
|
+
<div className='w-64'>
|
|
27
|
+
<Slider defaultValue={[50]} max={100} step={1} thumbLabels={['Value']} />
|
|
28
|
+
</div>
|
|
29
|
+
),
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
export const Controlled: Story = {
|
|
33
|
+
render: () => {
|
|
34
|
+
const ControlledSlider = () => {
|
|
35
|
+
const [value, setValue] = useState([25]);
|
|
36
|
+
return (
|
|
37
|
+
<div className='flex flex-col gap-2 w-64'>
|
|
38
|
+
<Slider value={value} onValueChange={setValue} max={100} step={1} aria-label='Controlled value' />
|
|
39
|
+
<div className='text-sm text-description'>{value[0]}</div>
|
|
40
|
+
</div>
|
|
41
|
+
);
|
|
42
|
+
};
|
|
43
|
+
return <ControlledSlider />;
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
|
|
47
|
+
export const MinMaxStep: Story = {
|
|
48
|
+
render: () => (
|
|
49
|
+
<div className='w-64'>
|
|
50
|
+
<Slider defaultValue={[0.4]} min={0.2} max={0.7} step={0.01} aria-label='Min/max/step value' />
|
|
51
|
+
</div>
|
|
52
|
+
),
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export const Disabled: Story = {
|
|
56
|
+
render: () => (
|
|
57
|
+
<div className='w-64'>
|
|
58
|
+
<Slider defaultValue={[50]} max={100} step={1} disabled aria-label='Disabled value' />
|
|
59
|
+
</div>
|
|
60
|
+
),
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
export const Vertical: Story = {
|
|
64
|
+
render: () => (
|
|
65
|
+
<div className='h-64'>
|
|
66
|
+
<Slider defaultValue={[50]} max={100} step={1} orientation='vertical' aria-label='Vertical value' />
|
|
67
|
+
</div>
|
|
68
|
+
),
|
|
69
|
+
};
|
|
70
|
+
|
|
71
|
+
export const Range: Story = {
|
|
72
|
+
render: () => (
|
|
73
|
+
<div className='w-64'>
|
|
74
|
+
<Slider defaultValue={[25, 75]} max={100} step={1} thumbLabels={['Minimum', 'Maximum']} />
|
|
75
|
+
</div>
|
|
76
|
+
),
|
|
77
|
+
};
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* Regression guard for the thumb-visibility bug (an invalid `is-*`/`bs-*` size utility collapsed
|
|
81
|
+
* the thumb to zero size). Exercises default/disabled/vertical/two-thumb side by side so a visual
|
|
82
|
+
* pass catches a missing knob in any state at a glance.
|
|
83
|
+
*/
|
|
84
|
+
export const ThumbVisibility: Story = {
|
|
85
|
+
render: () => (
|
|
86
|
+
<div className='flex items-start gap-8'>
|
|
87
|
+
<div className='flex flex-col gap-2 w-48'>
|
|
88
|
+
<span className='text-sm text-description'>Default</span>
|
|
89
|
+
<Slider defaultValue={[50]} max={100} step={1} aria-label='Default value' />
|
|
90
|
+
</div>
|
|
91
|
+
<div className='flex flex-col gap-2 w-48'>
|
|
92
|
+
<span className='text-sm text-description'>Disabled</span>
|
|
93
|
+
<Slider defaultValue={[50]} max={100} step={1} disabled aria-label='Disabled value' />
|
|
94
|
+
</div>
|
|
95
|
+
<div className='flex flex-col gap-2 w-48'>
|
|
96
|
+
<span className='text-sm text-description'>Two-thumb</span>
|
|
97
|
+
<Slider defaultValue={[25, 75]} max={100} step={1} thumbLabels={['Minimum', 'Maximum']} />
|
|
98
|
+
</div>
|
|
99
|
+
<div className='flex flex-col gap-2 items-center'>
|
|
100
|
+
<span className='text-sm text-description'>Vertical</span>
|
|
101
|
+
<div className='h-48'>
|
|
102
|
+
<Slider defaultValue={[50]} max={100} step={1} orientation='vertical' aria-label='Vertical value' />
|
|
103
|
+
</div>
|
|
104
|
+
</div>
|
|
105
|
+
</div>
|
|
106
|
+
),
|
|
107
|
+
};
|