@sovereignfs/ui 0.54.0 → 0.89.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/LICENSE +373 -661
- package/NOTICE +8 -0
- package/README.md +4 -6
- package/dist/Accordion.module.css +1 -1
- package/dist/Alert.module.css +1 -1
- package/dist/AppsLauncher.module.css +102 -0
- package/dist/Avatar.module.css +1 -1
- package/dist/Badge.module.css +30 -7
- package/dist/BalanceChip.module.css +1 -1
- package/dist/Button.module.css +23 -2
- package/dist/Card.module.css +7 -1
- package/dist/CardTile.module.css +187 -0
- package/dist/CheckableListRow.module.css +8 -0
- package/dist/Checkbox.module.css +8 -0
- package/dist/CodeTextarea.module.css +7 -1
- package/dist/Collapsible.module.css +1 -1
- package/dist/ColorPicker.module.css +138 -0
- package/dist/Combobox.module.css +8 -2
- package/dist/Command.module.css +7 -1
- package/dist/ConfirmDialog.module.css +8 -2
- package/dist/ConsentPrompt.module.css +21 -0
- package/dist/DatePicker.module.css +7 -1
- package/dist/Dialog.module.css +130 -21
- package/dist/DragHandleRow.module.css +6 -0
- package/dist/Drawer.module.css +36 -7
- package/dist/FileDropzone.module.css +25 -1
- package/dist/Header.module.css +68 -0
- package/dist/HeaderFooterLayout.module.css +21 -0
- package/dist/IconPicker.module.css +15 -5
- package/dist/Input.module.css +7 -1
- package/dist/Kbd.module.css +1 -1
- package/dist/LegalLinks.module.css +9 -2
- package/dist/Markdown.module.css +29 -0
- package/dist/Menu.module.css +1 -0
- package/dist/Message.module.css +10 -1
- package/dist/MessageScroller.module.css +12 -1
- package/dist/MobileAppsDrawer.module.css +19 -14
- package/dist/MobileFooter.module.css +7 -1
- package/dist/MobileHeader.module.css +14 -1
- package/dist/NavList.module.css +139 -0
- package/dist/NavTabs.module.css +8 -2
- package/dist/NotificationsPanel.module.css +268 -0
- package/dist/OverlayHeader.module.css +1 -1
- package/dist/PageContainer.module.css +62 -0
- package/dist/PageHeader.module.css +54 -0
- package/dist/PageLayout.module.css +51 -0
- package/dist/Popover.module.css +1 -1
- package/dist/QrCode.module.css +17 -0
- package/dist/QuantityStepper.module.css +5 -3
- package/dist/RadioGroup.module.css +6 -0
- package/dist/Resizable.module.css +3 -3
- package/dist/RootLayout.module.css +12 -0
- package/dist/SegmentedControl.module.css +7 -1
- package/dist/Select.module.css +7 -1
- package/dist/Sheet.module.css +20 -2
- package/dist/SplitPane.module.css +5 -5
- package/dist/StatusBadge.module.css +1 -1
- package/dist/StepStrip.module.css +55 -0
- package/dist/SuggestionInput.module.css +14 -3
- package/dist/SwipableMobileCarousel.module.css +12 -3
- package/dist/SwipableMobileCarouselDots.module.css +21 -0
- package/dist/SwipeStack.module.css +101 -0
- package/dist/SystemBanner.module.css +16 -0
- package/dist/Table.module.css +2 -2
- package/dist/Tabs.module.css +7 -1
- package/dist/TagInput.module.css +8 -2
- package/dist/Textarea.module.css +15 -1
- package/dist/ThreeColumnLayout.module.css +35 -0
- package/dist/Toast.module.css +67 -3
- package/dist/Toggle.module.css +7 -0
- package/dist/Tooltip.module.css +7 -1
- package/dist/UserMenu.module.css +95 -0
- package/dist/fonts/OFL.txt +93 -0
- package/dist/fonts/hanken-grotesk-cyrillic-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-latin-ext-wght-normal.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-latin-wght-normal.woff2 +0 -0
- package/dist/fonts/hanken-grotesk-vietnamese-wght-normal.woff2 +0 -0
- package/dist/index.d.ts +1156 -76
- package/dist/index.js +4223 -1513
- package/dist/tokens/fonts.css +53 -0
- package/dist/tokens/primitives.css +23 -12
- package/dist/tokens/semantic.css +32 -0
- package/dist/tokens/theme-presets.css +33 -0
- package/dist/tokens.css +2 -1
- package/package.json +46 -19
- package/src/__tests__/motion.test.tsx +0 -105
- package/src/components/Accordion/Accordion.module.css +0 -3
- package/src/components/Accordion/Accordion.stories.tsx +0 -110
- package/src/components/Accordion/Accordion.tsx +0 -53
- package/src/components/Accordion/__tests__/Accordion.test.tsx +0 -61
- package/src/components/Alert/Alert.module.css +0 -62
- package/src/components/Alert/Alert.stories.tsx +0 -96
- package/src/components/Alert/Alert.tsx +0 -58
- package/src/components/Alert/__tests__/Alert.test.tsx +0 -75
- package/src/components/AspectRatio/AspectRatio.module.css +0 -15
- package/src/components/AspectRatio/AspectRatio.stories.tsx +0 -78
- package/src/components/AspectRatio/AspectRatio.tsx +0 -21
- package/src/components/AspectRatio/__tests__/AspectRatio.test.tsx +0 -27
- package/src/components/Avatar/Avatar.module.css +0 -38
- package/src/components/Avatar/Avatar.tsx +0 -42
- package/src/components/Badge/Badge.module.css +0 -154
- package/src/components/Badge/Badge.stories.tsx +0 -226
- package/src/components/Badge/Badge.tsx +0 -81
- package/src/components/Badge/__tests__/Badge.test.tsx +0 -88
- package/src/components/BalanceChip/BalanceChip.module.css +0 -32
- package/src/components/BalanceChip/BalanceChip.stories.tsx +0 -45
- package/src/components/BalanceChip/BalanceChip.tsx +0 -33
- package/src/components/Breadcrumb/Breadcrumb.module.css +0 -49
- package/src/components/Breadcrumb/Breadcrumb.stories.tsx +0 -47
- package/src/components/Breadcrumb/Breadcrumb.tsx +0 -57
- package/src/components/Breadcrumb/__tests__/Breadcrumb.test.tsx +0 -52
- package/src/components/Button/Button.module.css +0 -153
- package/src/components/Button/Button.stories.tsx +0 -83
- package/src/components/Button/Button.tsx +0 -52
- package/src/components/Button/__tests__/Button.test.tsx +0 -66
- package/src/components/ButtonGroup/ButtonGroup.module.css +0 -29
- package/src/components/ButtonGroup/ButtonGroup.stories.tsx +0 -57
- package/src/components/ButtonGroup/ButtonGroup.tsx +0 -27
- package/src/components/ButtonGroup/__tests__/ButtonGroup.test.tsx +0 -29
- package/src/components/Calendar/Calendar.module.css +0 -126
- package/src/components/Calendar/Calendar.tsx +0 -213
- package/src/components/Calendar/__tests__/Calendar.test.tsx +0 -98
- package/src/components/Calendar/dateUtils.ts +0 -97
- package/src/components/Card/Card.module.css +0 -42
- package/src/components/Card/Card.tsx +0 -34
- package/src/components/CheckableListRow/CheckableListRow.module.css +0 -95
- package/src/components/CheckableListRow/CheckableListRow.stories.tsx +0 -99
- package/src/components/CheckableListRow/CheckableListRow.tsx +0 -89
- package/src/components/Checkbox/Checkbox.module.css +0 -111
- package/src/components/Checkbox/Checkbox.tsx +0 -78
- package/src/components/CodeTextarea/CodeTextarea.module.css +0 -53
- package/src/components/CodeTextarea/CodeTextarea.stories.tsx +0 -77
- package/src/components/CodeTextarea/CodeTextarea.tsx +0 -36
- package/src/components/Collapsible/Collapsible.module.css +0 -70
- package/src/components/Collapsible/Collapsible.stories.tsx +0 -62
- package/src/components/Collapsible/Collapsible.tsx +0 -66
- package/src/components/Collapsible/__tests__/Collapsible.test.tsx +0 -71
- package/src/components/Combobox/Combobox.module.css +0 -122
- package/src/components/Combobox/Combobox.stories.tsx +0 -79
- package/src/components/Combobox/Combobox.tsx +0 -186
- package/src/components/Combobox/__tests__/Combobox.test.tsx +0 -158
- package/src/components/Command/Command.module.css +0 -80
- package/src/components/Command/Command.stories.tsx +0 -104
- package/src/components/Command/Command.tsx +0 -168
- package/src/components/Command/__tests__/Command.test.tsx +0 -162
- package/src/components/ConfirmDialog/ConfirmDialog.module.css +0 -113
- package/src/components/ConfirmDialog/ConfirmDialog.tsx +0 -124
- package/src/components/ConfirmDialog/__tests__/ConfirmDialog.test.tsx +0 -146
- package/src/components/ContextMenu/ContextMenu.stories.tsx +0 -81
- package/src/components/ContextMenu/ContextMenu.tsx +0 -100
- package/src/components/ContextMenu/__tests__/ContextMenu.test.tsx +0 -87
- package/src/components/CurrencyInput/CurrencyInput.stories.tsx +0 -50
- package/src/components/CurrencyInput/CurrencyInput.tsx +0 -60
- package/src/components/DataTable/DataTable.module.css +0 -28
- package/src/components/DataTable/DataTable.stories.tsx +0 -74
- package/src/components/DataTable/DataTable.tsx +0 -154
- package/src/components/DataTable/__tests__/DataTable.test.tsx +0 -123
- package/src/components/DatePicker/DatePicker.module.css +0 -61
- package/src/components/DatePicker/DatePicker.tsx +0 -103
- package/src/components/DatePicker/__tests__/DatePicker.test.tsx +0 -89
- package/src/components/DeviceOnlyGate/DeviceOnlyGate.tsx +0 -58
- package/src/components/DeviceOnlyGate/__tests__/DeviceOnlyGate.test.tsx +0 -45
- package/src/components/DeviceStorageKeyGate/DeviceStorageKeyGate.tsx +0 -100
- package/src/components/DeviceStorageKeyGate/__tests__/DeviceStorageKeyGate.test.tsx +0 -119
- package/src/components/Dialog/Dialog.module.css +0 -226
- package/src/components/Dialog/Dialog.stories.tsx +0 -147
- package/src/components/Dialog/Dialog.tsx +0 -160
- package/src/components/Dialog/__tests__/Dialog.test.tsx +0 -137
- package/src/components/DragHandleRow/DragHandleRow.module.css +0 -57
- package/src/components/DragHandleRow/DragHandleRow.tsx +0 -61
- package/src/components/Drawer/Drawer.module.css +0 -92
- package/src/components/Drawer/Drawer.stories.tsx +0 -132
- package/src/components/Drawer/Drawer.tsx +0 -176
- package/src/components/Drawer/__tests__/Drawer.test.tsx +0 -199
- package/src/components/EmptyState/EmptyState.module.css +0 -27
- package/src/components/EmptyState/EmptyState.tsx +0 -27
- package/src/components/FileDropzone/FileDropzone.module.css +0 -63
- package/src/components/FileDropzone/FileDropzone.tsx +0 -109
- package/src/components/FileDropzone/__tests__/FileDropzone.test.tsx +0 -67
- package/src/components/FormField/FormField.module.css +0 -33
- package/src/components/FormField/FormField.tsx +0 -78
- package/src/components/FormField/__tests__/FormField.test.tsx +0 -83
- package/src/components/HoverCard/HoverCard.module.css +0 -3
- package/src/components/HoverCard/HoverCard.stories.tsx +0 -66
- package/src/components/HoverCard/HoverCard.tsx +0 -111
- package/src/components/HoverCard/__tests__/HoverCard.test.tsx +0 -99
- package/src/components/Icon/Icon.module.css +0 -27
- package/src/components/Icon/Icon.stories.tsx +0 -95
- package/src/components/Icon/Icon.tsx +0 -43
- package/src/components/Icon/__tests__/Icon.test.tsx +0 -40
- package/src/components/Icon/icons/activity.tsx +0 -20
- package/src/components/Icon/icons/alert-triangle.tsx +0 -22
- package/src/components/Icon/icons/apple.tsx +0 -21
- package/src/components/Icon/icons/banana.tsx +0 -21
- package/src/components/Icon/icons/beef.tsx +0 -22
- package/src/components/Icon/icons/beer.tsx +0 -24
- package/src/components/Icon/icons/bell.tsx +0 -21
- package/src/components/Icon/icons/calendar.tsx +0 -23
- package/src/components/Icon/icons/candy.tsx +0 -24
- package/src/components/Icon/icons/carrot.tsx +0 -22
- package/src/components/Icon/icons/check.tsx +0 -20
- package/src/components/Icon/icons/chevron-down.tsx +0 -20
- package/src/components/Icon/icons/chevron-left.tsx +0 -20
- package/src/components/Icon/icons/chevron-right.tsx +0 -20
- package/src/components/Icon/icons/chevron-up.tsx +0 -20
- package/src/components/Icon/icons/circle-check.tsx +0 -21
- package/src/components/Icon/icons/circle-x.tsx +0 -22
- package/src/components/Icon/icons/coffee.tsx +0 -23
- package/src/components/Icon/icons/cookie.tsx +0 -25
- package/src/components/Icon/icons/croissant.tsx +0 -24
- package/src/components/Icon/icons/cup-soda.tsx +0 -23
- package/src/components/Icon/icons/drumstick.tsx +0 -21
- package/src/components/Icon/icons/egg.tsx +0 -20
- package/src/components/Icon/icons/ellipsis-vertical.tsx +0 -22
- package/src/components/Icon/icons/external-link.tsx +0 -22
- package/src/components/Icon/icons/eye-off.tsx +0 -23
- package/src/components/Icon/icons/eye.tsx +0 -21
- package/src/components/Icon/icons/file.tsx +0 -21
- package/src/components/Icon/icons/fish.tsx +0 -25
- package/src/components/Icon/icons/grid-2x2.tsx +0 -22
- package/src/components/Icon/icons/house.tsx +0 -21
- package/src/components/Icon/icons/index.ts +0 -234
- package/src/components/Icon/icons/info.tsx +0 -22
- package/src/components/Icon/icons/lock.tsx +0 -21
- package/src/components/Icon/icons/log-out.tsx +0 -22
- package/src/components/Icon/icons/mail.tsx +0 -21
- package/src/components/Icon/icons/menu.tsx +0 -22
- package/src/components/Icon/icons/milk.tsx +0 -22
- package/src/components/Icon/icons/package.tsx +0 -23
- package/src/components/Icon/icons/pencil.tsx +0 -21
- package/src/components/Icon/icons/pizza.tsx +0 -24
- package/src/components/Icon/icons/plus.tsx +0 -21
- package/src/components/Icon/icons/rotate-ccw.tsx +0 -21
- package/src/components/Icon/icons/salad.tsx +0 -24
- package/src/components/Icon/icons/search.tsx +0 -21
- package/src/components/Icon/icons/settings.tsx +0 -21
- package/src/components/Icon/icons/shield.tsx +0 -20
- package/src/components/Icon/icons/shopping-basket.tsx +0 -26
- package/src/components/Icon/icons/sliders-horizontal.tsx +0 -28
- package/src/components/Icon/icons/smartphone.tsx +0 -21
- package/src/components/Icon/icons/snowflake.tsx +0 -31
- package/src/components/Icon/icons/spray-can.tsx +0 -29
- package/src/components/Icon/icons/trash-2.tsx +0 -24
- package/src/components/Icon/icons/upload.tsx +0 -22
- package/src/components/Icon/icons/user.tsx +0 -21
- package/src/components/Icon/icons/wine.tsx +0 -23
- package/src/components/Icon/icons/x.tsx +0 -21
- package/src/components/IconPicker/IconPicker.module.css +0 -63
- package/src/components/IconPicker/IconPicker.stories.tsx +0 -84
- package/src/components/IconPicker/IconPicker.tsx +0 -90
- package/src/components/Input/Input.module.css +0 -52
- package/src/components/Input/Input.stories.tsx +0 -86
- package/src/components/Input/Input.tsx +0 -14
- package/src/components/Input/__tests__/Input.test.tsx +0 -22
- package/src/components/Item/Item.module.css +0 -70
- package/src/components/Item/Item.stories.tsx +0 -62
- package/src/components/Item/Item.tsx +0 -54
- package/src/components/Item/__tests__/Item.test.tsx +0 -39
- package/src/components/Kbd/Kbd.module.css +0 -14
- package/src/components/Kbd/Kbd.stories.tsx +0 -32
- package/src/components/Kbd/Kbd.tsx +0 -12
- package/src/components/Kbd/__tests__/Kbd.test.tsx +0 -14
- package/src/components/Label/Label.module.css +0 -11
- package/src/components/Label/Label.stories.tsx +0 -40
- package/src/components/Label/Label.tsx +0 -24
- package/src/components/Label/__tests__/Label.test.tsx +0 -32
- package/src/components/LegalLinks/LegalLinks.module.css +0 -24
- package/src/components/LegalLinks/LegalLinks.stories.tsx +0 -22
- package/src/components/LegalLinks/LegalLinks.tsx +0 -40
- package/src/components/Markdown/Markdown.module.css +0 -49
- package/src/components/Markdown/Markdown.stories.tsx +0 -30
- package/src/components/Markdown/Markdown.tsx +0 -168
- package/src/components/Marker/Marker.module.css +0 -33
- package/src/components/Marker/Marker.stories.tsx +0 -39
- package/src/components/Marker/Marker.tsx +0 -34
- package/src/components/Marker/__tests__/Marker.test.tsx +0 -23
- package/src/components/MemberMultiSelect/MemberMultiSelect.module.css +0 -27
- package/src/components/MemberMultiSelect/MemberMultiSelect.stories.tsx +0 -74
- package/src/components/MemberMultiSelect/MemberMultiSelect.tsx +0 -67
- package/src/components/Menu/Menu.module.css +0 -89
- package/src/components/Menu/Menu.tsx +0 -159
- package/src/components/Menu/__tests__/Menu.test.tsx +0 -197
- package/src/components/Menubar/Menubar.stories.tsx +0 -52
- package/src/components/Menubar/Menubar.tsx +0 -42
- package/src/components/Menubar/__tests__/Menubar.test.tsx +0 -45
- package/src/components/Message/Message.module.css +0 -99
- package/src/components/Message/Message.stories.tsx +0 -79
- package/src/components/Message/Message.tsx +0 -41
- package/src/components/Message/__tests__/Message.test.tsx +0 -46
- package/src/components/MessageScroller/MessageScroller.module.css +0 -54
- package/src/components/MessageScroller/MessageScroller.stories.tsx +0 -84
- package/src/components/MessageScroller/MessageScroller.tsx +0 -72
- package/src/components/MessageScroller/__tests__/MessageScroller.test.tsx +0 -105
- package/src/components/MobileAppsDrawer/MobileAppsDrawer.module.css +0 -81
- package/src/components/MobileAppsDrawer/MobileAppsDrawer.tsx +0 -78
- package/src/components/MobileAppsDrawer/__tests__/MobileAppsDrawer.test.tsx +0 -80
- package/src/components/MobileFooter/MobileFooter.module.css +0 -73
- package/src/components/MobileFooter/MobileFooter.stories.tsx +0 -47
- package/src/components/MobileFooter/MobileFooter.tsx +0 -109
- package/src/components/MobileFooter/__tests__/MobileFooter.test.tsx +0 -71
- package/src/components/MobileHeader/MobileHeader.module.css +0 -63
- package/src/components/MobileHeader/MobileHeader.stories.tsx +0 -57
- package/src/components/MobileHeader/MobileHeader.tsx +0 -77
- package/src/components/MobileHeader/__tests__/MobileHeader.test.tsx +0 -58
- package/src/components/NavTabs/NavTabs.module.css +0 -50
- package/src/components/NavTabs/NavTabs.tsx +0 -61
- package/src/components/NavigationMenu/NavigationMenu.module.css +0 -53
- package/src/components/NavigationMenu/NavigationMenu.stories.tsx +0 -58
- package/src/components/NavigationMenu/NavigationMenu.tsx +0 -125
- package/src/components/NavigationMenu/__tests__/NavigationMenu.test.tsx +0 -93
- package/src/components/OfflineGate/OfflineGate.tsx +0 -44
- package/src/components/OfflineGate/__tests__/OfflineGate.test.tsx +0 -66
- package/src/components/OverlayHeader/OverlayHeader.module.css +0 -98
- package/src/components/OverlayHeader/OverlayHeader.tsx +0 -62
- package/src/components/OverlayHeader/__tests__/OverlayHeader.test.tsx +0 -51
- package/src/components/PageContainer/PageContainer.module.css +0 -20
- package/src/components/PageContainer/PageContainer.tsx +0 -31
- package/src/components/PageContainer/__tests__/PageContainer.test.tsx +0 -37
- package/src/components/PageHeader/PageHeader.module.css +0 -32
- package/src/components/PageHeader/PageHeader.tsx +0 -35
- package/src/components/Pagination/Pagination.module.css +0 -98
- package/src/components/Pagination/Pagination.stories.tsx +0 -49
- package/src/components/Pagination/Pagination.tsx +0 -87
- package/src/components/Pagination/__tests__/Pagination.test.tsx +0 -56
- package/src/components/Popover/Popover.module.css +0 -74
- package/src/components/Popover/Popover.stories.tsx +0 -357
- package/src/components/Popover/Popover.tsx +0 -208
- package/src/components/Popover/__tests__/Popover.test.tsx +0 -98
- package/src/components/Progress/Progress.module.css +0 -20
- package/src/components/Progress/Progress.stories.tsx +0 -40
- package/src/components/Progress/Progress.tsx +0 -35
- package/src/components/Progress/__tests__/Progress.test.tsx +0 -31
- package/src/components/QuantityStepper/QuantityStepper.module.css +0 -67
- package/src/components/QuantityStepper/QuantityStepper.stories.tsx +0 -79
- package/src/components/QuantityStepper/QuantityStepper.tsx +0 -107
- package/src/components/RadioGroup/RadioGroup.module.css +0 -88
- package/src/components/RadioGroup/RadioGroup.stories.tsx +0 -69
- package/src/components/RadioGroup/RadioGroup.tsx +0 -99
- package/src/components/RadioGroup/__tests__/RadioGroup.test.tsx +0 -59
- package/src/components/Resizable/Resizable.module.css +0 -70
- package/src/components/Resizable/Resizable.stories.tsx +0 -82
- package/src/components/Resizable/Resizable.tsx +0 -313
- package/src/components/Resizable/__tests__/Resizable.test.tsx +0 -128
- package/src/components/ResponsiveSurface/ResponsiveSurface.tsx +0 -24
- package/src/components/ResponsiveSurface/__tests__/ResponsiveSurface.test.tsx +0 -73
- package/src/components/ScrollArea/ScrollArea.module.css +0 -20
- package/src/components/ScrollArea/ScrollArea.stories.tsx +0 -57
- package/src/components/ScrollArea/ScrollArea.tsx +0 -27
- package/src/components/ScrollArea/__tests__/ScrollArea.test.tsx +0 -39
- package/src/components/SegmentedControl/SegmentedControl.module.css +0 -55
- package/src/components/SegmentedControl/SegmentedControl.stories.tsx +0 -118
- package/src/components/SegmentedControl/SegmentedControl.tsx +0 -56
- package/src/components/SegmentedControl/__tests__/SegmentedControl.test.tsx +0 -63
- package/src/components/Select/Select.module.css +0 -82
- package/src/components/Select/Select.stories.tsx +0 -115
- package/src/components/Select/Select.tsx +0 -48
- package/src/components/Select/__tests__/Select.test.tsx +0 -59
- package/src/components/Sheet/Sheet.module.css +0 -55
- package/src/components/Sheet/Sheet.tsx +0 -109
- package/src/components/Sheet/__tests__/Sheet.test.tsx +0 -99
- package/src/components/Slider/Slider.module.css +0 -95
- package/src/components/Slider/Slider.stories.tsx +0 -64
- package/src/components/Slider/Slider.tsx +0 -77
- package/src/components/Slider/__tests__/Slider.test.tsx +0 -45
- package/src/components/Spinner/Spinner.module.css +0 -39
- package/src/components/Spinner/Spinner.tsx +0 -23
- package/src/components/SplitMethodSelector/SplitMethodSelector.stories.tsx +0 -33
- package/src/components/SplitMethodSelector/SplitMethodSelector.tsx +0 -43
- package/src/components/SplitPane/SplitPane.module.css +0 -85
- package/src/components/SplitPane/SplitPane.stories.tsx +0 -160
- package/src/components/SplitPane/SplitPane.tsx +0 -149
- package/src/components/SplitPane/__tests__/SplitPane.test.tsx +0 -51
- package/src/components/StatusBadge/StatusBadge.module.css +0 -59
- package/src/components/StatusBadge/StatusBadge.stories.tsx +0 -74
- package/src/components/StatusBadge/StatusBadge.tsx +0 -65
- package/src/components/SuggestionInput/SuggestionInput.module.css +0 -103
- package/src/components/SuggestionInput/SuggestionInput.stories.tsx +0 -144
- package/src/components/SuggestionInput/SuggestionInput.tsx +0 -207
- package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.module.css +0 -55
- package/src/components/SwipableMobileCarousel/SwipableMobileCarousel.tsx +0 -227
- package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlide.tsx +0 -35
- package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideBody.tsx +0 -42
- package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideFooter.tsx +0 -18
- package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideHeader.tsx +0 -21
- package/src/components/SwipableMobileCarousel/SwipableMobileCarouselSlideParts.module.css +0 -29
- package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarousel.test.tsx +0 -133
- package/src/components/SwipableMobileCarousel/__tests__/SwipableMobileCarouselDevGuard.test.tsx +0 -61
- package/src/components/SwipableMobileCarousel/context.ts +0 -13
- package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.module.css +0 -49
- package/src/components/SwipableMobileCarouselDots/SwipableMobileCarouselDots.tsx +0 -62
- package/src/components/SwipableMobileCarouselDots/__tests__/SwipableMobileCarouselDots.test.tsx +0 -63
- package/src/components/SystemBanner/SystemBanner.module.css +0 -69
- package/src/components/SystemBanner/SystemBanner.stories.tsx +0 -86
- package/src/components/SystemBanner/SystemBanner.tsx +0 -50
- package/src/components/SystemBanner/__tests__/SystemBanner.test.tsx +0 -50
- package/src/components/Table/Table.module.css +0 -45
- package/src/components/Table/Table.stories.tsx +0 -125
- package/src/components/Table/Table.tsx +0 -51
- package/src/components/Table/__tests__/Table.test.tsx +0 -50
- package/src/components/Tabs/Tabs.module.css +0 -56
- package/src/components/Tabs/Tabs.stories.tsx +0 -100
- package/src/components/Tabs/Tabs.tsx +0 -46
- package/src/components/Tabs/__tests__/Tabs.test.tsx +0 -45
- package/src/components/TagInput/TagInput.module.css +0 -141
- package/src/components/TagInput/TagInput.stories.tsx +0 -109
- package/src/components/TagInput/TagInput.tsx +0 -174
- package/src/components/TagInput/__tests__/TagInput.test.tsx +0 -69
- package/src/components/Textarea/Textarea.module.css +0 -39
- package/src/components/Textarea/Textarea.tsx +0 -15
- package/src/components/Textarea/__tests__/Textarea.test.tsx +0 -29
- package/src/components/Toast/Toast.module.css +0 -132
- package/src/components/Toast/Toast.stories.tsx +0 -191
- package/src/components/Toast/Toast.tsx +0 -139
- package/src/components/Toggle/Toggle.module.css +0 -57
- package/src/components/Toggle/Toggle.stories.tsx +0 -95
- package/src/components/Toggle/Toggle.tsx +0 -39
- package/src/components/Toggle/__tests__/Toggle.test.tsx +0 -47
- package/src/components/Tooltip/Tooltip.module.css +0 -56
- package/src/components/Tooltip/Tooltip.tsx +0 -30
- package/src/components/Typography/Typography.module.css +0 -47
- package/src/components/Typography/Typography.stories.tsx +0 -62
- package/src/components/Typography/Typography.tsx +0 -30
- package/src/components/Typography/__tests__/Typography.test.tsx +0 -34
- package/src/css-modules.d.ts +0 -4
- package/src/hooks/__tests__/useCarouselRouteSync.test.tsx +0 -126
- package/src/hooks/__tests__/useDoubleTap.test.tsx +0 -117
- package/src/hooks/__tests__/useIsMobile.test.tsx +0 -80
- package/src/hooks/__tests__/useIsOffline.test.tsx +0 -53
- package/src/hooks/__tests__/useLongPress.test.tsx +0 -158
- package/src/hooks/__tests__/useOfflineTileState.test.tsx +0 -69
- package/src/hooks/__tests__/useResponsiveLayout.test.tsx +0 -87
- package/src/hooks/__tests__/useSnapCarousel.test.tsx +0 -93
- package/src/hooks/__tests__/useSwipeReveal.test.tsx +0 -110
- package/src/hooks/index.ts +0 -24
- package/src/hooks/useCarouselRouteSync.ts +0 -92
- package/src/hooks/useCommitOnEnterOrBlur.ts +0 -39
- package/src/hooks/useDoubleTap.ts +0 -91
- package/src/hooks/useIsMobile.ts +0 -33
- package/src/hooks/useIsOffline.ts +0 -41
- package/src/hooks/useLongPress.ts +0 -185
- package/src/hooks/useOfflineTileState.ts +0 -45
- package/src/hooks/useResponsiveLayout.ts +0 -36
- package/src/hooks/useSnapCarousel.ts +0 -79
- package/src/hooks/useSwipeReveal.ts +0 -107
- package/src/index.ts +0 -251
- package/src/motion.ts +0 -78
- package/src/overlay-shell.ts +0 -94
- package/src/scroll-lock.ts +0 -22
- package/src/stories/Avatar.stories.tsx +0 -44
- package/src/stories/Card.stories.tsx +0 -35
- package/src/stories/Checkbox.stories.tsx +0 -45
- package/src/stories/DesignSystemOverview.stories.tsx +0 -3187
- package/src/stories/DeviceOnlyGate.stories.tsx +0 -35
- package/src/stories/DeviceStorageKeyGate.stories.tsx +0 -57
- package/src/stories/DragHandleRow.stories.tsx +0 -41
- package/src/stories/EmptyState.stories.tsx +0 -33
- package/src/stories/FileDropzone.stories.tsx +0 -69
- package/src/stories/FormField.stories.tsx +0 -47
- package/src/stories/InteractionHooks.stories.tsx +0 -925
- package/src/stories/MobilePatterns.stories.tsx +0 -1536
- package/src/stories/NavTabs.stories.tsx +0 -53
- package/src/stories/OfflineGate.stories.tsx +0 -42
- package/src/stories/PageContainer.stories.tsx +0 -37
- package/src/stories/PageHeader.stories.tsx +0 -42
- package/src/stories/ResponsiveSurface.stories.tsx +0 -47
- package/src/stories/Spinner.stories.tsx +0 -25
- package/src/stories/SwipableMobileCarousel.stories.tsx +0 -304
- package/src/stories/Textarea.stories.tsx +0 -51
- package/src/stories/TokenGallery.stories.tsx +0 -602
- package/src/stories/Tooltip.stories.tsx +0 -59
- package/src/tokens/primitives.css +0 -157
- package/src/tokens/semantic.css +0 -130
- package/src/tokens.css +0 -5
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
.row {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-wrap: wrap;
|
|
4
|
+
gap: var(--sv-space-2);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.swatch {
|
|
8
|
+
width: var(--sv-space-8);
|
|
9
|
+
height: var(--sv-space-8);
|
|
10
|
+
border-radius: var(--sv-radius-md);
|
|
11
|
+
border: 2px solid transparent;
|
|
12
|
+
padding: 0;
|
|
13
|
+
cursor: pointer;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
.swatch:disabled {
|
|
17
|
+
opacity: 0.5;
|
|
18
|
+
cursor: not-allowed;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.swatchSelected {
|
|
22
|
+
border-color: var(--sv-color-accent);
|
|
23
|
+
outline: 2px solid var(--sv-color-focus-ring);
|
|
24
|
+
outline-offset: 1px;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/* Dashed/outlined rather than filled — there's no real color value to paint
|
|
28
|
+
for "no color". */
|
|
29
|
+
.swatchNone {
|
|
30
|
+
display: flex;
|
|
31
|
+
align-items: center;
|
|
32
|
+
justify-content: center;
|
|
33
|
+
background-color: var(--sv-color-surface-sunken);
|
|
34
|
+
border: 2px dashed var(--sv-color-border-strong);
|
|
35
|
+
color: var(--sv-color-text-muted);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
.swatchNone.swatchSelected {
|
|
39
|
+
border-style: solid;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/* Wraps the native color input so a decorative "+" glyph can sit on top of
|
|
43
|
+
it while it's empty (a native `<input type="color">` can't have DOM
|
|
44
|
+
children of its own) and so the same `.swatchSelected` ring used above can
|
|
45
|
+
be applied to the wrapper without fighting the input's own default
|
|
46
|
+
focus/border rendering. */
|
|
47
|
+
.customWrapper {
|
|
48
|
+
position: relative;
|
|
49
|
+
display: inline-flex;
|
|
50
|
+
align-items: center;
|
|
51
|
+
justify-content: center;
|
|
52
|
+
width: var(--sv-space-8);
|
|
53
|
+
height: var(--sv-space-8);
|
|
54
|
+
border-radius: var(--sv-radius-md);
|
|
55
|
+
border: 2px solid transparent;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
.customWrapper.swatchSelected {
|
|
59
|
+
/* Same visual treatment as .swatchSelected, but scoped to the wrapper —
|
|
60
|
+
the input itself is styled borderless below, so this is the only
|
|
61
|
+
border/outline actually rendered for the custom trigger. */
|
|
62
|
+
border-color: var(--sv-color-accent);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/* Before a custom color is actually chosen — same dashed/outlined treatment
|
|
66
|
+
as .swatchNone, since there's equally no real color value to paint yet. */
|
|
67
|
+
.customWrapperEmpty {
|
|
68
|
+
background-color: var(--sv-color-surface-sunken);
|
|
69
|
+
border-style: dashed;
|
|
70
|
+
border-color: var(--sv-color-border-strong);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
/* Reset the native control to a plain color swatch matching the curated
|
|
74
|
+
ones above — browsers default `<input type="color">` to its own chrome
|
|
75
|
+
(a bordered box with visible padding around the swatch). */
|
|
76
|
+
.customInput {
|
|
77
|
+
width: 100%;
|
|
78
|
+
height: 100%;
|
|
79
|
+
padding: 0;
|
|
80
|
+
border: none;
|
|
81
|
+
border-radius: var(--sv-radius-md);
|
|
82
|
+
cursor: pointer;
|
|
83
|
+
background: none;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/* Invisible but still clickable/focusable while empty — the input always
|
|
87
|
+
holds *some* real hex internally (no true empty state), but that value
|
|
88
|
+
was never actually chosen by the user, so it must never render as this
|
|
89
|
+
trigger's own swatch color. Becomes visible again the moment a real
|
|
90
|
+
choice makes it into `value` (`.customWrapperEmpty` stops applying). */
|
|
91
|
+
.customWrapperEmpty .customInput {
|
|
92
|
+
opacity: 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.customInput:disabled {
|
|
96
|
+
opacity: 0.5;
|
|
97
|
+
cursor: not-allowed;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.customWrapperEmpty .customInput:disabled {
|
|
101
|
+
opacity: 0;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
.customInput::-webkit-color-swatch-wrapper {
|
|
105
|
+
padding: 0;
|
|
106
|
+
border-radius: var(--sv-radius-md);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
.customInput::-webkit-color-swatch {
|
|
110
|
+
border: none;
|
|
111
|
+
border-radius: var(--sv-radius-md);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
.customInput::-moz-color-swatch {
|
|
115
|
+
border: none;
|
|
116
|
+
border-radius: var(--sv-radius-md);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
/* `inset: 0` alone doesn't center this — the icon already has an explicit
|
|
120
|
+
width/height (its own size class), so an absolutely positioned box with
|
|
121
|
+
all four insets pinned to 0 resolves against top/left rather than
|
|
122
|
+
stretching to let flex centering do anything, landing the glyph in the
|
|
123
|
+
corner instead of the middle. `top/left: 50%` + `translate(-50%, -50%)`
|
|
124
|
+
centers a fixed-size element regardless of its own dimensions. */
|
|
125
|
+
.customPlusIcon {
|
|
126
|
+
position: absolute;
|
|
127
|
+
top: 50%;
|
|
128
|
+
left: 50%;
|
|
129
|
+
transform: translate(-50%, -50%);
|
|
130
|
+
color: var(--sv-color-text-muted);
|
|
131
|
+
pointer-events: none;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
.swatch:focus-visible,
|
|
135
|
+
.customWrapper:has(.customInput:focus-visible) {
|
|
136
|
+
outline: 2px solid var(--sv-color-focus-ring);
|
|
137
|
+
outline-offset: 2px;
|
|
138
|
+
}
|
package/dist/Combobox.module.css
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
line-height: 1.5;
|
|
16
16
|
color: var(--sv-color-text-primary);
|
|
17
17
|
background-color: var(--sv-color-surface);
|
|
18
|
-
border:
|
|
18
|
+
border: var(--sv-border-width-hairline) solid var(--sv-color-border-strong);
|
|
19
19
|
border-radius: var(--sv-radius-md);
|
|
20
20
|
cursor: pointer;
|
|
21
21
|
transition:
|
|
@@ -61,7 +61,7 @@
|
|
|
61
61
|
flex-shrink: 0;
|
|
62
62
|
width: 100%;
|
|
63
63
|
border: none;
|
|
64
|
-
border-bottom:
|
|
64
|
+
border-bottom: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
65
65
|
background: transparent;
|
|
66
66
|
color: var(--sv-color-text-primary);
|
|
67
67
|
font: inherit;
|
|
@@ -120,3 +120,9 @@
|
|
|
120
120
|
font-size: var(--sv-font-size-sm);
|
|
121
121
|
text-align: center;
|
|
122
122
|
}
|
|
123
|
+
|
|
124
|
+
@media (prefers-reduced-motion: reduce) {
|
|
125
|
+
.trigger {
|
|
126
|
+
transition: none;
|
|
127
|
+
}
|
|
128
|
+
}
|
package/dist/Command.module.css
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
flex-shrink: 0;
|
|
14
14
|
width: 100%;
|
|
15
15
|
border: none;
|
|
16
|
-
border-bottom:
|
|
16
|
+
border-bottom: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
17
17
|
background: transparent;
|
|
18
18
|
color: var(--sv-color-text-primary);
|
|
19
19
|
font: inherit;
|
|
@@ -78,3 +78,9 @@
|
|
|
78
78
|
font-size: var(--sv-font-size-sm);
|
|
79
79
|
text-align: center;
|
|
80
80
|
}
|
|
81
|
+
|
|
82
|
+
.input:focus-visible,
|
|
83
|
+
.item:focus-visible {
|
|
84
|
+
outline: 2px solid var(--sv-color-focus-ring);
|
|
85
|
+
outline-offset: -2px;
|
|
86
|
+
}
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
font-size: var(--sv-font-size-xs);
|
|
42
42
|
color: var(--sv-color-error-text);
|
|
43
43
|
padding: var(--sv-space-2) var(--sv-space-3);
|
|
44
|
-
border:
|
|
44
|
+
border: var(--sv-border-width-hairline) solid var(--sv-color-error-border);
|
|
45
45
|
border-radius: var(--sv-radius-sm);
|
|
46
46
|
background-color: var(--sv-color-error-surface);
|
|
47
47
|
}
|
|
@@ -70,7 +70,7 @@
|
|
|
70
70
|
Button). Matches Button's md padding, updated alongside it (10px,
|
|
71
71
|
36px rendered height). */
|
|
72
72
|
padding: 10px var(--sv-space-4);
|
|
73
|
-
border:
|
|
73
|
+
border: var(--sv-border-width-hairline) solid transparent;
|
|
74
74
|
border-radius: var(--sv-radius-md);
|
|
75
75
|
font-family: var(--sv-font-family);
|
|
76
76
|
font-size: var(--sv-font-size-sm);
|
|
@@ -111,3 +111,9 @@
|
|
|
111
111
|
opacity: 0.5;
|
|
112
112
|
cursor: not-allowed;
|
|
113
113
|
}
|
|
114
|
+
|
|
115
|
+
@media (prefers-reduced-motion: reduce) {
|
|
116
|
+
.destructiveConfirm {
|
|
117
|
+
transition: none;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.root {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
gap: var(--sv-space-2);
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.title {
|
|
8
|
+
font-size: var(--sv-font-size-sm);
|
|
9
|
+
color: var(--sv-color-text-primary);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.description {
|
|
13
|
+
font-size: var(--sv-font-size-sm);
|
|
14
|
+
color: var(--sv-color-text-muted);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
.actions {
|
|
18
|
+
display: flex;
|
|
19
|
+
gap: var(--sv-space-2);
|
|
20
|
+
margin-top: var(--sv-space-1);
|
|
21
|
+
}
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
line-height: 1.5;
|
|
18
18
|
color: var(--sv-color-text-primary);
|
|
19
19
|
background-color: var(--sv-color-surface);
|
|
20
|
-
border:
|
|
20
|
+
border: var(--sv-border-width-hairline) solid var(--sv-color-border-strong);
|
|
21
21
|
border-radius: var(--sv-radius-md);
|
|
22
22
|
cursor: pointer;
|
|
23
23
|
transition:
|
|
@@ -59,3 +59,9 @@
|
|
|
59
59
|
padding: var(--sv-space-4);
|
|
60
60
|
padding-bottom: max(var(--sv-space-4), env(safe-area-inset-bottom));
|
|
61
61
|
}
|
|
62
|
+
|
|
63
|
+
@media (prefers-reduced-motion: reduce) {
|
|
64
|
+
.trigger {
|
|
65
|
+
transition: none;
|
|
66
|
+
}
|
|
67
|
+
}
|
package/dist/Dialog.module.css
CHANGED
|
@@ -1,13 +1,31 @@
|
|
|
1
1
|
/* Dialog — scrim + centered panel. Tokens only (z-index is structural, not a
|
|
2
2
|
* theming value, so it has no token).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* fixed
|
|
9
|
-
*
|
|
10
|
-
*
|
|
4
|
+
* `sm`/`md` are a fixed WIDTH but a content-driven height, capped at a
|
|
5
|
+
* per-size max-height: the panel grows to fit its content and shrinks when
|
|
6
|
+
* content is sparse, only hitting the cap (and scrolling internally, inside
|
|
7
|
+
* `.content`) once content actually exceeds it. Before this, height was
|
|
8
|
+
* fixed too, which left short-content consumers (e.g. a two-field form in
|
|
9
|
+
* the Console) looking like a near-empty
|
|
10
|
+
* skeleton — see docs/architecture-rules.md. `auto` goes further — content-
|
|
11
|
+
* driven on BOTH width and height, each independently capped rather than
|
|
12
|
+
* either being fixed — for content whose natural footprint varies enough
|
|
13
|
+
* (a card detail modal with an optional checklist/comments section) that a
|
|
14
|
+
* single fixed width doesn't fit it well either short or long. `lg` is a
|
|
15
|
+
* true fixed box (100%/100% of the scrim's available area) — no current
|
|
16
|
+
* overlay-shell plugin renders into it (Console did until workstream 0022
|
|
17
|
+
* moved it to `shell: "default"`; Account never resized off `overlaySize:
|
|
18
|
+
* "lg"`'s original default until epic task 14.5, see `fixed` below).
|
|
19
|
+
* `fixed` (named after its own behavior, not after this file's always-
|
|
20
|
+
* applied `.panel` wrapper class below) is also a true fixed box, width
|
|
21
|
+
* AND height both set — same "content never resizes it" guarantee as `lg`
|
|
22
|
+
* — but capped rather than filling the viewport, for a plugin whose
|
|
23
|
+
* settings-panel-shaped content doesn't warrant `lg`'s full-screen footprint
|
|
24
|
+
* (Account's own case, epic task 14.5 round 3). The close button stays
|
|
25
|
+
* pinned top-right regardless. The scrim's padding is the fixed margin
|
|
26
|
+
* `lg`/`fixed` leave around the viewport; `sm`/`md`/`auto` are centered and
|
|
27
|
+
* cap to that available space on short screens too. On mobile every size
|
|
28
|
+
* becomes a full-screen sheet.
|
|
11
29
|
*
|
|
12
30
|
* `--sv-dialog-inset-left` lets a host inset the scrim past a fixed left nav
|
|
13
31
|
* rail (e.g. the platform sidebar) so the overlay's left margin is measured
|
|
@@ -50,7 +68,7 @@
|
|
|
50
68
|
overflow: hidden;
|
|
51
69
|
background: var(--sv-color-surface-raised);
|
|
52
70
|
color: var(--sv-color-text-primary);
|
|
53
|
-
border:
|
|
71
|
+
border: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
54
72
|
border-radius: var(--sv-radius-lg);
|
|
55
73
|
box-shadow: var(--sv-shadow-overlay);
|
|
56
74
|
/* Desktop entrance: fade + gentle scale-up. Same two-phase-mount pattern as
|
|
@@ -86,7 +104,21 @@
|
|
|
86
104
|
flex: 1 1 auto;
|
|
87
105
|
overflow-y: auto;
|
|
88
106
|
overflow-x: hidden;
|
|
107
|
+
/* Same slim, token-colored scrollbar as `ScrollArea`/`MessageScroller` —
|
|
108
|
+
without this, a `sm`/`md` dialog whose content exceeds its max-height
|
|
109
|
+
cap (e.g. on a short viewport where the cap itself shrinks to fit) gets
|
|
110
|
+
the browser's default OS scrollbar, which on non-overlay-scrollbar
|
|
111
|
+
platforms is wide enough to visually cut into `.panel`'s rounded
|
|
112
|
+
corner right where `.content` starts, reading as a layout bug rather
|
|
113
|
+
than an intentional scroll affordance. */
|
|
114
|
+
scrollbar-width: thin;
|
|
115
|
+
scrollbar-color: var(--sv-color-border-strong) transparent;
|
|
89
116
|
padding: var(--sv-space-6);
|
|
117
|
+
/* This region already supplies the page gutter, so a PageContainer rendered
|
|
118
|
+
inside it stands its own down (see PageContainer.module.css). Without
|
|
119
|
+
this, an overlay plugin — one page tree rendered into both the Dialog and
|
|
120
|
+
the full-page shell fallback — would be padded twice here. */
|
|
121
|
+
--sv-page-gutter: 0px;
|
|
90
122
|
/* Disable elastic overscroll within the dialog: `none` stops both scroll-
|
|
91
123
|
chaining to the parent and the iOS rubber-band bounce inside the panel.
|
|
92
124
|
`contain` only prevents chaining — the panel itself still bounces, which
|
|
@@ -96,33 +128,94 @@
|
|
|
96
128
|
overscroll-behavior: none;
|
|
97
129
|
}
|
|
98
130
|
|
|
99
|
-
|
|
100
|
-
|
|
131
|
+
.content::-webkit-scrollbar {
|
|
132
|
+
width: 8px;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.content::-webkit-scrollbar-track {
|
|
136
|
+
background: transparent;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.content::-webkit-scrollbar-thumb {
|
|
140
|
+
background: var(--sv-color-border-strong);
|
|
141
|
+
border-radius: var(--sv-radius-full);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/* `sm`/`md`: fixed width, content-driven height up to the size's own cap
|
|
145
|
+
* (28rem/42rem — the box's old fixed heights, now a ceiling rather than a
|
|
146
|
+
* floor). `min(<cap>, 100%)` also still caps to the scrim's content box
|
|
147
|
+
* (viewport minus margin) so a size never overflows a short viewport. No
|
|
148
|
+
* explicit `height` — the panel's flex column sizes to `.content`'s natural
|
|
149
|
+
* height on its own; see the file-level comment above. */
|
|
101
150
|
.sm {
|
|
102
151
|
width: 24rem;
|
|
103
|
-
height: 28rem;
|
|
104
152
|
max-width: 100%;
|
|
105
|
-
max-height: 100
|
|
153
|
+
max-height: min(28rem, 100%);
|
|
106
154
|
}
|
|
107
155
|
|
|
108
156
|
.md {
|
|
109
157
|
width: 36rem;
|
|
110
|
-
height: 42rem;
|
|
111
158
|
max-width: 100%;
|
|
112
|
-
max-height: 100
|
|
159
|
+
max-height: min(42rem, 100%);
|
|
113
160
|
}
|
|
114
161
|
|
|
115
|
-
|
|
116
|
-
|
|
162
|
+
/* Content-driven on both axes, unlike `sm`/`md` (width fixed, only height
|
|
163
|
+
* content-driven) — for a dialog whose natural footprint varies a lot (a
|
|
164
|
+
* card detail modal with labels/due-date/assignees/description/checklist/
|
|
165
|
+
* comments, the case that originally motivated the now-removed `xl` size
|
|
166
|
+
* this replaces). `width: fit-content` shrink-wraps to the panel's own
|
|
167
|
+
* content (bounded by min/max-width below) the same way a flex item
|
|
168
|
+
* centered in `.scrim` naturally would with no explicit `width` at all —
|
|
169
|
+
* `min-width` just keeps sparse content (e.g. a short message) from reading
|
|
170
|
+
* as an oddly narrow sliver. Caps chosen to span roughly what `sm`/`xl`
|
|
171
|
+
* used to cover between them. */
|
|
172
|
+
.auto {
|
|
173
|
+
width: fit-content;
|
|
174
|
+
min-width: min(24rem, 100%);
|
|
175
|
+
max-width: min(48rem, 100%);
|
|
176
|
+
max-height: min(48rem, 100%);
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/* `lg`: a true fixed box, unaffected by the above — see the file-level
|
|
180
|
+
* comment. */
|
|
181
|
+
.lg {
|
|
117
182
|
width: 100%;
|
|
118
183
|
height: 100%;
|
|
119
184
|
}
|
|
120
185
|
|
|
186
|
+
/* `fixed`: also a true fixed box (width AND height both set, like `lg`) but
|
|
187
|
+
* capped rather than filling the viewport — see the file-level comment.
|
|
188
|
+
* Named distinctly from the dialog's own always-applied `.panel` wrapper
|
|
189
|
+
* class above (every size gets `styles.panel` + `styles[size]` together —
|
|
190
|
+
* see Dialog.tsx) to avoid colliding with it. `max-width`/`max-height` are
|
|
191
|
+
* still needed despite `width`/`height` being fixed rem values, exactly
|
|
192
|
+
* like `sm`/`md`'s own `max-width: 100%` — a short or narrow viewport (a
|
|
193
|
+
* resized desktop window, not yet at the mobile breakpoint) must still be
|
|
194
|
+
* able to shrink this below its rem values instead of overflowing the
|
|
195
|
+
* scrim. */
|
|
196
|
+
.fixed {
|
|
197
|
+
width: 64rem;
|
|
198
|
+
max-width: 100%;
|
|
199
|
+
height: 44rem;
|
|
200
|
+
max-height: 100%;
|
|
201
|
+
}
|
|
202
|
+
|
|
121
203
|
.close {
|
|
122
204
|
position: absolute;
|
|
123
205
|
top: var(--sv-space-3);
|
|
124
206
|
right: var(--sv-space-3);
|
|
125
|
-
|
|
207
|
+
/* 2, not 1: a plugin's own sticky in-body header (e.g. a card detail
|
|
208
|
+
modal's title row) needs to paint above ordinary scrolling content, so
|
|
209
|
+
it sits at z-index: 1 — if `.close` also sat at 1, tree order would
|
|
210
|
+
decide the tie, and `.close` (rendered earlier in this component's own
|
|
211
|
+
JSX, before `.content` and everything a plugin nests inside it) would
|
|
212
|
+
lose to the plugin's later-in-tree header, disappearing underneath it
|
|
213
|
+
once they overlap on scroll. 2 keeps `.close` unambiguously on top
|
|
214
|
+
without relying on a tie-break plugin authors have no visibility into.
|
|
215
|
+
Found live in `sovereign-plugin-kanban`'s card detail modal — see that
|
|
216
|
+
repo's `kanban.module.css` `.cardHeader` comment for the matching half
|
|
217
|
+
of this fix and the Popover-stacking bug that motivated it. */
|
|
218
|
+
z-index: 2;
|
|
126
219
|
display: inline-flex;
|
|
127
220
|
align-items: center;
|
|
128
221
|
justify-content: center;
|
|
@@ -132,8 +225,6 @@
|
|
|
132
225
|
border-radius: var(--sv-radius-md);
|
|
133
226
|
background: transparent;
|
|
134
227
|
color: var(--sv-color-text-muted);
|
|
135
|
-
font-size: var(--sv-font-size-xl);
|
|
136
|
-
line-height: 1;
|
|
137
228
|
cursor: pointer;
|
|
138
229
|
}
|
|
139
230
|
|
|
@@ -151,11 +242,27 @@
|
|
|
151
242
|
|
|
152
243
|
/* Hidden on desktop; shown only on mobile where it replaces the close button.
|
|
153
244
|
* OverlayHeader owns its own background/border/padding — this wrapper class
|
|
154
|
-
* only toggles visibility per breakpoint.
|
|
245
|
+
* only toggles visibility per breakpoint. Not used at all when the `header`
|
|
246
|
+
* prop is active — that OverlayHeader instance renders with no wrapper
|
|
247
|
+
* class, so it shows unconditionally on both breakpoints (see Dialog.tsx). */
|
|
155
248
|
.mobileHeader {
|
|
156
249
|
display: none;
|
|
157
250
|
}
|
|
158
251
|
|
|
252
|
+
/* The optional `footer` prop's row — shown on both desktop and mobile (no
|
|
253
|
+
* breakpoint gating, unlike `.mobileHeader`), a flex sibling after `.content`
|
|
254
|
+
* so it never scrolls, mirroring OverlayHeader's own `.header`/`.row`
|
|
255
|
+
* treatment (border on the opposite edge, same padding scale) so header and
|
|
256
|
+
* footer read as a matched pair when both are present. Layout-agnostic
|
|
257
|
+
* beyond that — the footer's own content decides its internal arrangement
|
|
258
|
+
* (e.g. a flex row with `justify-content: flex-end` for action buttons). */
|
|
259
|
+
.footer {
|
|
260
|
+
flex-shrink: 0;
|
|
261
|
+
background: var(--sv-color-surface);
|
|
262
|
+
border-top: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
263
|
+
padding: var(--sv-space-3) var(--sv-space-4);
|
|
264
|
+
}
|
|
265
|
+
|
|
159
266
|
/* Mobile: full-screen sheet (RFC 0001 §3, breakpoint unified to 768px per
|
|
160
267
|
* RFC 0013). Every size fills the scrim's available area (which is already
|
|
161
268
|
* inset from the top by --sv-dialog-inset-top when a fixed header is shown).
|
|
@@ -177,9 +284,11 @@
|
|
|
177
284
|
.sm,
|
|
178
285
|
.md,
|
|
179
286
|
.lg,
|
|
180
|
-
.
|
|
287
|
+
.auto,
|
|
288
|
+
.fixed {
|
|
181
289
|
width: 100%;
|
|
182
290
|
height: 100%;
|
|
291
|
+
min-width: 0;
|
|
183
292
|
max-width: none;
|
|
184
293
|
max-height: none;
|
|
185
294
|
border: none;
|
package/dist/Drawer.module.css
CHANGED
|
@@ -7,8 +7,10 @@
|
|
|
7
7
|
.scrim {
|
|
8
8
|
position: fixed;
|
|
9
9
|
inset: 0;
|
|
10
|
-
/* When
|
|
11
|
-
|
|
10
|
+
/* When --sv-shell-footer-height is set (mobile nav bar — by the platform
|
|
11
|
+
shell, or by a self-rendered MobileFooter via usePublishShellChromeHeight
|
|
12
|
+
for a shellConfig.mobileFooter: false plugin), stop the scrim above the
|
|
13
|
+
footer so the panel never hides behind it. */
|
|
12
14
|
bottom: var(--sv-shell-footer-height, 0);
|
|
13
15
|
z-index: 100;
|
|
14
16
|
display: flex;
|
|
@@ -27,14 +29,21 @@
|
|
|
27
29
|
.panel {
|
|
28
30
|
width: 100%;
|
|
29
31
|
max-height: 80dvh;
|
|
30
|
-
|
|
31
|
-
|
|
32
|
+
/* The panel itself no longer scrolls — see .body below. display: flex
|
|
33
|
+
(column) lets .handle (and OverlayHeader, when title is set) stay
|
|
34
|
+
fixed while .body's own overflow-y handles content taller than the
|
|
35
|
+
80dvh cap, the same fixed-header/scrollable-body split Sheet.module.css
|
|
36
|
+
already establishes (its .panel/.content pair). Before this, the whole
|
|
37
|
+
.panel scrolled as one block, so a tall drawer (e.g. many installed
|
|
38
|
+
plugins in the Apps grid) scrolled the grab handle itself out of view
|
|
39
|
+
along with the content — reachable in the DOM, invisible on screen. */
|
|
40
|
+
display: flex;
|
|
41
|
+
flex-direction: column;
|
|
42
|
+
overflow: hidden;
|
|
32
43
|
background: var(--sv-color-surface-raised);
|
|
33
|
-
border-top:
|
|
44
|
+
border-top: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
34
45
|
border-radius: var(--sv-radius-3xl) var(--sv-radius-3xl) 0 0;
|
|
35
46
|
box-shadow: var(--sv-shadow-overlay);
|
|
36
|
-
/* Pull content above the home indicator / bottom bar in standalone mode. */
|
|
37
|
-
padding-bottom: env(safe-area-inset-bottom);
|
|
38
47
|
outline: none;
|
|
39
48
|
/* Slide up from below the viewport. Always a bottom sheet, so unlike Dialog
|
|
40
49
|
there's no desktop-vs-mobile fork here. */
|
|
@@ -42,6 +51,26 @@
|
|
|
42
51
|
transition: transform var(--sv-motion-duration-base) var(--sv-motion-ease-out);
|
|
43
52
|
}
|
|
44
53
|
|
|
54
|
+
/* The scroll container — everything below the fixed handle/OverlayHeader.
|
|
55
|
+
Scrollbar hidden (not overflow removed) the same way Tabs.module.css's
|
|
56
|
+
.tablist already does for this design system; scroll-driven UI here reads
|
|
57
|
+
as a native swipe list, not a document needing a visible scroll affordance. */
|
|
58
|
+
.body {
|
|
59
|
+
flex: 1 1 auto;
|
|
60
|
+
min-height: 0;
|
|
61
|
+
overflow-y: auto;
|
|
62
|
+
overscroll-behavior: contain;
|
|
63
|
+
scrollbar-width: none;
|
|
64
|
+
/* Pull content above the home indicator / bottom bar in standalone mode —
|
|
65
|
+
moved here from .panel now that this is the element whose bottom edge
|
|
66
|
+
is the actual scrollable content boundary. */
|
|
67
|
+
padding-bottom: env(safe-area-inset-bottom);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
.body::-webkit-scrollbar {
|
|
71
|
+
display: none;
|
|
72
|
+
}
|
|
73
|
+
|
|
45
74
|
.panelOpen {
|
|
46
75
|
transform: translateY(0);
|
|
47
76
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
.dropzone {
|
|
2
|
+
position: relative;
|
|
2
3
|
display: flex;
|
|
3
4
|
align-items: center;
|
|
4
5
|
gap: var(--sv-space-4);
|
|
@@ -58,6 +59,29 @@
|
|
|
58
59
|
color: var(--sv-color-text-muted);
|
|
59
60
|
}
|
|
60
61
|
|
|
62
|
+
/* Hidden to the eye and not to the keyboard: `display: none` would take the input out of the tab order, and the dropzone with
|
|
63
|
+
it. The label around it is the visible control, and shows the focus ring above. */
|
|
61
64
|
.hiddenInput {
|
|
62
|
-
|
|
65
|
+
position: absolute;
|
|
66
|
+
width: 1px;
|
|
67
|
+
height: 1px;
|
|
68
|
+
margin: -1px;
|
|
69
|
+
padding: 0;
|
|
70
|
+
overflow: hidden;
|
|
71
|
+
clip-path: inset(50%);
|
|
72
|
+
white-space: nowrap;
|
|
73
|
+
border: 0;
|
|
74
|
+
opacity: 0;
|
|
75
|
+
pointer-events: none;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
.dropzone:has(.hiddenInput:focus-visible) {
|
|
79
|
+
outline: 2px solid var(--sv-color-focus-ring);
|
|
80
|
+
outline-offset: 2px;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
@media (prefers-reduced-motion: reduce) {
|
|
84
|
+
.dropzone {
|
|
85
|
+
transition: none;
|
|
86
|
+
}
|
|
63
87
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
.header {
|
|
2
|
+
display: flex;
|
|
3
|
+
align-items: center;
|
|
4
|
+
justify-content: space-between;
|
|
5
|
+
min-height: 48px;
|
|
6
|
+
padding: var(--sv-space-2) var(--sv-space-4);
|
|
7
|
+
border-bottom: var(--sv-border-width-hairline) solid var(--sv-color-border);
|
|
8
|
+
background-color: var(--sv-color-surface);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
.left {
|
|
12
|
+
display: flex;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: var(--sv-space-2);
|
|
15
|
+
min-width: 0;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.right {
|
|
19
|
+
display: flex;
|
|
20
|
+
align-items: center;
|
|
21
|
+
gap: var(--sv-space-1);
|
|
22
|
+
flex-shrink: 0;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
.brandBadge {
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-content: center;
|
|
29
|
+
flex-shrink: 0;
|
|
30
|
+
width: 28px;
|
|
31
|
+
height: 28px;
|
|
32
|
+
border-radius: var(--sv-radius-md);
|
|
33
|
+
background-color: var(--sv-color-accent);
|
|
34
|
+
color: var(--sv-color-text-on-accent);
|
|
35
|
+
font-size: var(--sv-font-size-xs);
|
|
36
|
+
font-weight: var(--sv-font-weight-semibold);
|
|
37
|
+
text-decoration: none;
|
|
38
|
+
overflow: hidden;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
.brandLogoImg {
|
|
42
|
+
width: 100%;
|
|
43
|
+
height: 100%;
|
|
44
|
+
object-fit: cover;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
.plugin {
|
|
48
|
+
display: flex;
|
|
49
|
+
align-items: center;
|
|
50
|
+
gap: var(--sv-space-1);
|
|
51
|
+
min-width: 0;
|
|
52
|
+
text-decoration: none;
|
|
53
|
+
color: var(--sv-color-text-primary);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.pluginName {
|
|
57
|
+
font-size: var(--sv-font-size-md);
|
|
58
|
+
font-weight: var(--sv-font-weight-semibold);
|
|
59
|
+
overflow: hidden;
|
|
60
|
+
text-overflow: ellipsis;
|
|
61
|
+
white-space: nowrap;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.brandBadge:focus-visible,
|
|
65
|
+
.plugin:focus-visible {
|
|
66
|
+
outline: 2px solid var(--sv-color-focus-ring);
|
|
67
|
+
outline-offset: 2px;
|
|
68
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.shell {
|
|
2
|
+
display: flex;
|
|
3
|
+
flex-direction: column;
|
|
4
|
+
height: 100%;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
.header {
|
|
8
|
+
flex-shrink: 0;
|
|
9
|
+
overflow: hidden;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
.main {
|
|
13
|
+
flex: 1;
|
|
14
|
+
min-height: 0;
|
|
15
|
+
overflow-y: auto;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
.footer {
|
|
19
|
+
flex-shrink: 0;
|
|
20
|
+
overflow: hidden;
|
|
21
|
+
}
|