@dxos/react-ui 0.10.0 → 0.11.0
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
|
@@ -0,0 +1,348 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { type Meta, type StoryObj } from '@storybook/react-vite';
|
|
6
|
+
import React, { useMemo, useState } from 'react';
|
|
7
|
+
|
|
8
|
+
import { random } from '@dxos/random';
|
|
9
|
+
import { mx } from '@dxos/ui-theme';
|
|
10
|
+
|
|
11
|
+
import {
|
|
12
|
+
Avatar,
|
|
13
|
+
Button,
|
|
14
|
+
Card,
|
|
15
|
+
Dialog,
|
|
16
|
+
DropdownMenu,
|
|
17
|
+
Icon,
|
|
18
|
+
IconButton,
|
|
19
|
+
Input,
|
|
20
|
+
Main,
|
|
21
|
+
Message,
|
|
22
|
+
Panel,
|
|
23
|
+
ScrollArea,
|
|
24
|
+
Select,
|
|
25
|
+
Tag,
|
|
26
|
+
Toolbar,
|
|
27
|
+
useSidebars,
|
|
28
|
+
} from '../components';
|
|
29
|
+
import { withLayout, withTheme } from '../testing';
|
|
30
|
+
|
|
31
|
+
random.seed(1);
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Kitchen-sink app frame built only from `@dxos/react-ui` primitives at their default props, so
|
|
35
|
+
* every surface shown is the one the app actually paints — the review harness for the elevation
|
|
36
|
+
* ladder (`theme/surfaces.css`) and the aspects derived from it.
|
|
37
|
+
*
|
|
38
|
+
* Reading the frame outward: the sidebars and topbar are `chrome` (below the canvas), the content
|
|
39
|
+
* region is `base`, cards are `raised` (above the canvas), the dialog is `overlay`, and the popover
|
|
40
|
+
* is `popup`. Toolbars and inputs take no level of their own — they step off whichever surface
|
|
41
|
+
* hosts them, which is why the toolbar in the sidebar and the toolbar on the canvas differ.
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
const NavigationToggle = ({ close }: { close?: boolean }) => {
|
|
45
|
+
const { toggleNavigationSidebar } = useSidebars('StoryElevation__NavigationToggle');
|
|
46
|
+
return (
|
|
47
|
+
<IconButton
|
|
48
|
+
icon={close ? 'ph--caret-left--regular' : 'ph--sidebar-simple--regular'}
|
|
49
|
+
iconOnly
|
|
50
|
+
label='Toggle navigation sidebar'
|
|
51
|
+
onClick={toggleNavigationSidebar}
|
|
52
|
+
/>
|
|
53
|
+
);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
const ComplementaryToggle = ({ close }: { close?: boolean }) => {
|
|
57
|
+
const { toggleComplementarySidebar } = useSidebars('StoryElevation__ComplementaryToggle');
|
|
58
|
+
return (
|
|
59
|
+
<IconButton
|
|
60
|
+
icon={close ? 'ph--caret-right--regular' : 'ph--sidebar-simple--regular'}
|
|
61
|
+
iconOnly
|
|
62
|
+
label='Toggle complementary sidebar'
|
|
63
|
+
onClick={toggleComplementarySidebar}
|
|
64
|
+
/>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
const NavigationCard = () => (
|
|
69
|
+
<Card.Root fullWidth>
|
|
70
|
+
<Card.Header>
|
|
71
|
+
<Card.Block>
|
|
72
|
+
<Icon icon='ph--folder--regular' />
|
|
73
|
+
</Card.Block>
|
|
74
|
+
<Card.Title>Workspace</Card.Title>
|
|
75
|
+
<Card.Menu items={[{ label: 'Rename', icon: 'ph--pencil--regular', onClick: () => {} }]} />
|
|
76
|
+
</Card.Header>
|
|
77
|
+
<Card.Body>
|
|
78
|
+
<Card.Action icon='ph--article--regular' label='Documents' annotation='12' onClick={() => {}} />
|
|
79
|
+
<Card.Action icon='ph--table--regular' label='Tables' annotation='3' onClick={() => {}} />
|
|
80
|
+
<Card.Action icon='ph--chats-circle--regular' label='Threads' annotation='8' onClick={() => {}} />
|
|
81
|
+
<Card.Link label='dxos.org' href='https://dxos.org' />
|
|
82
|
+
</Card.Body>
|
|
83
|
+
</Card.Root>
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
const ContactCard = () => (
|
|
87
|
+
<Card.Root fullWidth>
|
|
88
|
+
<Card.Header>
|
|
89
|
+
<Card.DragHandle />
|
|
90
|
+
<Card.Title>Card on the canvas</Card.Title>
|
|
91
|
+
<Card.ActionIconButton action='close' onClick={() => {}} />
|
|
92
|
+
</Card.Header>
|
|
93
|
+
<Card.Body>
|
|
94
|
+
<Card.Row>
|
|
95
|
+
<Card.Block>
|
|
96
|
+
<Icon icon='ph--user--regular' />
|
|
97
|
+
</Card.Block>
|
|
98
|
+
<Card.Text>Card.Text sitting in the content track.</Card.Text>
|
|
99
|
+
</Card.Row>
|
|
100
|
+
<Card.Row>
|
|
101
|
+
<Card.Block>
|
|
102
|
+
<Icon icon='ph--tag--regular' />
|
|
103
|
+
</Card.Block>
|
|
104
|
+
<Card.Text>
|
|
105
|
+
<Tag hue='blue'>design</Tag> <Tag hue='emerald'>theme</Tag>
|
|
106
|
+
</Card.Text>
|
|
107
|
+
</Card.Row>
|
|
108
|
+
<Card.Section title='Inputs'>
|
|
109
|
+
<Input.Root>
|
|
110
|
+
<Input.Label>Text</Input.Label>
|
|
111
|
+
<Input.TextInput placeholder='Input.TextInput' />
|
|
112
|
+
</Input.Root>
|
|
113
|
+
<Input.Root>
|
|
114
|
+
<Input.Label>Switch</Input.Label>
|
|
115
|
+
<Input.Block>
|
|
116
|
+
<Input.Switch />
|
|
117
|
+
</Input.Block>
|
|
118
|
+
</Input.Root>
|
|
119
|
+
<Input.Root>
|
|
120
|
+
<Input.Label>Checkbox</Input.Label>
|
|
121
|
+
<Input.Block>
|
|
122
|
+
<Input.Checkbox />
|
|
123
|
+
</Input.Block>
|
|
124
|
+
</Input.Root>
|
|
125
|
+
</Card.Section>
|
|
126
|
+
<Card.Row>
|
|
127
|
+
<Card.Text variant='description'>Card.Text with the description variant.</Card.Text>
|
|
128
|
+
</Card.Row>
|
|
129
|
+
</Card.Body>
|
|
130
|
+
</Card.Root>
|
|
131
|
+
);
|
|
132
|
+
|
|
133
|
+
const CompanionCard = ({ index }: { index: number }) => {
|
|
134
|
+
const text = useMemo(() => random.lorem.paragraph(), []);
|
|
135
|
+
return (
|
|
136
|
+
<Card.Root fullWidth>
|
|
137
|
+
<Card.Header>
|
|
138
|
+
<Card.Block>
|
|
139
|
+
<Avatar.Root>
|
|
140
|
+
<Avatar.Content fallback={`${index}`} size={6} variant='circle' />
|
|
141
|
+
</Avatar.Root>
|
|
142
|
+
</Card.Block>
|
|
143
|
+
<Card.Title>{`Companion card ${index}`}</Card.Title>
|
|
144
|
+
<Card.Menu items={[{ label: 'Dismiss', icon: 'ph--x--regular', onClick: () => {} }]} />
|
|
145
|
+
</Card.Header>
|
|
146
|
+
<Card.Body>
|
|
147
|
+
<Card.Row>
|
|
148
|
+
<Card.Text variant='description'>{text}</Card.Text>
|
|
149
|
+
</Card.Row>
|
|
150
|
+
</Card.Body>
|
|
151
|
+
</Card.Root>
|
|
152
|
+
);
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const SettingsDialog = ({ open, onOpenChange }: { open: boolean; onOpenChange: (open: boolean) => void }) => (
|
|
156
|
+
<Dialog.Root open={open} onOpenChange={onOpenChange} modal>
|
|
157
|
+
<Dialog.Overlay>
|
|
158
|
+
<Dialog.Content>
|
|
159
|
+
<Dialog.Header>
|
|
160
|
+
<Dialog.Title>Dialog on the modal surface</Dialog.Title>
|
|
161
|
+
<Dialog.Close asChild>
|
|
162
|
+
<Dialog.ActionIconButton action='close' />
|
|
163
|
+
</Dialog.Close>
|
|
164
|
+
</Dialog.Header>
|
|
165
|
+
<Dialog.Body>
|
|
166
|
+
<Dialog.Description>Nested surfaces inside a dialog: card, input, popover.</Dialog.Description>
|
|
167
|
+
<ContactCard />
|
|
168
|
+
</Dialog.Body>
|
|
169
|
+
<Dialog.ActionBar>
|
|
170
|
+
<Dialog.Close asChild>
|
|
171
|
+
<Button variant='primary'>Done</Button>
|
|
172
|
+
</Dialog.Close>
|
|
173
|
+
</Dialog.ActionBar>
|
|
174
|
+
</Dialog.Content>
|
|
175
|
+
</Dialog.Overlay>
|
|
176
|
+
</Dialog.Root>
|
|
177
|
+
);
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* The narrow outer rails. In the app these are separate elements beside the L1/R1 sidebars
|
|
181
|
+
* (`L0Menu`, the companion tab strip), and they are the only consumers of `dx-l0-surface` /
|
|
182
|
+
* `dx-r0-surface` — so without them here nothing guards the rails collapsing back onto the
|
|
183
|
+
* sidebar tone.
|
|
184
|
+
*/
|
|
185
|
+
const Rail = ({ side }: { side: 'l0' | 'r0' }) => (
|
|
186
|
+
<div
|
|
187
|
+
role='none'
|
|
188
|
+
className={mx(
|
|
189
|
+
'shrink-0 grid grid-rows-[1fr_min-content] place-items-center py-2 w-(--dx-rail-size)',
|
|
190
|
+
side === 'l0' ? 'dx-l0-surface' : 'dx-r0-surface',
|
|
191
|
+
)}
|
|
192
|
+
>
|
|
193
|
+
<div className='grid gap-1 place-items-center'>
|
|
194
|
+
<IconButton iconOnly icon='ph--house--regular' label='Home' variant='ghost' />
|
|
195
|
+
<IconButton iconOnly icon='ph--folder--regular' label='Collections' variant='ghost' />
|
|
196
|
+
</div>
|
|
197
|
+
<IconButton iconOnly icon='ph--gear--regular' label='Settings' variant='ghost' />
|
|
198
|
+
</div>
|
|
199
|
+
);
|
|
200
|
+
|
|
201
|
+
const AppFrame = () => {
|
|
202
|
+
const [dialogOpen, setDialogOpen] = useState(false);
|
|
203
|
+
|
|
204
|
+
return (
|
|
205
|
+
<Main.Root defaultNavigationSidebarState='expanded' defaultComplementarySidebarState='expanded'>
|
|
206
|
+
<Main.Overlay />
|
|
207
|
+
|
|
208
|
+
<Main.NavigationSidebar label='Navigation' classNames='flex flex-row'>
|
|
209
|
+
<Rail side='l0' />
|
|
210
|
+
<Panel.Root>
|
|
211
|
+
<Panel.Toolbar asChild>
|
|
212
|
+
<Toolbar.Root>
|
|
213
|
+
<Toolbar.Text>Navigation</Toolbar.Text>
|
|
214
|
+
<Toolbar.Separator />
|
|
215
|
+
<NavigationToggle close />
|
|
216
|
+
</Toolbar.Root>
|
|
217
|
+
</Panel.Toolbar>
|
|
218
|
+
<Panel.Content asChild>
|
|
219
|
+
<ScrollArea.Root centered thin classNames='py-trim-sm'>
|
|
220
|
+
<ScrollArea.Viewport>
|
|
221
|
+
<NavigationCard />
|
|
222
|
+
</ScrollArea.Viewport>
|
|
223
|
+
</ScrollArea.Root>
|
|
224
|
+
</Panel.Content>
|
|
225
|
+
</Panel.Root>
|
|
226
|
+
</Main.NavigationSidebar>
|
|
227
|
+
|
|
228
|
+
<Main.Content classNames='w-full'>
|
|
229
|
+
<Panel.Root>
|
|
230
|
+
<Panel.Toolbar asChild>
|
|
231
|
+
<Toolbar.Root>
|
|
232
|
+
<NavigationToggle />
|
|
233
|
+
<Toolbar.Separator />
|
|
234
|
+
<Toolbar.IconButton icon='ph--plus--regular' variant='primary' label='Add' />
|
|
235
|
+
<Input.Root>
|
|
236
|
+
<Input.Label srOnly>Search</Input.Label>
|
|
237
|
+
<Input.TextInput placeholder='Search' />
|
|
238
|
+
</Input.Root>
|
|
239
|
+
<Select.Root defaultValue='all'>
|
|
240
|
+
<Select.TriggerButton placeholder='Filter' />
|
|
241
|
+
<Select.Portal>
|
|
242
|
+
<Select.Content>
|
|
243
|
+
<Select.Viewport>
|
|
244
|
+
<Select.Option value='all'>All</Select.Option>
|
|
245
|
+
<Select.Option value='mine'>Mine</Select.Option>
|
|
246
|
+
</Select.Viewport>
|
|
247
|
+
<Select.Arrow />
|
|
248
|
+
</Select.Content>
|
|
249
|
+
</Select.Portal>
|
|
250
|
+
</Select.Root>
|
|
251
|
+
<DropdownMenu.Root>
|
|
252
|
+
<DropdownMenu.Trigger asChild>
|
|
253
|
+
<Toolbar.IconButton icon='ph--dots-three-vertical--regular' iconOnly label='Menu' />
|
|
254
|
+
</DropdownMenu.Trigger>
|
|
255
|
+
<DropdownMenu.Portal>
|
|
256
|
+
<DropdownMenu.Content>
|
|
257
|
+
<DropdownMenu.Viewport>
|
|
258
|
+
<DropdownMenu.Item onSelect={() => setDialogOpen(true)}>
|
|
259
|
+
<Icon icon='ph--gear--regular' />
|
|
260
|
+
Open dialog
|
|
261
|
+
</DropdownMenu.Item>
|
|
262
|
+
<DropdownMenu.Item>
|
|
263
|
+
<Icon icon='ph--copy--regular' />
|
|
264
|
+
Duplicate
|
|
265
|
+
</DropdownMenu.Item>
|
|
266
|
+
<DropdownMenu.Item>
|
|
267
|
+
<Icon icon='ph--trash--regular' />
|
|
268
|
+
Delete
|
|
269
|
+
</DropdownMenu.Item>
|
|
270
|
+
</DropdownMenu.Viewport>
|
|
271
|
+
<DropdownMenu.Arrow />
|
|
272
|
+
</DropdownMenu.Content>
|
|
273
|
+
</DropdownMenu.Portal>
|
|
274
|
+
</DropdownMenu.Root>
|
|
275
|
+
<Toolbar.Separator />
|
|
276
|
+
<ComplementaryToggle />
|
|
277
|
+
</Toolbar.Root>
|
|
278
|
+
</Panel.Toolbar>
|
|
279
|
+
|
|
280
|
+
<Panel.Content>
|
|
281
|
+
<Message.Root valence='warning'>
|
|
282
|
+
<Message.Content>
|
|
283
|
+
<Message.Title>Message.Root</Message.Title>
|
|
284
|
+
<Message.Body>A valence surface nested inside a card.</Message.Body>
|
|
285
|
+
</Message.Content>
|
|
286
|
+
</Message.Root>
|
|
287
|
+
<ScrollArea.Root centered>
|
|
288
|
+
<ScrollArea.Viewport classNames='flex flex-col gap-trim-md'>
|
|
289
|
+
<ContactCard />
|
|
290
|
+
</ScrollArea.Viewport>
|
|
291
|
+
</ScrollArea.Root>
|
|
292
|
+
</Panel.Content>
|
|
293
|
+
|
|
294
|
+
<Panel.Statusbar asChild>
|
|
295
|
+
<Toolbar.Root>
|
|
296
|
+
<Toolbar.IconButton variant='ghost' icon='ph--house--regular' iconOnly label='Home' />
|
|
297
|
+
<Toolbar.Separator />
|
|
298
|
+
<Toolbar.Text>Statusbar</Toolbar.Text>
|
|
299
|
+
<Toolbar.Separator />
|
|
300
|
+
<Toolbar.IconButton variant='ghost' icon='ph--alarm--regular' iconOnly label='Status' />
|
|
301
|
+
</Toolbar.Root>
|
|
302
|
+
</Panel.Statusbar>
|
|
303
|
+
</Panel.Root>
|
|
304
|
+
</Main.Content>
|
|
305
|
+
|
|
306
|
+
<Main.ComplementarySidebar label='Complementary' classNames='flex flex-row-reverse'>
|
|
307
|
+
<Rail side='r0' />
|
|
308
|
+
<Panel.Root>
|
|
309
|
+
<Panel.Toolbar asChild>
|
|
310
|
+
<Toolbar.Root>
|
|
311
|
+
<ComplementaryToggle close />
|
|
312
|
+
<Toolbar.Separator />
|
|
313
|
+
<Toolbar.Text>Companion</Toolbar.Text>
|
|
314
|
+
</Toolbar.Root>
|
|
315
|
+
</Panel.Toolbar>
|
|
316
|
+
<Panel.Content asChild>
|
|
317
|
+
<ScrollArea.Root centered padding>
|
|
318
|
+
<ScrollArea.Viewport classNames='flex flex-col items-center py-3 gap-3'>
|
|
319
|
+
{Array.from({ length: 20 }, (_, index) => (
|
|
320
|
+
<CompanionCard key={index} index={index + 1} />
|
|
321
|
+
))}
|
|
322
|
+
</ScrollArea.Viewport>
|
|
323
|
+
</ScrollArea.Root>
|
|
324
|
+
</Panel.Content>
|
|
325
|
+
</Panel.Root>
|
|
326
|
+
</Main.ComplementarySidebar>
|
|
327
|
+
|
|
328
|
+
<SettingsDialog open={dialogOpen} onOpenChange={setDialogOpen} />
|
|
329
|
+
</Main.Root>
|
|
330
|
+
);
|
|
331
|
+
};
|
|
332
|
+
|
|
333
|
+
const DefaultStory = () => <AppFrame />;
|
|
334
|
+
|
|
335
|
+
const meta = {
|
|
336
|
+
title: 'ui/react-ui-core/playground/Elevation',
|
|
337
|
+
render: DefaultStory,
|
|
338
|
+
decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
|
|
339
|
+
parameters: {
|
|
340
|
+
layout: 'fullscreen',
|
|
341
|
+
},
|
|
342
|
+
} satisfies Meta<typeof DefaultStory>;
|
|
343
|
+
|
|
344
|
+
export default meta;
|
|
345
|
+
|
|
346
|
+
type Story = StoryObj<typeof meta>;
|
|
347
|
+
|
|
348
|
+
export const Default: Story = {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2023 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { createContext } from 'react';
|
|
6
|
+
|
|
7
|
+
import { type Density } from '@dxos/ui-types';
|
|
8
|
+
|
|
9
|
+
export interface DensityContextValue {
|
|
10
|
+
density?: Density;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// Kept out of `DensityProvider.tsx`: react-refresh only fast-refreshes a module whose exports are
|
|
14
|
+
// all components, so a context exported beside one forces a full page reload on every edit.
|
|
15
|
+
export const DensityContext = createContext<DensityContextValue>({ density: 'md' });
|
|
@@ -2,20 +2,26 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import React, { type PropsWithChildren
|
|
5
|
+
import React, { type PropsWithChildren } from 'react';
|
|
6
6
|
|
|
7
7
|
import { type Density } from '@dxos/ui-types';
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
density?: Density;
|
|
11
|
-
}
|
|
9
|
+
import { DensityContext } from './DensityContext';
|
|
12
10
|
|
|
13
11
|
export type DensityProviderProps = PropsWithChildren<{
|
|
14
12
|
density?: Density;
|
|
15
13
|
}>;
|
|
16
14
|
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
/**
|
|
16
|
+
* Provides density through React context only — controls opt in by reading it and emitting
|
|
17
|
+
* `data-density`, which applies the `--dx-control*` override for that element alone.
|
|
18
|
+
*
|
|
19
|
+
* It deliberately does NOT emit a `dx-density-*` class. Doing so set the knobs for the entire
|
|
20
|
+
* subtree, so a provider intended for one region (the deck's `lg` pane toolbar) silently resized
|
|
21
|
+
* unrelated descendants that read `--dx-control` — form labels, for instance. A region that wants
|
|
22
|
+
* subtree-wide density applies the class itself, where its scope is visible at the call site
|
|
23
|
+
* (see `Toolbar.Root`).
|
|
24
|
+
*/
|
|
19
25
|
export const DensityProvider = ({ density, children }: DensityProviderProps) => (
|
|
20
26
|
<DensityContext.Provider value={{ density }}>{children}</DensityContext.Provider>
|
|
21
27
|
);
|
|
@@ -11,7 +11,7 @@ import { withLayout, withTheme } from '../../testing';
|
|
|
11
11
|
import { Flex } from './Flex';
|
|
12
12
|
|
|
13
13
|
const Cell = ({ label, hue }: { label: string; hue: ChromaticPalette }) => (
|
|
14
|
-
<div data-hue={hue} className='flex w-full dx-
|
|
14
|
+
<div data-hue={hue} className='flex w-full dx-callout p-2 text-sm font-mono border rounded-sm'>
|
|
15
15
|
{label}
|
|
16
16
|
</div>
|
|
17
17
|
);
|
|
@@ -11,7 +11,7 @@ import { withLayout, withTheme } from '../../testing';
|
|
|
11
11
|
import { Grid } from './Grid';
|
|
12
12
|
|
|
13
13
|
const Cell = ({ label, hue }: { label: string; hue: ChromaticPalette }) => (
|
|
14
|
-
<div data-hue={hue} className='dx-
|
|
14
|
+
<div data-hue={hue} className='dx-callout p-2 text-sm font-mono border rounded-sm'>
|
|
15
15
|
{label}
|
|
16
16
|
</div>
|
|
17
17
|
);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2026 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import React, { type PropsWithChildren, useEffect, useState } from 'react';
|
|
6
|
+
|
|
7
|
+
import {
|
|
8
|
+
type IconRegistry,
|
|
9
|
+
IconRegistryContext,
|
|
10
|
+
type IconSource,
|
|
11
|
+
NoopRegistry,
|
|
12
|
+
acquireRegistry,
|
|
13
|
+
defaultSources,
|
|
14
|
+
} from './icon-registry';
|
|
15
|
+
|
|
16
|
+
export type IconRegistryProviderProps = PropsWithChildren<{
|
|
17
|
+
/**
|
|
18
|
+
* Icon sets resolvable at runtime; defaults to Phosphor at `/phosphor`. Only the first
|
|
19
|
+
* mounted provider's sources apply, since the registry is shared across a document.
|
|
20
|
+
*/
|
|
21
|
+
sources?: IconSource[];
|
|
22
|
+
}>;
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Provides the shared icon registry to descendants (consumed by `useIconHref`), acquiring
|
|
26
|
+
* the refcounted document-level singleton on mount and releasing it on unmount.
|
|
27
|
+
*/
|
|
28
|
+
export const IconRegistryProvider = ({ children, sources = defaultSources }: IconRegistryProviderProps) => {
|
|
29
|
+
const [registry, setRegistry] = useState<IconRegistry>(NoopRegistry);
|
|
30
|
+
|
|
31
|
+
useEffect(() => {
|
|
32
|
+
if (typeof document === 'undefined') {
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const { registry, release } = acquireRegistry(sources);
|
|
36
|
+
setRegistry(registry);
|
|
37
|
+
return release;
|
|
38
|
+
// Sources are read once when the shared registry is created; later changes are ignored by design.
|
|
39
|
+
}, []);
|
|
40
|
+
|
|
41
|
+
return <IconRegistryContext.Provider value={registry}>{children}</IconRegistryContext.Provider>;
|
|
42
|
+
};
|
|
@@ -11,6 +11,7 @@ import { type SafeAreaPadding, useSafeArea } from '../../hooks';
|
|
|
11
11
|
import { hasIosKeyboard } from '../../util';
|
|
12
12
|
import { DensityProvider } from '../DensityProvider';
|
|
13
13
|
import { ElevationProvider } from '../ElevationProvider';
|
|
14
|
+
import { IconRegistryProvider } from './IconRegistry';
|
|
14
15
|
import { TranslationsProvider, type TranslationsProviderProps } from './TranslationsProvider';
|
|
15
16
|
|
|
16
17
|
export type ThemeContextValue = {
|
|
@@ -18,7 +19,6 @@ export type ThemeContextValue = {
|
|
|
18
19
|
themeMode: ThemeMode;
|
|
19
20
|
hasIosKeyboard: boolean;
|
|
20
21
|
safeAreaPadding?: SafeAreaPadding;
|
|
21
|
-
noCache?: boolean;
|
|
22
22
|
platform?: 'mobile' | 'desktop';
|
|
23
23
|
};
|
|
24
24
|
|
|
@@ -42,7 +42,6 @@ export const ThemeProvider = ({
|
|
|
42
42
|
tx = (_path, _styleProps, ..._options) => undefined,
|
|
43
43
|
themeMode = 'dark',
|
|
44
44
|
rootDensity = 'md',
|
|
45
|
-
noCache,
|
|
46
45
|
platform,
|
|
47
46
|
}: ThemeProviderProps) => {
|
|
48
47
|
useEffect(() => {
|
|
@@ -56,23 +55,25 @@ export const ThemeProvider = ({
|
|
|
56
55
|
const safeAreaPadding = useSafeArea();
|
|
57
56
|
// Destructure all props explicitly so useMemo deps are stable primitives, not a new `rest` object every render.
|
|
58
57
|
const contextValue = useMemo(
|
|
59
|
-
() => ({ tx, themeMode, hasIosKeyboard: hasIosKeyboard(), safeAreaPadding,
|
|
60
|
-
[tx, themeMode, safeAreaPadding,
|
|
58
|
+
() => ({ tx, themeMode, hasIosKeyboard: hasIosKeyboard(), safeAreaPadding, platform }),
|
|
59
|
+
[tx, themeMode, safeAreaPadding, platform],
|
|
61
60
|
);
|
|
62
61
|
|
|
63
62
|
return (
|
|
64
63
|
<ThemeContext.Provider value={contextValue}>
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
64
|
+
<IconRegistryProvider>
|
|
65
|
+
<TranslationsProvider
|
|
66
|
+
{...{
|
|
67
|
+
fallback,
|
|
68
|
+
resourceExtensions,
|
|
69
|
+
appNs,
|
|
70
|
+
}}
|
|
71
|
+
>
|
|
72
|
+
<ElevationProvider elevation='base'>
|
|
73
|
+
<DensityProvider density={rootDensity}>{children}</DensityProvider>
|
|
74
|
+
</ElevationProvider>
|
|
75
|
+
</TranslationsProvider>
|
|
76
|
+
</IconRegistryProvider>
|
|
76
77
|
</ThemeContext.Provider>
|
|
77
78
|
);
|
|
78
79
|
};
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2022 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { enUS as dtLocaleEnUs } from 'date-fns/locale';
|
|
6
|
+
import { createContext, useContext } from 'react';
|
|
7
|
+
import { useTranslation as useI18NextTranslation } from 'react-i18next';
|
|
8
|
+
|
|
9
|
+
// Kept out of `TranslationsProvider.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 const initialNs = 'dxos-common';
|
|
13
|
+
export const initialDtLocale = dtLocaleEnUs;
|
|
14
|
+
|
|
15
|
+
export const TranslationsContext = createContext({
|
|
16
|
+
appNs: initialNs,
|
|
17
|
+
dtLocale: initialDtLocale,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
export const useTranslation = (...args: Parameters<typeof useI18NextTranslation>) => {
|
|
21
|
+
const result = useI18NextTranslation(...args);
|
|
22
|
+
const { dtLocale } = useContext(TranslationsContext);
|
|
23
|
+
return { ...result, dtLocale };
|
|
24
|
+
};
|
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
// Copyright 2022 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { type Locale
|
|
6
|
-
import React, { type ReactNode, Suspense,
|
|
7
|
-
import { I18nextProvider
|
|
5
|
+
import { type Locale } from 'date-fns/locale';
|
|
6
|
+
import React, { type ReactNode, Suspense, useEffect, useState } from 'react';
|
|
7
|
+
import { I18nextProvider } from 'react-i18next';
|
|
8
8
|
|
|
9
9
|
import { type Resource, addResources, i18n } from '@dxos/i18n';
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
const initialDtLocale = dtLocaleEnUs;
|
|
11
|
+
import { TranslationsContext, initialDtLocale, initialNs } from './TranslationsContext';
|
|
13
12
|
|
|
14
13
|
export interface TranslationsProviderProps {
|
|
15
14
|
children?: ReactNode;
|
|
@@ -21,17 +20,6 @@ export interface TranslationsProviderProps {
|
|
|
21
20
|
dtLocale?: Locale;
|
|
22
21
|
}
|
|
23
22
|
|
|
24
|
-
export const TranslationsContext = createContext({
|
|
25
|
-
appNs: initialNs,
|
|
26
|
-
dtLocale: initialDtLocale,
|
|
27
|
-
});
|
|
28
|
-
|
|
29
|
-
export const useTranslation = (...args: Parameters<typeof useI18NextTranslation>) => {
|
|
30
|
-
const result = useI18NextTranslation(...args);
|
|
31
|
-
const { dtLocale } = useContext(TranslationsContext);
|
|
32
|
-
return { ...result, dtLocale };
|
|
33
|
-
};
|
|
34
|
-
|
|
35
23
|
export const TranslationsProvider = ({
|
|
36
24
|
fallback,
|
|
37
25
|
resourceExtensions,
|