@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
|
@@ -1,602 +0,0 @@
|
|
|
1
|
-
import { useEffect, useRef, useState } from 'react';
|
|
2
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
3
|
-
|
|
4
|
-
// ---------------------------------------------------------------------------
|
|
5
|
-
// Token Gallery — live rendering of every CSS custom property tier.
|
|
6
|
-
// Values are read from the computed style at render time so they always
|
|
7
|
-
// reflect the actual loaded CSS, not a hardcoded snapshot. Toggle dark mode
|
|
8
|
-
// via the Themes toolbar to compare both theme values side-by-side.
|
|
9
|
-
// ---------------------------------------------------------------------------
|
|
10
|
-
|
|
11
|
-
const SEMANTIC_COLORS = [
|
|
12
|
-
'--sv-color-surface',
|
|
13
|
-
'--sv-color-surface-sunken',
|
|
14
|
-
'--sv-color-surface-raised',
|
|
15
|
-
'--sv-color-text-primary',
|
|
16
|
-
'--sv-color-text-muted',
|
|
17
|
-
'--sv-color-text-subtle',
|
|
18
|
-
'--sv-color-text-on-accent',
|
|
19
|
-
'--sv-color-border',
|
|
20
|
-
'--sv-color-border-strong',
|
|
21
|
-
'--sv-color-accent',
|
|
22
|
-
'--sv-color-accent-hover',
|
|
23
|
-
'--sv-color-accent-subtle',
|
|
24
|
-
'--sv-color-focus-ring',
|
|
25
|
-
'--sv-color-error-surface',
|
|
26
|
-
'--sv-color-error-text',
|
|
27
|
-
'--sv-color-error-border',
|
|
28
|
-
'--sv-color-error-solid',
|
|
29
|
-
'--sv-color-warning-surface',
|
|
30
|
-
'--sv-color-warning-text',
|
|
31
|
-
'--sv-color-warning-border',
|
|
32
|
-
'--sv-color-success-surface',
|
|
33
|
-
'--sv-color-success-text',
|
|
34
|
-
'--sv-color-success-border',
|
|
35
|
-
'--sv-color-success-solid',
|
|
36
|
-
'--sv-color-text-on-error',
|
|
37
|
-
'--sv-color-text-on-success',
|
|
38
|
-
'--sv-color-info-surface',
|
|
39
|
-
'--sv-color-info-text',
|
|
40
|
-
'--sv-color-info-border',
|
|
41
|
-
'--sv-color-scrim',
|
|
42
|
-
];
|
|
43
|
-
|
|
44
|
-
const SPACE_TOKENS = [
|
|
45
|
-
'--sv-space-1',
|
|
46
|
-
'--sv-space-2',
|
|
47
|
-
'--sv-space-3',
|
|
48
|
-
'--sv-space-4',
|
|
49
|
-
'--sv-space-5',
|
|
50
|
-
'--sv-space-6',
|
|
51
|
-
'--sv-space-8',
|
|
52
|
-
'--sv-space-10',
|
|
53
|
-
'--sv-space-12',
|
|
54
|
-
'--sv-space-16',
|
|
55
|
-
];
|
|
56
|
-
|
|
57
|
-
const RADIUS_TOKENS = [
|
|
58
|
-
'--sv-radius-sm',
|
|
59
|
-
'--sv-radius-md',
|
|
60
|
-
'--sv-radius-lg',
|
|
61
|
-
'--sv-radius-xl',
|
|
62
|
-
'--sv-radius-2xl',
|
|
63
|
-
'--sv-radius-3xl',
|
|
64
|
-
'--sv-radius-full',
|
|
65
|
-
];
|
|
66
|
-
// RFC 0077 — instance corner-radius presets. Base px values mirror
|
|
67
|
-
// primitives.css's own comments (sm 6px, md 8px, xl 12px at scale 1).
|
|
68
|
-
//
|
|
69
|
-
// Each swatch's radius is computed here in JS rather than by overriding
|
|
70
|
-
// --sv-radius-scale on a local wrapper and letting --sv-radius-md etc.
|
|
71
|
-
// recompute from it. That would be the more elegant approach, but CSS custom
|
|
72
|
-
// properties don't support it: a custom property that references another
|
|
73
|
-
// custom property inside calc() (--sv-radius-md: calc(var(--sv-radius-scale)
|
|
74
|
-
// * 0.5rem)) has that inner reference resolved once, at the element where
|
|
75
|
-
// --sv-radius-md itself is *declared* (:root in primitives.css) — not at
|
|
76
|
-
// wherever it's later consumed via var(). A descendant overriding
|
|
77
|
-
// --sv-radius-scale doesn't reach back and change --sv-radius-md's
|
|
78
|
-
// already-fixed value (confirmed empirically — this isn't a guess). The
|
|
79
|
-
// production mechanism (instance-provider.tsx) still works fine: its
|
|
80
|
-
// override is injected as another :root { } rule, the *same* cascade node
|
|
81
|
-
// primitives.css declares --sv-radius-md at, not a descendant — but a
|
|
82
|
-
// side-by-side, multi-preset comparison on one page has no such single
|
|
83
|
-
// :root to share, so the swatches below compute the resulting px directly.
|
|
84
|
-
const RADIUS_PRESETS = [
|
|
85
|
-
{ preset: 'none', scale: 0 },
|
|
86
|
-
{ preset: 'xs', scale: 0.35 },
|
|
87
|
-
{ preset: 's', scale: 0.65 },
|
|
88
|
-
{ preset: 'm', scale: 1 },
|
|
89
|
-
{ preset: 'l', scale: 2.75 },
|
|
90
|
-
] as const;
|
|
91
|
-
|
|
92
|
-
const RADIUS_BASE_PX = { sm: 6, md: 8, xl: 12 };
|
|
93
|
-
|
|
94
|
-
const ICON_SIZE_TOKENS = [
|
|
95
|
-
'--sv-icon-size-xs',
|
|
96
|
-
'--sv-icon-size-sm',
|
|
97
|
-
'--sv-icon-size-md',
|
|
98
|
-
'--sv-icon-size-lg',
|
|
99
|
-
];
|
|
100
|
-
|
|
101
|
-
const FONT_SIZE_TOKENS = [
|
|
102
|
-
'--sv-font-size-label',
|
|
103
|
-
'--sv-font-size-xs',
|
|
104
|
-
'--sv-font-size-caption',
|
|
105
|
-
'--sv-font-size-sm',
|
|
106
|
-
'--sv-font-size-md',
|
|
107
|
-
'--sv-font-size-lg',
|
|
108
|
-
'--sv-font-size-xl',
|
|
109
|
-
'--sv-font-size-2xl',
|
|
110
|
-
];
|
|
111
|
-
|
|
112
|
-
// Task 10.2 — in-app text-size control. --sv-text-size-scale is theme-stable
|
|
113
|
-
// like --sv-radius-scale, but unlike radius (a calc() chain resolved once at
|
|
114
|
-
// :root's declaration site — see the RADIUS_PRESETS comment below), rem units
|
|
115
|
-
// genuinely re-resolve against the root element's live computed font-size, so
|
|
116
|
-
// these swatches compute the result directly in JS rather than needing a real
|
|
117
|
-
// [data-text-size] toggle on the document root.
|
|
118
|
-
const TEXT_SIZE_PRESETS = [
|
|
119
|
-
{ preset: 'default', scale: 1 },
|
|
120
|
-
{ preset: 'large', scale: 1.125 },
|
|
121
|
-
{ preset: 'larger', scale: 1.25 },
|
|
122
|
-
] as const;
|
|
123
|
-
|
|
124
|
-
const TEXT_SIZE_BASE_PX = { md: 16, lg: 18, '2xl': 24 };
|
|
125
|
-
|
|
126
|
-
const FONT_WEIGHT_TOKENS = [
|
|
127
|
-
'--sv-font-weight-normal',
|
|
128
|
-
'--sv-font-weight-medium',
|
|
129
|
-
'--sv-font-weight-semibold',
|
|
130
|
-
'--sv-font-weight-bold',
|
|
131
|
-
];
|
|
132
|
-
|
|
133
|
-
const SHADOW_TOKENS = [
|
|
134
|
-
'--sv-shadow-card',
|
|
135
|
-
'--sv-shadow-hover',
|
|
136
|
-
'--sv-shadow-popover',
|
|
137
|
-
'--sv-shadow-overlay',
|
|
138
|
-
'--sv-shadow-control',
|
|
139
|
-
];
|
|
140
|
-
|
|
141
|
-
// Realistic duration+easing pairings, not every combination — matches how
|
|
142
|
-
// Dialog/Drawer actually use these tokens (see motion.ts).
|
|
143
|
-
const MOTION_PAIRS: { durationToken: string; easeToken: string; use: string }[] = [
|
|
144
|
-
{
|
|
145
|
-
durationToken: '--sv-motion-duration-fast',
|
|
146
|
-
easeToken: '--sv-motion-ease-out',
|
|
147
|
-
use: 'micro-interaction',
|
|
148
|
-
},
|
|
149
|
-
{
|
|
150
|
-
durationToken: '--sv-motion-duration-base',
|
|
151
|
-
easeToken: '--sv-motion-ease-out',
|
|
152
|
-
use: 'Dialog / Drawer entrance',
|
|
153
|
-
},
|
|
154
|
-
{
|
|
155
|
-
durationToken: '--sv-motion-duration-slow',
|
|
156
|
-
easeToken: '--sv-motion-ease-in-out',
|
|
157
|
-
use: 'larger surface / longer travel',
|
|
158
|
-
},
|
|
159
|
-
{
|
|
160
|
-
durationToken: '--sv-motion-duration-base',
|
|
161
|
-
easeToken: '--sv-motion-ease-spring',
|
|
162
|
-
use: 'emphasis (use sparingly)',
|
|
163
|
-
},
|
|
164
|
-
];
|
|
165
|
-
|
|
166
|
-
// ---------------------------------------------------------------------------
|
|
167
|
-
|
|
168
|
-
const row: React.CSSProperties = {
|
|
169
|
-
display: 'flex',
|
|
170
|
-
alignItems: 'center',
|
|
171
|
-
gap: '12px',
|
|
172
|
-
padding: '6px 0',
|
|
173
|
-
borderBottom: '1px solid var(--sv-color-border)',
|
|
174
|
-
};
|
|
175
|
-
|
|
176
|
-
const label: React.CSSProperties = {
|
|
177
|
-
fontFamily: 'monospace',
|
|
178
|
-
fontSize: '13px',
|
|
179
|
-
color: 'var(--sv-color-text-primary)',
|
|
180
|
-
minWidth: '300px',
|
|
181
|
-
};
|
|
182
|
-
|
|
183
|
-
const value: React.CSSProperties = {
|
|
184
|
-
fontFamily: 'monospace',
|
|
185
|
-
fontSize: '12px',
|
|
186
|
-
color: 'var(--sv-color-text-muted)',
|
|
187
|
-
flex: 1,
|
|
188
|
-
};
|
|
189
|
-
|
|
190
|
-
// ---------------------------------------------------------------------------
|
|
191
|
-
|
|
192
|
-
function ColorRow({ token }: { token: string }) {
|
|
193
|
-
const computed =
|
|
194
|
-
typeof window !== 'undefined'
|
|
195
|
-
? getComputedStyle(document.documentElement).getPropertyValue(token).trim()
|
|
196
|
-
: '';
|
|
197
|
-
const swatch: React.CSSProperties = {
|
|
198
|
-
width: 28,
|
|
199
|
-
height: 28,
|
|
200
|
-
borderRadius: 4,
|
|
201
|
-
background: `var(${token})`,
|
|
202
|
-
border: '1px solid var(--sv-color-border)',
|
|
203
|
-
flexShrink: 0,
|
|
204
|
-
};
|
|
205
|
-
return (
|
|
206
|
-
<div style={row}>
|
|
207
|
-
<div style={swatch} />
|
|
208
|
-
<span style={label}>{token}</span>
|
|
209
|
-
<span style={value}>{computed}</span>
|
|
210
|
-
</div>
|
|
211
|
-
);
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
function ScaleRow({
|
|
215
|
-
token,
|
|
216
|
-
renderPreview,
|
|
217
|
-
}: {
|
|
218
|
-
token: string;
|
|
219
|
-
renderPreview: (v: string) => React.ReactNode;
|
|
220
|
-
}) {
|
|
221
|
-
const computed =
|
|
222
|
-
typeof window !== 'undefined'
|
|
223
|
-
? getComputedStyle(document.documentElement).getPropertyValue(token).trim()
|
|
224
|
-
: '';
|
|
225
|
-
return (
|
|
226
|
-
<div style={row}>
|
|
227
|
-
{renderPreview(computed)}
|
|
228
|
-
<span style={label}>{token}</span>
|
|
229
|
-
<span style={value}>{computed}</span>
|
|
230
|
-
</div>
|
|
231
|
-
);
|
|
232
|
-
}
|
|
233
|
-
|
|
234
|
-
// Radius tokens are calc() expressions since RFC 0077 (proportional to
|
|
235
|
-
// --sv-radius-scale) — reading the raw custom property text now shows the
|
|
236
|
-
// unresolved formula (e.g. "calc(1 * 0.375rem)"), not a pixel value. Render
|
|
237
|
-
// the swatch, then read the browser's own computed border-radius off it
|
|
238
|
-
// (a real CSS property, so calc() is fully resolved) instead of ScaleRow's
|
|
239
|
-
// getPropertyValue text read.
|
|
240
|
-
function RadiusScaleRow({ token }: { token: string }) {
|
|
241
|
-
const ref = useRef<HTMLDivElement>(null);
|
|
242
|
-
const [resolved, setResolved] = useState('');
|
|
243
|
-
useEffect(() => {
|
|
244
|
-
if (ref.current) setResolved(getComputedStyle(ref.current).borderRadius);
|
|
245
|
-
}, []);
|
|
246
|
-
return (
|
|
247
|
-
<div style={row}>
|
|
248
|
-
<div
|
|
249
|
-
ref={ref}
|
|
250
|
-
style={{
|
|
251
|
-
width: 40,
|
|
252
|
-
height: 24,
|
|
253
|
-
background: 'var(--sv-color-accent)',
|
|
254
|
-
borderRadius: `var(${token})`,
|
|
255
|
-
flexShrink: 0,
|
|
256
|
-
}}
|
|
257
|
-
/>
|
|
258
|
-
<span style={label}>{token}</span>
|
|
259
|
-
<span style={value}>{resolved}</span>
|
|
260
|
-
</div>
|
|
261
|
-
);
|
|
262
|
-
}
|
|
263
|
-
|
|
264
|
-
function TextSizePresetRow({ preset, scale }: { preset: string; scale: number }) {
|
|
265
|
-
return (
|
|
266
|
-
<div style={row}>
|
|
267
|
-
<div style={{ display: 'flex', gap: 12, alignItems: 'baseline', flexShrink: 0, width: 180 }}>
|
|
268
|
-
<span
|
|
269
|
-
style={{
|
|
270
|
-
fontSize: `${scale * TEXT_SIZE_BASE_PX.md}px`,
|
|
271
|
-
color: 'var(--sv-color-text-primary)',
|
|
272
|
-
}}
|
|
273
|
-
title="body (--sv-font-size-md)"
|
|
274
|
-
>
|
|
275
|
-
Aa
|
|
276
|
-
</span>
|
|
277
|
-
<span
|
|
278
|
-
style={{
|
|
279
|
-
fontSize: `${scale * TEXT_SIZE_BASE_PX.lg}px`,
|
|
280
|
-
color: 'var(--sv-color-text-primary)',
|
|
281
|
-
}}
|
|
282
|
-
title="large (--sv-font-size-lg)"
|
|
283
|
-
>
|
|
284
|
-
Aa
|
|
285
|
-
</span>
|
|
286
|
-
<span
|
|
287
|
-
style={{
|
|
288
|
-
fontSize: `${scale * TEXT_SIZE_BASE_PX['2xl']}px`,
|
|
289
|
-
color: 'var(--sv-color-text-primary)',
|
|
290
|
-
}}
|
|
291
|
-
title="heading (--sv-font-size-2xl)"
|
|
292
|
-
>
|
|
293
|
-
Aa
|
|
294
|
-
</span>
|
|
295
|
-
</div>
|
|
296
|
-
<span style={label}>{preset}</span>
|
|
297
|
-
<span style={value}>scale {scale}</span>
|
|
298
|
-
</div>
|
|
299
|
-
);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
function RadiusPresetRow({ preset, scale }: { preset: string; scale: number }) {
|
|
303
|
-
return (
|
|
304
|
-
<div style={row}>
|
|
305
|
-
<div style={{ display: 'flex', gap: 12, alignItems: 'center', flexShrink: 0 }}>
|
|
306
|
-
<div
|
|
307
|
-
style={{
|
|
308
|
-
width: 56,
|
|
309
|
-
height: 40,
|
|
310
|
-
background: 'var(--sv-color-surface-sunken)',
|
|
311
|
-
border: '1px solid var(--sv-color-border)',
|
|
312
|
-
borderRadius: `${scale * RADIUS_BASE_PX.xl}px`,
|
|
313
|
-
}}
|
|
314
|
-
title="card (--sv-radius-xl)"
|
|
315
|
-
/>
|
|
316
|
-
<div
|
|
317
|
-
style={{
|
|
318
|
-
width: 64,
|
|
319
|
-
height: 36,
|
|
320
|
-
background: 'var(--sv-color-accent)',
|
|
321
|
-
borderRadius: `${scale * RADIUS_BASE_PX.md}px`,
|
|
322
|
-
}}
|
|
323
|
-
title="button, 36px tall (--sv-radius-md)"
|
|
324
|
-
/>
|
|
325
|
-
<div
|
|
326
|
-
style={{
|
|
327
|
-
width: 48,
|
|
328
|
-
height: 18,
|
|
329
|
-
background: 'var(--sv-color-accent-subtle)',
|
|
330
|
-
borderRadius: `${scale * RADIUS_BASE_PX.sm}px`,
|
|
331
|
-
}}
|
|
332
|
-
title="badge, 18px tall (--sv-radius-sm)"
|
|
333
|
-
/>
|
|
334
|
-
</div>
|
|
335
|
-
<span style={label}>{preset}</span>
|
|
336
|
-
<span style={value}>scale {scale}</span>
|
|
337
|
-
</div>
|
|
338
|
-
);
|
|
339
|
-
}
|
|
340
|
-
|
|
341
|
-
// Auto-loops so the duration/easing is visible without needing to interact —
|
|
342
|
-
// same technique Dialog/Drawer use for their own open/close transition
|
|
343
|
-
// (see motion.ts), just driven by a timer instead of an `open` prop.
|
|
344
|
-
function MotionRow({ durationToken, easeToken, use }: (typeof MOTION_PAIRS)[number]) {
|
|
345
|
-
const [toggled, setToggled] = useState(false);
|
|
346
|
-
useEffect(() => {
|
|
347
|
-
const id = setInterval(() => setToggled((v) => !v), 900);
|
|
348
|
-
return () => clearInterval(id);
|
|
349
|
-
}, []);
|
|
350
|
-
return (
|
|
351
|
-
<div style={row}>
|
|
352
|
-
<div
|
|
353
|
-
style={{
|
|
354
|
-
position: 'relative',
|
|
355
|
-
width: 120,
|
|
356
|
-
height: 24,
|
|
357
|
-
background: 'var(--sv-color-surface-sunken)',
|
|
358
|
-
borderRadius: 4,
|
|
359
|
-
flexShrink: 0,
|
|
360
|
-
}}
|
|
361
|
-
>
|
|
362
|
-
<div
|
|
363
|
-
style={{
|
|
364
|
-
position: 'absolute',
|
|
365
|
-
top: 2,
|
|
366
|
-
left: 2,
|
|
367
|
-
width: 20,
|
|
368
|
-
height: 20,
|
|
369
|
-
borderRadius: '50%',
|
|
370
|
-
background: 'var(--sv-color-accent)',
|
|
371
|
-
transform: `translateX(${toggled ? 96 : 0}px)`,
|
|
372
|
-
transition: `transform var(${durationToken}) var(${easeToken})`,
|
|
373
|
-
}}
|
|
374
|
-
/>
|
|
375
|
-
</div>
|
|
376
|
-
<span style={label}>
|
|
377
|
-
{durationToken} · {easeToken}
|
|
378
|
-
</span>
|
|
379
|
-
<span style={value}>{use}</span>
|
|
380
|
-
</div>
|
|
381
|
-
);
|
|
382
|
-
}
|
|
383
|
-
|
|
384
|
-
function Section({ title, children }: { title: string; children: React.ReactNode }) {
|
|
385
|
-
return (
|
|
386
|
-
<section style={{ marginBottom: 40 }}>
|
|
387
|
-
<h2
|
|
388
|
-
style={{
|
|
389
|
-
fontFamily: 'var(--sv-font-family)',
|
|
390
|
-
fontSize: 18,
|
|
391
|
-
fontWeight: 600,
|
|
392
|
-
color: 'var(--sv-color-text-primary)',
|
|
393
|
-
marginBottom: 12,
|
|
394
|
-
borderBottom: '2px solid var(--sv-color-accent)',
|
|
395
|
-
paddingBottom: 4,
|
|
396
|
-
}}
|
|
397
|
-
>
|
|
398
|
-
{title}
|
|
399
|
-
</h2>
|
|
400
|
-
{children}
|
|
401
|
-
</section>
|
|
402
|
-
);
|
|
403
|
-
}
|
|
404
|
-
|
|
405
|
-
// ---------------------------------------------------------------------------
|
|
406
|
-
|
|
407
|
-
function TokenGalleryComponent() {
|
|
408
|
-
return (
|
|
409
|
-
<div
|
|
410
|
-
style={{
|
|
411
|
-
padding: 24,
|
|
412
|
-
background: 'var(--sv-color-surface)',
|
|
413
|
-
minHeight: '100vh',
|
|
414
|
-
fontFamily: 'var(--sv-font-family)',
|
|
415
|
-
}}
|
|
416
|
-
>
|
|
417
|
-
<h1
|
|
418
|
-
style={{
|
|
419
|
-
fontSize: 24,
|
|
420
|
-
fontWeight: 700,
|
|
421
|
-
color: 'var(--sv-color-text-primary)',
|
|
422
|
-
marginBottom: 8,
|
|
423
|
-
}}
|
|
424
|
-
>
|
|
425
|
-
Sovereign Design Token Gallery
|
|
426
|
-
</h1>
|
|
427
|
-
<p style={{ color: 'var(--sv-color-text-muted)', marginBottom: 32, fontSize: 14 }}>
|
|
428
|
-
All values are read live from computed styles — they reflect the actual loaded CSS, not a
|
|
429
|
-
hardcoded snapshot. Use the Themes toolbar above to switch dark mode.
|
|
430
|
-
</p>
|
|
431
|
-
|
|
432
|
-
<Section title="Semantic colours">
|
|
433
|
-
{SEMANTIC_COLORS.map((t) => (
|
|
434
|
-
<ColorRow key={t} token={t} />
|
|
435
|
-
))}
|
|
436
|
-
</Section>
|
|
437
|
-
|
|
438
|
-
<Section title="Space scale">
|
|
439
|
-
{SPACE_TOKENS.map((t) => (
|
|
440
|
-
<ScaleRow
|
|
441
|
-
key={t}
|
|
442
|
-
token={t}
|
|
443
|
-
renderPreview={(_v) => (
|
|
444
|
-
<div
|
|
445
|
-
style={{
|
|
446
|
-
width: `var(${t})`,
|
|
447
|
-
height: 16,
|
|
448
|
-
background: 'var(--sv-color-accent)',
|
|
449
|
-
flexShrink: 0,
|
|
450
|
-
minWidth: 4,
|
|
451
|
-
}}
|
|
452
|
-
/>
|
|
453
|
-
)}
|
|
454
|
-
/>
|
|
455
|
-
))}
|
|
456
|
-
</Section>
|
|
457
|
-
|
|
458
|
-
<Section title="Font weight scale">
|
|
459
|
-
{FONT_WEIGHT_TOKENS.map((t) => (
|
|
460
|
-
<ScaleRow
|
|
461
|
-
key={t}
|
|
462
|
-
token={t}
|
|
463
|
-
renderPreview={(_v) => (
|
|
464
|
-
<span
|
|
465
|
-
style={{
|
|
466
|
-
fontFamily: 'var(--sv-font-family)',
|
|
467
|
-
fontSize: 'var(--sv-font-size-md)',
|
|
468
|
-
fontWeight: `var(${t})`,
|
|
469
|
-
color: 'var(--sv-color-text-primary)',
|
|
470
|
-
minWidth: 100,
|
|
471
|
-
}}
|
|
472
|
-
>
|
|
473
|
-
Sovereign
|
|
474
|
-
</span>
|
|
475
|
-
)}
|
|
476
|
-
/>
|
|
477
|
-
))}
|
|
478
|
-
</Section>
|
|
479
|
-
|
|
480
|
-
<Section title="Typography scale">
|
|
481
|
-
{FONT_SIZE_TOKENS.map((t) => (
|
|
482
|
-
<ScaleRow
|
|
483
|
-
key={t}
|
|
484
|
-
token={t}
|
|
485
|
-
renderPreview={(_v) => (
|
|
486
|
-
<span
|
|
487
|
-
style={{
|
|
488
|
-
fontSize: `var(${t})`,
|
|
489
|
-
color: 'var(--sv-color-text-primary)',
|
|
490
|
-
minWidth: 100,
|
|
491
|
-
lineHeight: 1,
|
|
492
|
-
}}
|
|
493
|
-
>
|
|
494
|
-
Aa
|
|
495
|
-
</span>
|
|
496
|
-
)}
|
|
497
|
-
/>
|
|
498
|
-
))}
|
|
499
|
-
</Section>
|
|
500
|
-
|
|
501
|
-
<Section title="Text-size presets (task 10.2)">
|
|
502
|
-
<p style={{ color: 'var(--sv-color-text-muted)', fontSize: 13, marginBottom: 12 }}>
|
|
503
|
-
Account → Preferences → Appearance. Overrides <code>--sv-text-size-scale</code> via{' '}
|
|
504
|
-
<code>[data-text-size]</code> on <code><html></code> — every rem-based token above
|
|
505
|
-
(font sizes, but also spacing and radii) scales with it, since the root element's
|
|
506
|
-
font-size is what rem resolves against. Discharges the accessibility debt from disabling
|
|
507
|
-
pinch-zoom (<code>runtime/app/layout.tsx</code>).
|
|
508
|
-
</p>
|
|
509
|
-
{TEXT_SIZE_PRESETS.map((p) => (
|
|
510
|
-
<TextSizePresetRow key={p.preset} preset={p.preset} scale={p.scale} />
|
|
511
|
-
))}
|
|
512
|
-
</Section>
|
|
513
|
-
|
|
514
|
-
<Section title="Radius scale">
|
|
515
|
-
{RADIUS_TOKENS.map((t) => (
|
|
516
|
-
<RadiusScaleRow key={t} token={t} />
|
|
517
|
-
))}
|
|
518
|
-
</Section>
|
|
519
|
-
|
|
520
|
-
<Section title="Radius presets (RFC 0077)">
|
|
521
|
-
<p style={{ color: 'var(--sv-color-text-muted)', fontSize: 13, marginBottom: 12 }}>
|
|
522
|
-
Instance-level corner-radius intensity — Console → Instance identity, or{' '}
|
|
523
|
-
<code>INSTANCE_RADIUS</code>. Overrides <code>--sv-radius-scale</code>; every{' '}
|
|
524
|
-
<code>--sv-radius-*</code> token above stays proportional to it. Note how the button
|
|
525
|
-
swatch clips to a full pill by L — <code>border-radius</code>'s own half-height
|
|
526
|
-
clamp, not a separate mechanism.
|
|
527
|
-
</p>
|
|
528
|
-
{RADIUS_PRESETS.map((p) => (
|
|
529
|
-
<RadiusPresetRow key={p.preset} preset={p.preset} scale={p.scale} />
|
|
530
|
-
))}
|
|
531
|
-
</Section>
|
|
532
|
-
|
|
533
|
-
<Section title="Icon sizes">
|
|
534
|
-
{ICON_SIZE_TOKENS.map((t) => (
|
|
535
|
-
<ScaleRow
|
|
536
|
-
key={t}
|
|
537
|
-
token={t}
|
|
538
|
-
renderPreview={(_v) => (
|
|
539
|
-
<div
|
|
540
|
-
style={{
|
|
541
|
-
width: `var(${t})`,
|
|
542
|
-
height: `var(${t})`,
|
|
543
|
-
background: 'var(--sv-color-accent)',
|
|
544
|
-
borderRadius: 2,
|
|
545
|
-
flexShrink: 0,
|
|
546
|
-
}}
|
|
547
|
-
/>
|
|
548
|
-
)}
|
|
549
|
-
/>
|
|
550
|
-
))}
|
|
551
|
-
</Section>
|
|
552
|
-
|
|
553
|
-
<Section title="Shadows">
|
|
554
|
-
{SHADOW_TOKENS.map((t) => (
|
|
555
|
-
<ScaleRow
|
|
556
|
-
key={t}
|
|
557
|
-
token={t}
|
|
558
|
-
renderPreview={(_v) => (
|
|
559
|
-
<div
|
|
560
|
-
style={{
|
|
561
|
-
width: 48,
|
|
562
|
-
height: 28,
|
|
563
|
-
background: 'var(--sv-color-surface-raised)',
|
|
564
|
-
boxShadow: `var(${t})`,
|
|
565
|
-
borderRadius: 4,
|
|
566
|
-
flexShrink: 0,
|
|
567
|
-
}}
|
|
568
|
-
/>
|
|
569
|
-
)}
|
|
570
|
-
/>
|
|
571
|
-
))}
|
|
572
|
-
</Section>
|
|
573
|
-
|
|
574
|
-
<Section title="Motion">
|
|
575
|
-
{MOTION_PAIRS.map((pair) => (
|
|
576
|
-
<MotionRow key={`${pair.durationToken}-${pair.easeToken}`} {...pair} />
|
|
577
|
-
))}
|
|
578
|
-
</Section>
|
|
579
|
-
</div>
|
|
580
|
-
);
|
|
581
|
-
}
|
|
582
|
-
|
|
583
|
-
// ---------------------------------------------------------------------------
|
|
584
|
-
|
|
585
|
-
const meta = {
|
|
586
|
-
title: 'Design Tokens/Token Gallery',
|
|
587
|
-
component: TokenGalleryComponent,
|
|
588
|
-
parameters: {
|
|
589
|
-
layout: 'fullscreen',
|
|
590
|
-
docs: {
|
|
591
|
-
description: {
|
|
592
|
-
component:
|
|
593
|
-
'Live gallery of every `--sv-*` CSS custom property. Values are read from `getComputedStyle` at render time — toggle dark mode via the Themes toolbar to see both themes.',
|
|
594
|
-
},
|
|
595
|
-
},
|
|
596
|
-
},
|
|
597
|
-
} satisfies Meta<typeof TokenGalleryComponent>;
|
|
598
|
-
|
|
599
|
-
export default meta;
|
|
600
|
-
type Story = StoryObj<typeof meta>;
|
|
601
|
-
|
|
602
|
-
export const AllTokens: Story = {};
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
import type { Meta, StoryObj } from '@storybook/react-vite';
|
|
2
|
-
import { Tooltip } from '../components/Tooltip/Tooltip';
|
|
3
|
-
import { Button } from '../components/Button/Button';
|
|
4
|
-
import { Icon } from '../components/Icon/Icon';
|
|
5
|
-
|
|
6
|
-
const meta = {
|
|
7
|
-
title: 'Components/Tooltip',
|
|
8
|
-
component: Tooltip,
|
|
9
|
-
parameters: { layout: 'centered' },
|
|
10
|
-
} satisfies Meta<typeof Tooltip>;
|
|
11
|
-
|
|
12
|
-
export default meta;
|
|
13
|
-
type Story = StoryObj<typeof meta>;
|
|
14
|
-
|
|
15
|
-
export const Default: Story = {
|
|
16
|
-
args: {
|
|
17
|
-
content: 'This is a tooltip',
|
|
18
|
-
children: <Button variant="secondary">Hover me</Button>,
|
|
19
|
-
},
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export const OnIcon: Story = {
|
|
23
|
-
args: {
|
|
24
|
-
content: 'More information',
|
|
25
|
-
children: (
|
|
26
|
-
<span style={{ color: 'var(--sv-color-text-muted)', cursor: 'default' }}>
|
|
27
|
-
<Icon name="info" size="md" aria-label="Info" />
|
|
28
|
-
</span>
|
|
29
|
-
),
|
|
30
|
-
},
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
export const Sides: Story = {
|
|
34
|
-
args: { content: '', children: <span /> },
|
|
35
|
-
render: () => (
|
|
36
|
-
<div style={{ display: 'flex', gap: 48, alignItems: 'center', padding: 48 }}>
|
|
37
|
-
<Tooltip content="Top" side="top">
|
|
38
|
-
<Button variant="ghost" size="sm">
|
|
39
|
-
Top
|
|
40
|
-
</Button>
|
|
41
|
-
</Tooltip>
|
|
42
|
-
<Tooltip content="Bottom" side="bottom">
|
|
43
|
-
<Button variant="ghost" size="sm">
|
|
44
|
-
Bottom
|
|
45
|
-
</Button>
|
|
46
|
-
</Tooltip>
|
|
47
|
-
<Tooltip content="Left" side="left">
|
|
48
|
-
<Button variant="ghost" size="sm">
|
|
49
|
-
Left
|
|
50
|
-
</Button>
|
|
51
|
-
</Tooltip>
|
|
52
|
-
<Tooltip content="Right" side="right">
|
|
53
|
-
<Button variant="ghost" size="sm">
|
|
54
|
-
Right
|
|
55
|
-
</Button>
|
|
56
|
-
</Tooltip>
|
|
57
|
-
</div>
|
|
58
|
-
),
|
|
59
|
-
};
|