@qijenchen/design-system 0.1.0-beta.10
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/README.md +163 -0
- package/dist/components/Accordion/accordion.d.ts +37 -0
- package/dist/components/Accordion/accordion.d.ts.map +1 -0
- package/dist/components/Accordion/accordion.js +78 -0
- package/dist/components/Accordion/accordion.js.map +1 -0
- package/dist/components/Alert/alert.d.ts +47 -0
- package/dist/components/Alert/alert.d.ts.map +1 -0
- package/dist/components/Alert/alert.js +132 -0
- package/dist/components/Alert/alert.js.map +1 -0
- package/dist/components/AppShell/_demo-helpers.d.ts +49 -0
- package/dist/components/AppShell/_demo-helpers.d.ts.map +1 -0
- package/dist/components/AppShell/app-shell.d.ts +76 -0
- package/dist/components/AppShell/app-shell.d.ts.map +1 -0
- package/dist/components/AppShell/app-shell.js +214 -0
- package/dist/components/AppShell/app-shell.js.map +1 -0
- package/dist/components/AspectRatio/aspect-ratio.d.ts +40 -0
- package/dist/components/AspectRatio/aspect-ratio.d.ts.map +1 -0
- package/dist/components/AspectRatio/aspect-ratio.js +23 -0
- package/dist/components/AspectRatio/aspect-ratio.js.map +1 -0
- package/dist/components/Avatar/avatar.d.ts +85 -0
- package/dist/components/Avatar/avatar.d.ts.map +1 -0
- package/dist/components/Avatar/avatar.js +195 -0
- package/dist/components/Avatar/avatar.js.map +1 -0
- package/dist/components/Badge/badge.d.ts +43 -0
- package/dist/components/Badge/badge.d.ts.map +1 -0
- package/dist/components/Badge/badge.js +69 -0
- package/dist/components/Badge/badge.js.map +1 -0
- package/dist/components/Breadcrumb/breadcrumb.d.ts +163 -0
- package/dist/components/Breadcrumb/breadcrumb.d.ts.map +1 -0
- package/dist/components/Breadcrumb/breadcrumb.js +300 -0
- package/dist/components/Breadcrumb/breadcrumb.js.map +1 -0
- package/dist/components/BulkActionBar/bulk-action-bar.d.ts +46 -0
- package/dist/components/BulkActionBar/bulk-action-bar.d.ts.map +1 -0
- package/dist/components/BulkActionBar/bulk-action-bar.js +78 -0
- package/dist/components/BulkActionBar/bulk-action-bar.js.map +1 -0
- package/dist/components/Button/button-group.d.ts +49 -0
- package/dist/components/Button/button-group.d.ts.map +1 -0
- package/dist/components/Button/button-group.js +46 -0
- package/dist/components/Button/button-group.js.map +1 -0
- package/dist/components/Button/button.d.ts +203 -0
- package/dist/components/Button/button.d.ts.map +1 -0
- package/dist/components/Button/button.js +309 -0
- package/dist/components/Button/button.js.map +1 -0
- package/dist/components/Calendar/calendar.d.ts +81 -0
- package/dist/components/Calendar/calendar.d.ts.map +1 -0
- package/dist/components/Calendar/calendar.js +282 -0
- package/dist/components/Calendar/calendar.js.map +1 -0
- package/dist/components/Carousel/carousel.d.ts +61 -0
- package/dist/components/Carousel/carousel.d.ts.map +1 -0
- package/dist/components/Carousel/carousel.js +276 -0
- package/dist/components/Carousel/carousel.js.map +1 -0
- package/dist/components/Chart/chart.d.ts +94 -0
- package/dist/components/Chart/chart.d.ts.map +1 -0
- package/dist/components/Chart/chart.js +233 -0
- package/dist/components/Chart/chart.js.map +1 -0
- package/dist/components/Checkbox/checkbox-group.d.ts +58 -0
- package/dist/components/Checkbox/checkbox-group.d.ts.map +1 -0
- package/dist/components/Checkbox/checkbox-group.js +28 -0
- package/dist/components/Checkbox/checkbox-group.js.map +1 -0
- package/dist/components/Checkbox/checkbox.d.ts +73 -0
- package/dist/components/Checkbox/checkbox.d.ts.map +1 -0
- package/dist/components/Checkbox/checkbox.js +125 -0
- package/dist/components/Checkbox/checkbox.js.map +1 -0
- package/dist/components/Chip/chip.d.ts +54 -0
- package/dist/components/Chip/chip.d.ts.map +1 -0
- package/dist/components/Chip/chip.js +224 -0
- package/dist/components/Chip/chip.js.map +1 -0
- package/dist/components/CircularProgress/circular-progress.d.ts +40 -0
- package/dist/components/CircularProgress/circular-progress.d.ts.map +1 -0
- package/dist/components/CircularProgress/circular-progress.js +118 -0
- package/dist/components/CircularProgress/circular-progress.js.map +1 -0
- package/dist/components/Coachmark/coachmark.d.ts +100 -0
- package/dist/components/Coachmark/coachmark.d.ts.map +1 -0
- package/dist/components/Coachmark/coachmark.js +107 -0
- package/dist/components/Coachmark/coachmark.js.map +1 -0
- package/dist/components/Combobox/combobox.d.ts +150 -0
- package/dist/components/Combobox/combobox.d.ts.map +1 -0
- package/dist/components/Combobox/combobox.js +595 -0
- package/dist/components/Combobox/combobox.js.map +1 -0
- package/dist/components/Command/command.d.ts +106 -0
- package/dist/components/Command/command.d.ts.map +1 -0
- package/dist/components/Command/command.js +123 -0
- package/dist/components/Command/command.js.map +1 -0
- package/dist/components/DataTable/active-editor-controller.d.ts +66 -0
- package/dist/components/DataTable/active-editor-controller.d.ts.map +1 -0
- package/dist/components/DataTable/cell-registry.d.ts +37 -0
- package/dist/components/DataTable/cell-registry.d.ts.map +1 -0
- package/dist/components/DataTable/cell-registry.js +377 -0
- package/dist/components/DataTable/cell-registry.js.map +1 -0
- package/dist/components/DataTable/column-types.d.ts +145 -0
- package/dist/components/DataTable/column-types.d.ts.map +1 -0
- package/dist/components/DataTable/column-types.js +17 -0
- package/dist/components/DataTable/column-types.js.map +1 -0
- package/dist/components/DataTable/data-table-column-visibility-panel.d.ts +49 -0
- package/dist/components/DataTable/data-table-column-visibility-panel.d.ts.map +1 -0
- package/dist/components/DataTable/data-table-filter-panel.d.ts +30 -0
- package/dist/components/DataTable/data-table-filter-panel.d.ts.map +1 -0
- package/dist/components/DataTable/data-table-interaction-layer.d.ts +78 -0
- package/dist/components/DataTable/data-table-interaction-layer.d.ts.map +1 -0
- package/dist/components/DataTable/data-table-interaction-layer.js +220 -0
- package/dist/components/DataTable/data-table-interaction-layer.js.map +1 -0
- package/dist/components/DataTable/data-table-sort-manager.d.ts +19 -0
- package/dist/components/DataTable/data-table-sort-manager.d.ts.map +1 -0
- package/dist/components/DataTable/data-table.d.ts +181 -0
- package/dist/components/DataTable/data-table.d.ts.map +1 -0
- package/dist/components/DataTable/data-table.js +1851 -0
- package/dist/components/DataTable/data-table.js.map +1 -0
- package/dist/components/DataTable/filter-operators.d.ts +116 -0
- package/dist/components/DataTable/filter-operators.d.ts.map +1 -0
- package/dist/components/DataTable/filter-tree.d.ts +66 -0
- package/dist/components/DataTable/filter-tree.d.ts.map +1 -0
- package/dist/components/DataTable/lib/column-meta.d.ts +49 -0
- package/dist/components/DataTable/lib/column-meta.d.ts.map +1 -0
- package/dist/components/DateGrid/date-grid.d.ts +61 -0
- package/dist/components/DateGrid/date-grid.d.ts.map +1 -0
- package/dist/components/DateGrid/date-grid.js +168 -0
- package/dist/components/DateGrid/date-grid.js.map +1 -0
- package/dist/components/DatePicker/date-picker.d.ts +119 -0
- package/dist/components/DatePicker/date-picker.d.ts.map +1 -0
- package/dist/components/DatePicker/date-picker.js +743 -0
- package/dist/components/DatePicker/date-picker.js.map +1 -0
- package/dist/components/DescriptionList/description-list.d.ts +60 -0
- package/dist/components/DescriptionList/description-list.d.ts.map +1 -0
- package/dist/components/DescriptionList/description-list.js +77 -0
- package/dist/components/DescriptionList/description-list.js.map +1 -0
- package/dist/components/Dialog/dialog.d.ts +54 -0
- package/dist/components/Dialog/dialog.d.ts.map +1 -0
- package/dist/components/Dialog/dialog.js +151 -0
- package/dist/components/Dialog/dialog.js.map +1 -0
- package/dist/components/DropdownMenu/dropdown-menu.d.ts +111 -0
- package/dist/components/DropdownMenu/dropdown-menu.d.ts.map +1 -0
- package/dist/components/DropdownMenu/dropdown-menu.js +288 -0
- package/dist/components/DropdownMenu/dropdown-menu.js.map +1 -0
- package/dist/components/Empty/empty.d.ts +40 -0
- package/dist/components/Empty/empty.d.ts.map +1 -0
- package/dist/components/Empty/empty.js +66 -0
- package/dist/components/Empty/empty.js.map +1 -0
- package/dist/components/Field/field-context.d.ts +77 -0
- package/dist/components/Field/field-context.d.ts.map +1 -0
- package/dist/components/Field/field-context.js +37 -0
- package/dist/components/Field/field-context.js.map +1 -0
- package/dist/components/Field/field-types.d.ts +5 -0
- package/dist/components/Field/field-types.d.ts.map +1 -0
- package/dist/components/Field/field-types.js +13 -0
- package/dist/components/Field/field-types.js.map +1 -0
- package/dist/components/Field/field-wrapper.d.ts +17 -0
- package/dist/components/Field/field-wrapper.d.ts.map +1 -0
- package/dist/components/Field/field-wrapper.js +252 -0
- package/dist/components/Field/field-wrapper.js.map +1 -0
- package/dist/components/Field/field.d.ts +127 -0
- package/dist/components/Field/field.d.ts.map +1 -0
- package/dist/components/Field/field.js +295 -0
- package/dist/components/Field/field.js.map +1 -0
- package/dist/components/FieldControlGroup/field-control-group.d.ts +74 -0
- package/dist/components/FieldControlGroup/field-control-group.d.ts.map +1 -0
- package/dist/components/FieldControlGroup/field-control-group.js +62 -0
- package/dist/components/FieldControlGroup/field-control-group.js.map +1 -0
- package/dist/components/FileItem/file-item.d.ts +44 -0
- package/dist/components/FileItem/file-item.d.ts.map +1 -0
- package/dist/components/FileItem/file-item.js +202 -0
- package/dist/components/FileItem/file-item.js.map +1 -0
- package/dist/components/FileUpload/file-upload.d.ts +97 -0
- package/dist/components/FileUpload/file-upload.d.ts.map +1 -0
- package/dist/components/FileUpload/file-upload.js +231 -0
- package/dist/components/FileUpload/file-upload.js.map +1 -0
- package/dist/components/FileViewer/file-viewer-types.d.ts +73 -0
- package/dist/components/FileViewer/file-viewer-types.d.ts.map +1 -0
- package/dist/components/FileViewer/file-viewer.d.ts +82 -0
- package/dist/components/FileViewer/file-viewer.d.ts.map +1 -0
- package/dist/components/FileViewer/file-viewer.js +752 -0
- package/dist/components/FileViewer/file-viewer.js.map +1 -0
- package/dist/components/FileViewer/image-renderer.d.ts +9 -0
- package/dist/components/FileViewer/image-renderer.d.ts.map +1 -0
- package/dist/components/FileViewer/image-renderer.js +165 -0
- package/dist/components/FileViewer/image-renderer.js.map +1 -0
- package/dist/components/HoverCard/hover-card.d.ts +30 -0
- package/dist/components/HoverCard/hover-card.d.ts.map +1 -0
- package/dist/components/HoverCard/hover-card.js +61 -0
- package/dist/components/HoverCard/hover-card.js.map +1 -0
- package/dist/components/Input/input.d.ts +72 -0
- package/dist/components/Input/input.d.ts.map +1 -0
- package/dist/components/Input/input.js +148 -0
- package/dist/components/Input/input.js.map +1 -0
- package/dist/components/LinkInput/link-input.d.ts +46 -0
- package/dist/components/LinkInput/link-input.d.ts.map +1 -0
- package/dist/components/LinkInput/link-input.js +215 -0
- package/dist/components/LinkInput/link-input.js.map +1 -0
- package/dist/components/Menu/menu-item.d.ts +83 -0
- package/dist/components/Menu/menu-item.d.ts.map +1 -0
- package/dist/components/Menu/menu-item.js +209 -0
- package/dist/components/Menu/menu-item.js.map +1 -0
- package/dist/components/NameCard/name-card.d.ts +85 -0
- package/dist/components/NameCard/name-card.d.ts.map +1 -0
- package/dist/components/NameCard/name-card.js +153 -0
- package/dist/components/NameCard/name-card.js.map +1 -0
- package/dist/components/Notice/notice.d.ts +69 -0
- package/dist/components/Notice/notice.d.ts.map +1 -0
- package/dist/components/Notice/notice.js +121 -0
- package/dist/components/Notice/notice.js.map +1 -0
- package/dist/components/NumberInput/number-input.d.ts +57 -0
- package/dist/components/NumberInput/number-input.d.ts.map +1 -0
- package/dist/components/NumberInput/number-input.js +131 -0
- package/dist/components/NumberInput/number-input.js.map +1 -0
- package/dist/components/OverflowIndicator/overflow-indicator.d.ts +23 -0
- package/dist/components/OverflowIndicator/overflow-indicator.d.ts.map +1 -0
- package/dist/components/OverflowIndicator/overflow-indicator.js +111 -0
- package/dist/components/OverflowIndicator/overflow-indicator.js.map +1 -0
- package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts +57 -0
- package/dist/components/PeoplePicker/avatar-stack-overflow.d.ts.map +1 -0
- package/dist/components/PeoplePicker/avatar-stack-overflow.js +35 -0
- package/dist/components/PeoplePicker/avatar-stack-overflow.js.map +1 -0
- package/dist/components/PeoplePicker/people-picker-helpers.d.ts +7 -0
- package/dist/components/PeoplePicker/people-picker-helpers.d.ts.map +1 -0
- package/dist/components/PeoplePicker/people-picker-helpers.js +25 -0
- package/dist/components/PeoplePicker/people-picker-helpers.js.map +1 -0
- package/dist/components/PeoplePicker/people-picker.d.ts +77 -0
- package/dist/components/PeoplePicker/people-picker.d.ts.map +1 -0
- package/dist/components/PeoplePicker/people-picker.js +263 -0
- package/dist/components/PeoplePicker/people-picker.js.map +1 -0
- package/dist/components/PeoplePicker/person-display.d.ts +66 -0
- package/dist/components/PeoplePicker/person-display.d.ts.map +1 -0
- package/dist/components/PeoplePicker/person-display.js +203 -0
- package/dist/components/PeoplePicker/person-display.js.map +1 -0
- package/dist/components/Popover/popover.d.ts +50 -0
- package/dist/components/Popover/popover.d.ts.map +1 -0
- package/dist/components/Popover/popover.js +113 -0
- package/dist/components/Popover/popover.js.map +1 -0
- package/dist/components/ProgressBar/progress-bar.d.ts +37 -0
- package/dist/components/ProgressBar/progress-bar.d.ts.map +1 -0
- package/dist/components/ProgressBar/progress-bar.js +86 -0
- package/dist/components/ProgressBar/progress-bar.js.map +1 -0
- package/dist/components/RadioGroup/radio-group.d.ts +78 -0
- package/dist/components/RadioGroup/radio-group.d.ts.map +1 -0
- package/dist/components/RadioGroup/radio-group.js +153 -0
- package/dist/components/RadioGroup/radio-group.js.map +1 -0
- package/dist/components/Rating/rating.d.ts +46 -0
- package/dist/components/Rating/rating.d.ts.map +1 -0
- package/dist/components/Rating/rating.js +179 -0
- package/dist/components/Rating/rating.js.map +1 -0
- package/dist/components/ScrollArea/scroll-area.d.ts +45 -0
- package/dist/components/ScrollArea/scroll-area.d.ts.map +1 -0
- package/dist/components/ScrollArea/scroll-area.js +65 -0
- package/dist/components/ScrollArea/scroll-area.js.map +1 -0
- package/dist/components/SegmentedControl/segmented-control.d.ts +102 -0
- package/dist/components/SegmentedControl/segmented-control.d.ts.map +1 -0
- package/dist/components/SegmentedControl/segmented-control.js +171 -0
- package/dist/components/SegmentedControl/segmented-control.js.map +1 -0
- package/dist/components/Select/select.d.ts +102 -0
- package/dist/components/Select/select.d.ts.map +1 -0
- package/dist/components/Select/select.js +435 -0
- package/dist/components/Select/select.js.map +1 -0
- package/dist/components/SelectMenu/select-menu.d.ts +103 -0
- package/dist/components/SelectMenu/select-menu.d.ts.map +1 -0
- package/dist/components/SelectMenu/select-menu.js +239 -0
- package/dist/components/SelectMenu/select-menu.js.map +1 -0
- package/dist/components/SelectionControl/selection-item.d.ts +69 -0
- package/dist/components/SelectionControl/selection-item.d.ts.map +1 -0
- package/dist/components/SelectionControl/selection-item.js +142 -0
- package/dist/components/SelectionControl/selection-item.js.map +1 -0
- package/dist/components/Separator/separator.d.ts +17 -0
- package/dist/components/Separator/separator.d.ts.map +1 -0
- package/dist/components/Separator/separator.js +39 -0
- package/dist/components/Separator/separator.js.map +1 -0
- package/dist/components/Sheet/sheet.d.ts +56 -0
- package/dist/components/Sheet/sheet.d.ts.map +1 -0
- package/dist/components/Sheet/sheet.js +145 -0
- package/dist/components/Sheet/sheet.js.map +1 -0
- package/dist/components/Sidebar/sidebar.d.ts +195 -0
- package/dist/components/Sidebar/sidebar.d.ts.map +1 -0
- package/dist/components/Sidebar/sidebar.js +826 -0
- package/dist/components/Sidebar/sidebar.js.map +1 -0
- package/dist/components/Skeleton/skeleton.d.ts +16 -0
- package/dist/components/Skeleton/skeleton.d.ts.map +1 -0
- package/dist/components/Skeleton/skeleton.js +30 -0
- package/dist/components/Skeleton/skeleton.js.map +1 -0
- package/dist/components/Slider/slider.d.ts +48 -0
- package/dist/components/Slider/slider.d.ts.map +1 -0
- package/dist/components/Slider/slider.js +108 -0
- package/dist/components/Slider/slider.js.map +1 -0
- package/dist/components/Steps/steps.d.ts +71 -0
- package/dist/components/Steps/steps.d.ts.map +1 -0
- package/dist/components/Steps/steps.js +583 -0
- package/dist/components/Steps/steps.js.map +1 -0
- package/dist/components/Switch/switch.d.ts +112 -0
- package/dist/components/Switch/switch.d.ts.map +1 -0
- package/dist/components/Switch/switch.js +179 -0
- package/dist/components/Switch/switch.js.map +1 -0
- package/dist/components/Tabs/tabs.d.ts +104 -0
- package/dist/components/Tabs/tabs.d.ts.map +1 -0
- package/dist/components/Tabs/tabs.js +316 -0
- package/dist/components/Tabs/tabs.js.map +1 -0
- package/dist/components/Tag/tag.d.ts +86 -0
- package/dist/components/Tag/tag.d.ts.map +1 -0
- package/dist/components/Tag/tag.js +172 -0
- package/dist/components/Tag/tag.js.map +1 -0
- package/dist/components/Textarea/textarea.d.ts +74 -0
- package/dist/components/Textarea/textarea.d.ts.map +1 -0
- package/dist/components/Textarea/textarea.js +224 -0
- package/dist/components/Textarea/textarea.js.map +1 -0
- package/dist/components/TimePicker/time-columns.d.ts +46 -0
- package/dist/components/TimePicker/time-columns.d.ts.map +1 -0
- package/dist/components/TimePicker/time-columns.js +173 -0
- package/dist/components/TimePicker/time-columns.js.map +1 -0
- package/dist/components/TimePicker/time-picker.d.ts +94 -0
- package/dist/components/TimePicker/time-picker.d.ts.map +1 -0
- package/dist/components/TimePicker/time-picker.js +253 -0
- package/dist/components/TimePicker/time-picker.js.map +1 -0
- package/dist/components/Toast/toast.d.ts +61 -0
- package/dist/components/Toast/toast.d.ts.map +1 -0
- package/dist/components/Toast/toast.js +76 -0
- package/dist/components/Toast/toast.js.map +1 -0
- package/dist/components/Tooltip/tooltip.d.ts +20 -0
- package/dist/components/Tooltip/tooltip.d.ts.map +1 -0
- package/dist/components/Tooltip/tooltip.js +53 -0
- package/dist/components/Tooltip/tooltip.js.map +1 -0
- package/dist/components/TreeView/tree-view.d.ts +166 -0
- package/dist/components/TreeView/tree-view.d.ts.map +1 -0
- package/dist/components/TreeView/tree-view.js +617 -0
- package/dist/components/TreeView/tree-view.js.map +1 -0
- package/dist/hooks/use-controllable.d.ts +16 -0
- package/dist/hooks/use-controllable.d.ts.map +1 -0
- package/dist/hooks/use-controllable.js +26 -0
- package/dist/hooks/use-controllable.js.map +1 -0
- package/dist/hooks/use-is-narrow-viewport.d.ts +2 -0
- package/dist/hooks/use-is-narrow-viewport.d.ts.map +1 -0
- package/dist/hooks/use-is-narrow-viewport.js +19 -0
- package/dist/hooks/use-is-narrow-viewport.js.map +1 -0
- package/dist/hooks/use-is-touch-device.d.ts +8 -0
- package/dist/hooks/use-is-touch-device.d.ts.map +1 -0
- package/dist/hooks/use-is-touch-device.js +16 -0
- package/dist/hooks/use-is-touch-device.js.map +1 -0
- package/dist/hooks/use-overflow-items.d.ts +124 -0
- package/dist/hooks/use-overflow-items.d.ts.map +1 -0
- package/dist/hooks/use-overflow-items.js +97 -0
- package/dist/hooks/use-overflow-items.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +371 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/drag-visual.d.ts +158 -0
- package/dist/lib/drag-visual.d.ts.map +1 -0
- package/dist/lib/drag-visual.js +96 -0
- package/dist/lib/drag-visual.js.map +1 -0
- package/dist/lib/i18n/i18n-context.d.ts +105 -0
- package/dist/lib/i18n/i18n-context.d.ts.map +1 -0
- package/dist/lib/multi-select-ordering.d.ts +54 -0
- package/dist/lib/multi-select-ordering.d.ts.map +1 -0
- package/dist/lib/multi-select-ordering.js +13 -0
- package/dist/lib/multi-select-ordering.js.map +1 -0
- package/dist/lib/utils.d.ts +12 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +79 -0
- package/dist/lib/utils.js.map +1 -0
- package/dist/patterns/element-anatomy/item-anatomy.d.ts +370 -0
- package/dist/patterns/element-anatomy/item-anatomy.d.ts.map +1 -0
- package/dist/patterns/element-anatomy/item-anatomy.js +272 -0
- package/dist/patterns/element-anatomy/item-anatomy.js.map +1 -0
- package/dist/patterns/header-canonical/chrome-header.d.ts +80 -0
- package/dist/patterns/header-canonical/chrome-header.d.ts.map +1 -0
- package/dist/patterns/header-canonical/chrome-header.js +75 -0
- package/dist/patterns/header-canonical/chrome-header.js.map +1 -0
- package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts +101 -0
- package/dist/patterns/horizontal-overflow/horizontal-overflow.d.ts.map +1 -0
- package/dist/patterns/horizontal-overflow/horizontal-overflow.js +105 -0
- package/dist/patterns/horizontal-overflow/horizontal-overflow.js.map +1 -0
- package/dist/patterns/overlay-surface/overlay-surface.d.ts +28 -0
- package/dist/patterns/overlay-surface/overlay-surface.d.ts.map +1 -0
- package/dist/patterns/overlay-surface/overlay-surface.js +85 -0
- package/dist/patterns/overlay-surface/overlay-surface.js.map +1 -0
- package/dist/patterns/resize-handle/resize-handle.d.ts +102 -0
- package/dist/patterns/resize-handle/resize-handle.d.ts.map +1 -0
- package/dist/patterns/resize-handle/resize-handle.js +74 -0
- package/dist/patterns/resize-handle/resize-handle.js.map +1 -0
- package/dist/react-day-picker.css +457 -0
- package/dist/stories-helpers/anatomy/anatomy-utils.d.ts +40 -0
- package/dist/stories-helpers/anatomy/anatomy-utils.d.ts.map +1 -0
- package/dist/tokens/elevation/overlay-geometry.d.ts +12 -0
- package/dist/tokens/elevation/overlay-geometry.d.ts.map +1 -0
- package/dist/tokens/elevation/overlay-geometry.js +7 -0
- package/dist/tokens/elevation/overlay-geometry.js.map +1 -0
- package/dist/tokens/motion/motion.d.ts +15 -0
- package/dist/tokens/motion/motion.d.ts.map +1 -0
- package/dist/tokens/motion/motion.js +9 -0
- package/dist/tokens/motion/motion.js.map +1 -0
- package/dist/tokens/uiSize/icon-size.d.ts +53 -0
- package/dist/tokens/uiSize/icon-size.d.ts.map +1 -0
- package/package.json +92 -0
- package/src/README.md +32 -0
- package/src/components/Accordion/accordion.tsx +104 -0
- package/src/components/Alert/alert.tsx +188 -0
- package/src/components/AppShell/_demo-helpers.tsx +198 -0
- package/src/components/AppShell/app-shell.tsx +364 -0
- package/src/components/AspectRatio/aspect-ratio.tsx +58 -0
- package/src/components/Avatar/avatar.tsx +368 -0
- package/src/components/Badge/badge.tsx +104 -0
- package/src/components/Breadcrumb/breadcrumb.tsx +619 -0
- package/src/components/BulkActionBar/bulk-action-bar.tsx +156 -0
- package/src/components/Button/button-group.tsx +96 -0
- package/src/components/Button/button.tsx +539 -0
- package/src/components/Calendar/calendar.tsx +411 -0
- package/src/components/Carousel/carousel.tsx +371 -0
- package/src/components/Chart/chart.tsx +376 -0
- package/src/components/Checkbox/checkbox-group.tsx +94 -0
- package/src/components/Checkbox/checkbox.tsx +237 -0
- package/src/components/Chip/chip.tsx +359 -0
- package/src/components/CircularProgress/circular-progress.tsx +204 -0
- package/src/components/Coachmark/coachmark.tsx +255 -0
- package/src/components/Combobox/combobox.tsx +826 -0
- package/src/components/Command/command.tsx +187 -0
- package/src/components/DataTable/active-editor-controller.ts +72 -0
- package/src/components/DataTable/cell-registry.tsx +520 -0
- package/src/components/DataTable/column-types.ts +180 -0
- package/src/components/DataTable/data-table-column-visibility-panel.tsx +261 -0
- package/src/components/DataTable/data-table-filter-panel.tsx +813 -0
- package/src/components/DataTable/data-table-interaction-layer.tsx +483 -0
- package/src/components/DataTable/data-table-sort-manager.tsx +210 -0
- package/src/components/DataTable/data-table.css +165 -0
- package/src/components/DataTable/data-table.tsx +2924 -0
- package/src/components/DataTable/filter-operators.ts +225 -0
- package/src/components/DataTable/filter-tree.ts +313 -0
- package/src/components/DataTable/lib/column-meta.ts +79 -0
- package/src/components/DateGrid/date-grid.tsx +209 -0
- package/src/components/DatePicker/date-picker.tsx +1114 -0
- package/src/components/DescriptionList/description-list.tsx +141 -0
- package/src/components/Dialog/dialog.tsx +267 -0
- package/src/components/DropdownMenu/dropdown-menu.tsx +475 -0
- package/src/components/Empty/empty.tsx +108 -0
- package/src/components/Field/field-context.ts +136 -0
- package/src/components/Field/field-types.ts +52 -0
- package/src/components/Field/field-wrapper.tsx +348 -0
- package/src/components/Field/field.tsx +535 -0
- package/src/components/FieldControlGroup/field-control-group.tsx +136 -0
- package/src/components/FileItem/file-item.tsx +322 -0
- package/src/components/FileUpload/file-upload.tsx +326 -0
- package/src/components/FileViewer/file-viewer-types.ts +76 -0
- package/src/components/FileViewer/file-viewer.tsx +1065 -0
- package/src/components/FileViewer/image-renderer.tsx +256 -0
- package/src/components/HoverCard/hover-card.tsx +79 -0
- package/src/components/Input/input.tsx +233 -0
- package/src/components/LinkInput/link-input.tsx +304 -0
- package/src/components/Menu/menu-item.tsx +334 -0
- package/src/components/NameCard/name-card.tsx +319 -0
- package/src/components/Notice/notice.tsx +196 -0
- package/src/components/NumberInput/number-input.tsx +203 -0
- package/src/components/OverflowIndicator/overflow-indicator.tsx +156 -0
- package/src/components/PeoplePicker/avatar-stack-overflow.ts +100 -0
- package/src/components/PeoplePicker/people-picker-helpers.ts +76 -0
- package/src/components/PeoplePicker/people-picker.tsx +455 -0
- package/src/components/PeoplePicker/person-display.tsx +358 -0
- package/src/components/Popover/popover.tsx +183 -0
- package/src/components/ProgressBar/progress-bar.tsx +157 -0
- package/src/components/README.md +58 -0
- package/src/components/RadioGroup/radio-group.tsx +261 -0
- package/src/components/Rating/rating.tsx +295 -0
- package/src/components/ScrollArea/scroll-area.tsx +110 -0
- package/src/components/SegmentedControl/segmented-control.tsx +304 -0
- package/src/components/Select/select.tsx +658 -0
- package/src/components/SelectMenu/select-menu.tsx +430 -0
- package/src/components/SelectionControl/selection-item.tsx +261 -0
- package/src/components/Separator/separator.tsx +48 -0
- package/src/components/Sheet/sheet.tsx +240 -0
- package/src/components/Sidebar/sidebar.tsx +1280 -0
- package/src/components/Skeleton/skeleton.tsx +35 -0
- package/src/components/Slider/slider.tsx +158 -0
- package/src/components/Steps/steps.tsx +850 -0
- package/src/components/Switch/switch.tsx +285 -0
- package/src/components/Tabs/tabs.tsx +515 -0
- package/src/components/Tag/tag.tsx +246 -0
- package/src/components/Textarea/textarea.tsx +280 -0
- package/src/components/TimePicker/time-columns.tsx +260 -0
- package/src/components/TimePicker/time-picker.tsx +419 -0
- package/src/components/Toast/toast.tsx +129 -0
- package/src/components/Tooltip/tooltip.tsx +68 -0
- package/src/components/TreeView/tree-view.tsx +1031 -0
- package/src/hooks/use-controllable.ts +40 -0
- package/src/hooks/use-is-narrow-viewport.ts +19 -0
- package/src/hooks/use-is-touch-device.ts +21 -0
- package/src/hooks/use-overflow-items.ts +256 -0
- package/src/index.ts +85 -0
- package/src/lib/README.md +82 -0
- package/src/lib/drag-visual.ts +272 -0
- package/src/lib/i18n/README.md +60 -0
- package/src/lib/i18n/i18n-context.tsx +129 -0
- package/src/lib/multi-select-ordering.ts +61 -0
- package/src/lib/utils.ts +93 -0
- package/src/patterns/README.md +67 -0
- package/src/patterns/element-anatomy/item-anatomy.tsx +744 -0
- package/src/patterns/header-canonical/chrome-header.tsx +175 -0
- package/src/patterns/header-canonical/header-canonical.css +27 -0
- package/src/patterns/horizontal-overflow/horizontal-overflow.tsx +217 -0
- package/src/patterns/overlay-surface/overlay-surface.tsx +191 -0
- package/src/patterns/resize-handle/resize-handle.tsx +188 -0
- package/src/stories-helpers/anatomy/anatomy-utils.tsx +64 -0
- package/src/styles/preset.css +31 -0
- package/src/styles/tokens.css +35 -0
- package/src/tokens/README.md +53 -0
- package/src/tokens/color/primitives.css +429 -0
- package/src/tokens/color/semantic.css +539 -0
- package/src/tokens/elevation/overlay-geometry.ts +13 -0
- package/src/tokens/layoutSpace/layoutSpace.css +36 -0
- package/src/tokens/motion/motion.css +30 -0
- package/src/tokens/motion/motion.ts +17 -0
- package/src/tokens/opacity/opacity.css +23 -0
- package/src/tokens/radius/radius.css +19 -0
- package/src/tokens/typography/typography.css +118 -0
- package/src/tokens/uiSize/icon-size.ts +52 -0
- package/src/tokens/uiSize/uiSize.css +125 -0
|
@@ -0,0 +1,539 @@
|
|
|
1
|
+
/* ═══════════════════════════════════════════════════════════════════════
|
|
2
|
+
Semantic Tokens — Layer 2
|
|
3
|
+
═══════════════════════════════════════════════════════════════════════
|
|
4
|
+
|
|
5
|
+
架構流派:Atlassian-style Semantic State Token(見 color.spec.md「架構流派定位」)
|
|
6
|
+
核心原則:靜態色用 primitive(無 mode 知識),互動狀態用 semantic(封裝 mode swap)
|
|
7
|
+
|
|
8
|
+
┌─ 元件如何消費 ──────────────────────────────────────────────────────┐
|
|
9
|
+
│ Button / Checkbox / Badge(語義元件) │
|
|
10
|
+
│ → 用 semantic 全套:--primary、--primary-hover、--primary-text │
|
|
11
|
+
│ │
|
|
12
|
+
│ Tag / Avatar(分類元件)— 有意的混合存取 │
|
|
13
|
+
│ → 靜態色用 primitive:--color-blue-1、--color-blue-6、-7 │
|
|
14
|
+
│ (bg、subtle、text 沒有 mode 翻轉問題) │
|
|
15
|
+
│ → 互動色用 semantic hue token:--blue-hover、--blue-active │
|
|
16
|
+
│ (hover/active 需要 dark mode swap,必須住 semantic 層) │
|
|
17
|
+
│ │
|
|
18
|
+
│ ⚠ 「混合存取」不是 code smell——是有意的職責分離 │
|
|
19
|
+
│ 靜態色與互動狀態本來就是兩個不同概念,不該綁同一層。 │
|
|
20
|
+
│ Tailwind 也是同樣分離(bg-blue-500 vs hover:bg-blue-600)。 │
|
|
21
|
+
│ │
|
|
22
|
+
│ 分類 vs 語義為何兩條 namespace? │
|
|
23
|
+
│ Tag 的「藍」≠ semantic「primary」。改 primary 從藍變紫, │
|
|
24
|
+
│ Tag 的 blue variant 不該跟著變。所以分類用 primitive 解耦, │
|
|
25
|
+
│ semantic 用 purpose token 表達意圖。 │
|
|
26
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
27
|
+
|
|
28
|
+
┌─ 命名原則 ────────────────────────────────────────────────────────────┐
|
|
29
|
+
│ 短名稱(無 --color- 前綴),對應到 Layer 1 原始色票 │
|
|
30
|
+
│ 以語義 purpose 命名(primary / error / info / success / warning…) │
|
|
31
|
+
│ shadcn compat aliases 已於 2026-04-18 全數移除 │
|
|
32
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
33
|
+
|
|
34
|
+
┌─ Surface 分層(非常重要)────────────────────────────────────────────┐
|
|
35
|
+
│ --canvas 頁面最底層(HTML body 背景) │
|
|
36
|
+
│ --surface 非遮蓋型容器(card、sidebar、table 等) │
|
|
37
|
+
│ dark mode 使用半透明,可疊加在 canvas 上 │
|
|
38
|
+
│ --surface-raised 遮蓋型浮層(modal、popover、dropdown、lightbox) │
|
|
39
|
+
│ 必須不透明,避免底層內容透出 │
|
|
40
|
+
│ **含 overlay 內 chrome**:FileViewer toolbar / │
|
|
41
|
+
│ filmstrip / sidebar、Dialog footer 等 raised │
|
|
42
|
+
│ surface 都套此 token(不用 canvas、不用 surface) │
|
|
43
|
+
│ --overlay backdrop 遮罩(dialog 背後的半透明黑) │
|
|
44
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
45
|
+
|
|
46
|
+
┌─ 文字 / Icon 層級 ───────────────────────────────────────────────────┐
|
|
47
|
+
│ --foreground 一般資訊(neutral-9) │
|
|
48
|
+
│ --fg-secondary 較次要的資訊、helper text(neutral-8) │
|
|
49
|
+
│ --fg-muted placeholder、caption、弱化 icon(neutral-7) │
|
|
50
|
+
│ --fg-disabled disabled 文字(neutral-6) │
|
|
51
|
+
│ │
|
|
52
|
+
│ 文字色一律使用 neutral alpha,透明度疊加在任何背景皆可維持對比 │
|
|
53
|
+
│ 弱化 icon hover 後變 fg-secondary(neutral-8) │
|
|
54
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
55
|
+
|
|
56
|
+
┌─ 互動狀態(引用色盤 step)─────────────────────────────────────────────┐
|
|
57
|
+
│ Light: hover = step -5(較亮),active = step -7(較暗) │
|
|
58
|
+
│ Dark: hover = step -7(較亮),active = step -5(較暗) │
|
|
59
|
+
│ │
|
|
60
|
+
│ 相對色階公式保證 -5 永遠比 base 亮、-7 永遠比 base 暗。 │
|
|
61
|
+
│ 高亮度色相(yellow 等)的 hover gap 較小,這是物理事實—— │
|
|
62
|
+
│ cursor 變化 + 細微色移疊加仍提供足夠回饋。 │
|
|
63
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
64
|
+
|
|
65
|
+
┌─ 邊框 / 分隔 ─────────────────────────────────────────────────────────┐
|
|
66
|
+
│ --border 元件邊框(neutral-5) │
|
|
67
|
+
│ --border-hover input/checkbox/radio hover 邊框(neutral-6) │
|
|
68
|
+
│ --divider 分隔線(neutral-4,比 border 更淡) │
|
|
69
|
+
│ --ring focus 輪廓(= primary) │
|
|
70
|
+
│ 選中狀態的邊框或文字 → 直接使用 var(--primary-hover) │
|
|
71
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
72
|
+
|
|
73
|
+
┌─ Static Subtle ─────────────────────────────────────────────────────┐
|
|
74
|
+
│ --muted 弱化底色 Tag neutral(neutral-2) │
|
|
75
|
+
│ --secondary Badge low 底色(neutral-3,比 muted 深一階) │
|
|
76
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
77
|
+
|
|
78
|
+
┌─ 中性互動背景(兩個獨立 family)─────────────────────────────────────┐
|
|
79
|
+
│ Default state family(non-selected element 的互動) │
|
|
80
|
+
│ --neutral-hover hover 回饋 = neutral-1 │
|
|
81
|
+
│ --neutral-active :active click 回饋 = neutral-2 │
|
|
82
|
+
│ │
|
|
83
|
+
│ Selected state family(toggle on / 持續選中 element 的互動) │
|
|
84
|
+
│ --neutral-selected rest 持續選中 = neutral-2 │
|
|
85
|
+
│ --neutral-selected-hover hover(變淺) = neutral-1 │
|
|
86
|
+
│ --neutral-selected-active :active 深一階 = neutral-3 │
|
|
87
|
+
│ │
|
|
88
|
+
│ --bg-disabled 互動元件 disabled 背景 = neutral-2 │
|
|
89
|
+
│ │
|
|
90
|
+
│ ⚠ active vs selected 語意區分(見 color.spec.md「active vs selected」)│
|
|
91
|
+
│ active = :active 瞬間 click 回饋(transient) │
|
|
92
|
+
│ selected = 持續 toggle on / 長時間選中狀態(persistent) │
|
|
93
|
+
│ 值相同不代表應合併 token——語意獨立就該是獨立 token, │
|
|
94
|
+
│ 未來若 selected 視覺需獨立演化不影響 active。 │
|
|
95
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
96
|
+
|
|
97
|
+
┌─ Nested Theme 架構 ─────────────────────────────────────────────────┐
|
|
98
|
+
│ CSS 變數在定義元素解析,子孫繼承的是結果不是 var() 表達式。 │
|
|
99
|
+
│ 為了支援 nested theme(如 tooltip 內 data-theme="dark"), │
|
|
100
|
+
│ 所有語義 token 用 :root, [data-theme] 定義, │
|
|
101
|
+
│ 每個 theme 邊界重新解析。 │
|
|
102
|
+
│ │
|
|
103
|
+
│ 三層結構: │
|
|
104
|
+
│ ① :root — 只有 --brand(永遠不變) │
|
|
105
|
+
│ ② :root, [data-theme] — 所有語義 token(default = light) │
|
|
106
|
+
│ ③ [data-theme="dark"] — 只覆寫跟 light 不同的值 │
|
|
107
|
+
│ │
|
|
108
|
+
│ 判斷標準只有一個:「這個 token 在 dark 要不要變?」 │
|
|
109
|
+
│ 要 → ② 寫 light 預設,③ 覆寫 dark 值 │
|
|
110
|
+
│ 不要 → 只寫在 ② │
|
|
111
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
112
|
+
|
|
113
|
+
┌─ Tailwind utility 一覽(@theme inline 橋接)─────────────────────────┐
|
|
114
|
+
│ Surface bg-canvas / bg-surface / bg-surface-raised │
|
|
115
|
+
│ bg-overlay / bg-tooltip │
|
|
116
|
+
│ Text level text-foreground / text-fg-secondary / text-fg-muted │
|
|
117
|
+
│ text-fg-disabled / text-inverse-fg │
|
|
118
|
+
│ Semantic bg-primary / bg-info / bg-error / bg-success / bg-warning│
|
|
119
|
+
│ (base) text-{primary|info|error|success|warning} │
|
|
120
|
+
│ (hover) hover:bg-{primary|info|error|success|warning}-hover │
|
|
121
|
+
│ (active) active:bg-{primary|info|error|success|warning}-active │
|
|
122
|
+
│ (subtle) bg-{primary|info|error|success|warning}-subtle │
|
|
123
|
+
│ (text) text-{info|error|success|warning}-text │
|
|
124
|
+
│ ↑ 用於 subtle bg 上的文字(資訊呈現) │
|
|
125
|
+
│ Special text-warning-foreground(yellow solid 例外) │
|
|
126
|
+
│ Neutral bg-neutral-hover / bg-neutral-active / bg-disabled │
|
|
127
|
+
│ bg-neutral-selected / bg-neutral-selected-hover / │
|
|
128
|
+
│ bg-neutral-selected-active │
|
|
129
|
+
│ bg-muted / bg-secondary │
|
|
130
|
+
│ Border border-border / border-border-hover / border-divider │
|
|
131
|
+
│ Focus ring-ring │
|
|
132
|
+
│ Inverse bg-inverse-neutral-hover / bg-inverse-neutral-active │
|
|
133
|
+
│ (solid neutral 上的互動 overlay) │
|
|
134
|
+
│ │
|
|
135
|
+
│ Tag/Avatar 的色相 hover/active 用 var() 直接引用: │
|
|
136
|
+
│ hover: var(--blue-hover) / var(--red-hover) / ... │
|
|
137
|
+
│ (不橋接成 utility class——只有 Tag/Avatar dismiss 一個 consumer)│
|
|
138
|
+
└─────────────────────────────────────────────────────────────────────┘
|
|
139
|
+
|
|
140
|
+
選中邊框/文字 → border-[var(--primary-hover)] / text-[var(--primary-hover)]
|
|
141
|
+
═══════════════════════════════════════════════════════════════════════ */
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
/* ── ① Fixed — 永遠不變,不隨 theme 切換 ── */
|
|
145
|
+
:root {
|
|
146
|
+
--brand: #DF3232;
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
/* ── ② All Semantic Tokens(default = light)──
|
|
151
|
+
:root, [data-theme] 讓每個 theme 邊界重新解析。
|
|
152
|
+
所有語義 token 都在這裡。dark 要改的在 ③ 覆寫。 */
|
|
153
|
+
:root, [data-theme] {
|
|
154
|
+
|
|
155
|
+
/* Surface — 2026-05-20 fix(user 抓 raw oklch 違反 semantic 直指 primitive 規則):
|
|
156
|
+
從 raw oklch(1 0 0) 改指 primitive --color-white(L66 absolute anchor) */
|
|
157
|
+
--canvas: var(--color-white);
|
|
158
|
+
--surface: var(--color-white);
|
|
159
|
+
--surface-raised: var(--color-white);
|
|
160
|
+
/* --surface-strong:強 emphasis 中性 surface(2026-05-07 v15.15 user 拍板 final)。
|
|
161
|
+
Material 3 `surface-container-high` / Atlassian `color.background.neutral.bold` 對應。
|
|
162
|
+
用途:avatar overlay dismiss button bg / overflow indicator badge / 強調中性 surface。
|
|
163
|
+
hover 兩 mode 都走 neutral-7-opaque(step-7 在 dark mode 自動 lighter 公式 →
|
|
164
|
+
對稱「engaged」感:light hover 變深 / dark hover 變亮)。
|
|
165
|
+
**用 -opaque variant**(對齊 `--surface-raised` 既有 opaque convention):surface 是
|
|
166
|
+
視覺底色 layer,alpha 跟下層 bg compositing 致視覺位移 + colorMix accuracy 不可靠。 */
|
|
167
|
+
--surface-strong: var(--color-neutral-6-opaque);
|
|
168
|
+
--surface-strong-hover: var(--color-neutral-7-opaque);
|
|
169
|
+
--overlay: var(--black-a45);
|
|
170
|
+
--tooltip: var(--color-neutral-9-opaque);
|
|
171
|
+
|
|
172
|
+
/* 文字 / Icon */
|
|
173
|
+
--foreground: var(--color-neutral-9);
|
|
174
|
+
--warning-foreground: var(--black-a85);
|
|
175
|
+
--fg-secondary: var(--color-neutral-8);
|
|
176
|
+
--fg-muted: var(--color-neutral-7);
|
|
177
|
+
--fg-disabled: var(--color-neutral-6);
|
|
178
|
+
|
|
179
|
+
/* On-emphasis:飽和色底的對比文字(white on filled surface)
|
|
180
|
+
消費者:Avatar color variants(blue/red/green/... fill + on-emphasis text)
|
|
181
|
+
Steps filled indicator(completed/active 的 icon 色)
|
|
182
|
+
為什麼獨立 token:foreground 是 neutral 文字色,warning-foreground 是 warning
|
|
183
|
+
子場景 amber 底的對比,都不是「任何飽和色底的通用對比」。Polaris 叫 text-onEmphasis,
|
|
184
|
+
Material 叫 on-primary/on-secondary family。我們用 on-emphasis 保持通用。
|
|
185
|
+
Dark mode 不反轉(白字在飽和色底永遠白)
|
|
186
|
+
2026-05-20 fix:raw oklch → primitive --color-white */
|
|
187
|
+
--on-emphasis: var(--color-white);
|
|
188
|
+
|
|
189
|
+
/* Brand / Action — 品牌主操作色
|
|
190
|
+
--primary-text 為 SOP 規定的 5 件套之一,目前無消費者
|
|
191
|
+
(Button 直接用 text-white, Tag 用 primitive --color-blue-7) */
|
|
192
|
+
--primary: var(--color-blue-6);
|
|
193
|
+
--primary-hover: var(--color-blue-5);
|
|
194
|
+
--primary-active: var(--color-blue-7);
|
|
195
|
+
--primary-subtle: var(--color-blue-1);
|
|
196
|
+
--primary-text: var(--color-blue-7);
|
|
197
|
+
|
|
198
|
+
/* Status: Info — 資訊狀態色
|
|
199
|
+
目前指向 blue(與 primary 同源),但語義獨立——如未來 brand 改色,
|
|
200
|
+
primary 跟著改,info 仍維持「資訊=藍」的通用慣例 */
|
|
201
|
+
--info: var(--color-blue-6);
|
|
202
|
+
--info-hover: var(--color-blue-5);
|
|
203
|
+
--info-active: var(--color-blue-7);
|
|
204
|
+
--info-subtle: var(--color-blue-1);
|
|
205
|
+
--info-text: var(--color-blue-7);
|
|
206
|
+
|
|
207
|
+
/* Status: Error — 指向 primitive deep-orange */
|
|
208
|
+
--error: var(--color-deep-orange-6);
|
|
209
|
+
--error-hover: var(--color-deep-orange-5);
|
|
210
|
+
--error-active: var(--color-deep-orange-7);
|
|
211
|
+
--error-subtle: var(--color-deep-orange-1);
|
|
212
|
+
--error-text: var(--color-deep-orange-7);
|
|
213
|
+
|
|
214
|
+
/* Status: Success — 指向 primitive green */
|
|
215
|
+
--success: var(--color-green-6);
|
|
216
|
+
--success-hover: var(--color-green-5);
|
|
217
|
+
--success-active: var(--color-green-7);
|
|
218
|
+
--success-subtle: var(--color-green-1);
|
|
219
|
+
--success-text: var(--color-green-7);
|
|
220
|
+
|
|
221
|
+
/* Status: Warning — 指向 primitive yellow */
|
|
222
|
+
--warning: var(--color-yellow-6);
|
|
223
|
+
--warning-hover: var(--color-yellow-5);
|
|
224
|
+
--warning-active: var(--color-yellow-7);
|
|
225
|
+
--warning-subtle: var(--color-yellow-1);
|
|
226
|
+
--warning-text: var(--color-yellow-7);
|
|
227
|
+
|
|
228
|
+
/* Hue Interaction Tokens — 色相 bg 的 hover / active 互動狀態
|
|
229
|
+
─────────────────────────────────────────────────────────────────
|
|
230
|
+
用途:作為 bg 使用的飽和色相(Tag/Avatar solid 等)的 hover/active 狀態。
|
|
231
|
+
|
|
232
|
+
設計原則:跟 --primary-hover/active 同模式——solid 色彩 shade change
|
|
233
|
+
(hover 較亮 step、active 較暗 step),跨整個設計系統視覺一致。
|
|
234
|
+
|
|
235
|
+
存在原因:直接用 primitive `--color-{hue}-5/7` 在 dark mode 公式翻轉
|
|
236
|
+
方向錯誤,需要 semantic 層做 dark mode swap 維持「hover lift / active
|
|
237
|
+
press」方向跨 mode 一致。
|
|
238
|
+
|
|
239
|
+
刻意只有 hover/active:base/subtle/text 必須直接用 primitive
|
|
240
|
+
(`--color-{hue}-6` / `-1` / `-7`)。沒有 `--blue` base 或 `--blue-subtle`
|
|
241
|
+
等 token,避免重新引入完整 categorical 層。
|
|
242
|
+
|
|
243
|
+
不要混淆為「categorical 復辟」:這是 semantic 互動 token 從 brand color
|
|
244
|
+
擴展到所有作為 bg 的色相,跟 --primary-hover 同邏輯、同層級。
|
|
245
|
+
───────────────────────────────────────────────────────────────── */
|
|
246
|
+
--blue-hover: var(--color-blue-5);
|
|
247
|
+
--blue-active: var(--color-blue-7);
|
|
248
|
+
/* 2026-05-20 fix(codex Layer B D1 Bug 1):red 之前誤映射 deep-orange,red 跟 deep-orange 是
|
|
249
|
+
primitive 12 hue 內兩個 distinct 色相(hue 25 vs 38;lightness 0.46 vs 0.58)。red/error
|
|
250
|
+
不該共名空間 — `--error-*` semantic 自己直接指 primitive deep-orange,`--red-*` hue
|
|
251
|
+
interaction 必指 primitive red。 */
|
|
252
|
+
--red-hover: var(--color-red-5);
|
|
253
|
+
--red-active: var(--color-red-7);
|
|
254
|
+
--deep-orange-hover: var(--color-deep-orange-5);
|
|
255
|
+
--deep-orange-active: var(--color-deep-orange-7);
|
|
256
|
+
--orange-hover: var(--color-orange-5);
|
|
257
|
+
--orange-active: var(--color-orange-7);
|
|
258
|
+
--amber-hover: var(--color-amber-5);
|
|
259
|
+
--amber-active: var(--color-amber-7);
|
|
260
|
+
--lime-hover: var(--color-lime-5);
|
|
261
|
+
--lime-active: var(--color-lime-7);
|
|
262
|
+
--green-hover: var(--color-green-5);
|
|
263
|
+
--green-active: var(--color-green-7);
|
|
264
|
+
--yellow-hover: var(--color-yellow-5);
|
|
265
|
+
--yellow-active: var(--color-yellow-7);
|
|
266
|
+
--turquoise-hover: var(--color-turquoise-5);
|
|
267
|
+
--turquoise-active: var(--color-turquoise-7);
|
|
268
|
+
--purple-hover: var(--color-purple-5);
|
|
269
|
+
--purple-active: var(--color-purple-7);
|
|
270
|
+
--magenta-hover: var(--color-magenta-5);
|
|
271
|
+
--magenta-active: var(--color-magenta-7);
|
|
272
|
+
--indigo-hover: var(--color-indigo-5);
|
|
273
|
+
--indigo-active: var(--color-indigo-7);
|
|
274
|
+
|
|
275
|
+
/* Inverse — solid neutral(neutral-9)背景上的內容
|
|
276
|
+
neutral 在 dark mode 反轉(近黑 → 近白),上面的文字與互動覆蓋層也要反轉
|
|
277
|
+
- --inverse-fg 對應 --foreground(文字 base)
|
|
278
|
+
- --inverse-neutral-hover/active 對應 --neutral-hover/active(互動覆蓋層)
|
|
279
|
+
- 未來擴充:--inverse-fg-secondary/muted/disabled 對齊 --fg-* 變體
|
|
280
|
+
|
|
281
|
+
┌─ Inverse-neutral-* 數值規則(嚴格對稱)─────────────────────────┐
|
|
282
|
+
│ --inverse-neutral-* 在某 mode 的值 = --neutral-* 在「另一 mode」 │
|
|
283
|
+
│ 的值。即 inverse 是 neutral 的 mode 鏡射。 │
|
|
284
|
+
│ │
|
|
285
|
+
│ light --inverse-neutral-hover = white @ 4% (= dark neutral-1) │
|
|
286
|
+
│ light --inverse-neutral-active = white @ 8% (= dark neutral-2) │
|
|
287
|
+
│ dark --inverse-neutral-hover = black @ 2% (= light neutral-1) │
|
|
288
|
+
│ dark --inverse-neutral-active = black @ 4% (= light neutral-2) │
|
|
289
|
+
│ │
|
|
290
|
+
│ 好處:完全對稱、重用既有 tuned values、自動繼承感知補償 │
|
|
291
|
+
└────────────────────────────────────────────────────────────────┘
|
|
292
|
+
2026-05-20 fix:raw oklch → primitive --color-white(light)/ --black-a85(dark)*/
|
|
293
|
+
--inverse-fg: var(--color-white);
|
|
294
|
+
--inverse-neutral-hover: var(--white-a04);
|
|
295
|
+
--inverse-neutral-active: var(--white-a08);
|
|
296
|
+
|
|
297
|
+
/* Notification */
|
|
298
|
+
--notification: var(--color-deep-orange-6);
|
|
299
|
+
|
|
300
|
+
/* Presence Status — 使用者線上狀態指示(Avatar 右下角 badge)
|
|
301
|
+
語義 token 而非直接用 --success / --error / --warning,因為 presence 與
|
|
302
|
+
「操作成功 / 操作錯誤 / 警告」語境不同,未來可能獨立演化(例如 brand 要
|
|
303
|
+
把 online 改成更明顯的霓虹綠)。世界級對照:Slack / Teams / Discord /
|
|
304
|
+
Linear 都有獨立的 presence namespace */
|
|
305
|
+
--status-online: var(--color-green-6); /* 在線(對齊 success 色相) */
|
|
306
|
+
--status-busy: var(--color-deep-orange-6); /* 忙碌(對齊 error 色相,強烈可見) */
|
|
307
|
+
--status-away: var(--color-yellow-6); /* 離開(對齊 warning 色相) */
|
|
308
|
+
--status-offline: var(--color-neutral-6-opaque); /* 離線(neutral,弱化;2026-05-15 user 拍板 → opaque tier 對齊 --border-opaque / --surface-strong alpha-immune idiom,避免 status dot 疊在非白 bg cell 時 alpha compositing 致視覺漂移)*/
|
|
309
|
+
|
|
310
|
+
/* Border / Divider */
|
|
311
|
+
--border: var(--color-neutral-5); /* 元件標準邊框 */
|
|
312
|
+
--border-hover: var(--color-neutral-6); /* input、checkbox、radio hover 邊框 */
|
|
313
|
+
--border-opaque: var(--color-neutral-5-opaque); /* 視覺等同 --border (#D9D9D9 on white)但 alpha-immune。何時用:cell bg 非白 (e.g. disabled 灰底 / nested surface) 時,alpha 邊框會跟 bg compositing 致視覺位移。用此 token 維持邊框視覺一致。對齊 Ant colorBorderSecondary solid idiom。一般白底場景仍用 --border (alpha) */
|
|
314
|
+
--divider: var(--color-neutral-4); /* 分隔線,比 border 更淡 */
|
|
315
|
+
--ring: var(--primary); /* focus ring */
|
|
316
|
+
|
|
317
|
+
/* Neutral Interactive — Default state family
|
|
318
|
+
用於 non-selected element 的互動回饋 */
|
|
319
|
+
--neutral-hover: var(--color-neutral-1);
|
|
320
|
+
--neutral-active: var(--color-neutral-2);
|
|
321
|
+
--bg-disabled: var(--color-neutral-2);
|
|
322
|
+
|
|
323
|
+
/* Neutral Interactive — Selected state family
|
|
324
|
+
─────────────────────────────────────────────────────────────
|
|
325
|
+
用於 toggle on / 持續選中 element 的互動回饋。
|
|
326
|
+
|
|
327
|
+
值與 default family 可能重疊,但語意獨立——未來若 selected
|
|
328
|
+
視覺需獨立演化(例:改用 brand tint),只需改此組不影響 default。
|
|
329
|
+
|
|
330
|
+
命名對齊既有 --inverse-neutral-* 的 compound namespace 模式:
|
|
331
|
+
namespace = neutral-selected(複合)
|
|
332
|
+
role = hover / active
|
|
333
|
+
|
|
334
|
+
語意區分(見 color.spec.md「active vs selected」):
|
|
335
|
+
--neutral-active = :active 瞬間 click 回饋(transient)
|
|
336
|
+
--neutral-selected = 持續 toggle on / 長時間選中(persistent)
|
|
337
|
+
|
|
338
|
+
典型消費者:Button text variant pressed、DropdownMenu 單選項目、
|
|
339
|
+
SelectMenu 單選項目、Tab active、menu item selected。 */
|
|
340
|
+
--neutral-selected: var(--color-neutral-2);
|
|
341
|
+
--neutral-selected-hover: var(--color-neutral-1);
|
|
342
|
+
--neutral-selected-active: var(--color-neutral-3);
|
|
343
|
+
|
|
344
|
+
/* Static Subtle — 靜態弱化背景(2026-05-20 v3 註解濃縮原則,SSOT 詳 color.spec.md「Static Subtle Background」段)*/
|
|
345
|
+
/* 判斷:「這元素是『還沒準備好 / 不可操作 / placeholder』嗎?」是 → muted / 否,只是視覺退後 → secondary */
|
|
346
|
+
--muted: var(--color-neutral-2); /* 退化 / placeholder / locked surface:Skeleton / DataTable header / Calendar 非當月 / Alert neutral / scrollbar track */
|
|
347
|
+
--secondary: var(--color-neutral-3); /* 存在但視覺退後一級:Tag neutral / Slider rest / Badge low / FileItem progress / ProgressBar / CircularProgress / Steps fillBg */
|
|
348
|
+
|
|
349
|
+
/* Scrollbar — Lane / chrome / thumb(2026-05-09 抽 SSOT,DataTable fake + ScrollArea 共享)
|
|
350
|
+
Track 用 --muted(靜態 lane,非 disabled 元件 bg);Thumb 用 --border(中性低對比 chrome)。
|
|
351
|
+
對齊 shadcn ScrollArea(thumb=bg-border)/ MUI X DataGrid scrollbar slot / AG Grid grid theme tokens。
|
|
352
|
+
避免直接借 --bg-disabled(color.spec.md:169 語意 drift)— bg-disabled 是互動元件 disabled bg,跟 scrollbar lane 不同。 */
|
|
353
|
+
--scrollbar-track: var(--muted);
|
|
354
|
+
--scrollbar-thumb: var(--border);
|
|
355
|
+
--scrollbar-thumb-hover: var(--border-hover);
|
|
356
|
+
|
|
357
|
+
/* Chart categorical — 5 色類別標記(Chart 元件消費)
|
|
358
|
+
挑 step-6 確保對 surface-raised 的對比足夠,5 色差異明顯便於區分。
|
|
359
|
+
chart-1..5 固定到 primitive 而非 semantic(避免未來 brand swap 時 chart 跟著改 → 誤導 data viz)。 */
|
|
360
|
+
--chart-1: var(--color-blue-6);
|
|
361
|
+
--chart-2: var(--color-purple-6);
|
|
362
|
+
--chart-3: var(--color-green-6);
|
|
363
|
+
--chart-4: var(--color-yellow-7);
|
|
364
|
+
--chart-5: var(--color-deep-orange-6);
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
|
|
368
|
+
/* ── ③ Dark-Only — 覆寫與 light 不同的值 ──
|
|
369
|
+
同 specificity,後面贏,蓋掉 ② 的預設值。 */
|
|
370
|
+
[data-theme="dark"] {
|
|
371
|
+
|
|
372
|
+
/* Surface */
|
|
373
|
+
--canvas: var(--color-neutral-1-opaque);
|
|
374
|
+
--surface: var(--white-a08);
|
|
375
|
+
--surface-raised: var(--color-neutral-3-opaque);
|
|
376
|
+
/* --surface-strong:dark mode 跟 light 同 step(neutral-7-opaque),step-7 dark 公式自動 lighter → engaged */
|
|
377
|
+
--surface-strong: var(--color-neutral-6-opaque);
|
|
378
|
+
--surface-strong-hover: var(--color-neutral-7-opaque);
|
|
379
|
+
--overlay: var(--black-a65);
|
|
380
|
+
--tooltip: var(--color-neutral-5-opaque);
|
|
381
|
+
|
|
382
|
+
/* Semantic hover/active 方向反轉(dark: hover=step-7, active=step-5)
|
|
383
|
+
subtle 和 text 不需要覆寫——primitives 已在 dark mode 處理
|
|
384
|
+
(step-1 用 alpha 公式,step-7 用 lighter 公式) */
|
|
385
|
+
--primary-hover: var(--color-blue-7);
|
|
386
|
+
--primary-active: var(--color-blue-5);
|
|
387
|
+
--info-hover: var(--color-blue-7);
|
|
388
|
+
--info-active: var(--color-blue-5);
|
|
389
|
+
--error-hover: var(--color-deep-orange-7);
|
|
390
|
+
--error-active: var(--color-deep-orange-5);
|
|
391
|
+
--success-hover: var(--color-green-7);
|
|
392
|
+
--success-active: var(--color-green-5);
|
|
393
|
+
--warning-hover: var(--color-yellow-7);
|
|
394
|
+
--warning-active: var(--color-yellow-5);
|
|
395
|
+
|
|
396
|
+
/* Hue interaction tokens — 同樣的方向反轉(hover 永遠較亮、active 永遠較暗)
|
|
397
|
+
2026-05-20 fix(codex Layer B D1):red 改指 primitive red(非 deep-orange)+ 補 deep-orange /
|
|
398
|
+
orange / amber / lime 4 個 missing hue interaction(per primitive 12 hue full coverage)*/
|
|
399
|
+
--blue-hover: var(--color-blue-7);
|
|
400
|
+
--blue-active: var(--color-blue-5);
|
|
401
|
+
--red-hover: var(--color-red-7);
|
|
402
|
+
--red-active: var(--color-red-5);
|
|
403
|
+
--deep-orange-hover: var(--color-deep-orange-7);
|
|
404
|
+
--deep-orange-active: var(--color-deep-orange-5);
|
|
405
|
+
--orange-hover: var(--color-orange-7);
|
|
406
|
+
--orange-active: var(--color-orange-5);
|
|
407
|
+
--amber-hover: var(--color-amber-7);
|
|
408
|
+
--amber-active: var(--color-amber-5);
|
|
409
|
+
--lime-hover: var(--color-lime-7);
|
|
410
|
+
--lime-active: var(--color-lime-5);
|
|
411
|
+
--green-hover: var(--color-green-7);
|
|
412
|
+
--green-active: var(--color-green-5);
|
|
413
|
+
--yellow-hover: var(--color-yellow-7);
|
|
414
|
+
--yellow-active: var(--color-yellow-5);
|
|
415
|
+
--turquoise-hover: var(--color-turquoise-7);
|
|
416
|
+
--turquoise-active: var(--color-turquoise-5);
|
|
417
|
+
--purple-hover: var(--color-purple-7);
|
|
418
|
+
--purple-active: var(--color-purple-5);
|
|
419
|
+
--magenta-hover: var(--color-magenta-7);
|
|
420
|
+
--magenta-active: var(--color-magenta-5);
|
|
421
|
+
--indigo-hover: var(--color-indigo-7);
|
|
422
|
+
--indigo-active: var(--color-indigo-5);
|
|
423
|
+
|
|
424
|
+
/* Inverse — dark mode 反轉(深字 + 黑色透明 overlay)
|
|
425
|
+
overlay 值為 light mode neutral-* 的鏡射(black @ 2% / 4%)
|
|
426
|
+
2026-05-20 fix:raw oklch → primitive --black-a85(既有 alpha token,L46)*/
|
|
427
|
+
--inverse-fg: var(--black-a85);
|
|
428
|
+
--inverse-neutral-hover: var(--black-a02);
|
|
429
|
+
--inverse-neutral-active: var(--black-a04);
|
|
430
|
+
|
|
431
|
+
/* Chart — dark mode 用 step-5(較淡)提升對 dark surface 的可讀度 */
|
|
432
|
+
--chart-1: var(--color-blue-5);
|
|
433
|
+
--chart-2: var(--color-purple-5);
|
|
434
|
+
--chart-3: var(--color-green-5);
|
|
435
|
+
--chart-4: var(--color-yellow-5);
|
|
436
|
+
--chart-5: var(--color-deep-orange-5);
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
|
|
440
|
+
/* ── Tailwind Utility Bridge ── */
|
|
441
|
+
@theme inline {
|
|
442
|
+
|
|
443
|
+
/* Canvas / Surface */
|
|
444
|
+
--color-canvas: var(--canvas);
|
|
445
|
+
--color-surface: var(--surface);
|
|
446
|
+
--color-surface-raised: var(--surface-raised);
|
|
447
|
+
--color-surface-strong: var(--surface-strong);
|
|
448
|
+
--color-surface-strong-hover: var(--surface-strong-hover);
|
|
449
|
+
|
|
450
|
+
/* Foreground */
|
|
451
|
+
--color-foreground: var(--foreground);
|
|
452
|
+
--color-on-emphasis: var(--on-emphasis);
|
|
453
|
+
|
|
454
|
+
/* Primary */
|
|
455
|
+
--color-primary: var(--primary);
|
|
456
|
+
|
|
457
|
+
/* Secondary / Muted */
|
|
458
|
+
--color-secondary: var(--secondary);
|
|
459
|
+
--color-muted: var(--muted);
|
|
460
|
+
|
|
461
|
+
/* Status */
|
|
462
|
+
--color-info: var(--info);
|
|
463
|
+
--color-error: var(--error);
|
|
464
|
+
--color-success: var(--success);
|
|
465
|
+
--color-warning: var(--warning);
|
|
466
|
+
--color-warning-foreground: var(--warning-foreground);
|
|
467
|
+
--color-notification: var(--notification);
|
|
468
|
+
|
|
469
|
+
/* Presence Status(Avatar badge) */
|
|
470
|
+
--color-status-online: var(--status-online);
|
|
471
|
+
--color-status-busy: var(--status-busy);
|
|
472
|
+
--color-status-away: var(--status-away);
|
|
473
|
+
--color-status-offline: var(--status-offline);
|
|
474
|
+
|
|
475
|
+
/* Hover / Active */
|
|
476
|
+
--color-primary-hover: var(--primary-hover);
|
|
477
|
+
--color-primary-active: var(--primary-active);
|
|
478
|
+
--color-info-hover: var(--info-hover);
|
|
479
|
+
--color-info-active: var(--info-active);
|
|
480
|
+
--color-error-hover: var(--error-hover);
|
|
481
|
+
--color-error-active: var(--error-active);
|
|
482
|
+
--color-success-hover: var(--success-hover);
|
|
483
|
+
--color-success-active: var(--success-active);
|
|
484
|
+
--color-warning-hover: var(--warning-hover);
|
|
485
|
+
--color-warning-active: var(--warning-active);
|
|
486
|
+
|
|
487
|
+
/* Subtle */
|
|
488
|
+
--color-info-subtle: var(--info-subtle);
|
|
489
|
+
--color-primary-subtle: var(--primary-subtle);
|
|
490
|
+
--color-error-subtle: var(--error-subtle);
|
|
491
|
+
--color-success-subtle: var(--success-subtle);
|
|
492
|
+
--color-warning-subtle: var(--warning-subtle);
|
|
493
|
+
|
|
494
|
+
/* Text on subtle bg(step-7,不隨 dark mode 反轉) */
|
|
495
|
+
--color-info-text: var(--info-text);
|
|
496
|
+
--color-error-text: var(--error-text);
|
|
497
|
+
--color-success-text: var(--success-text);
|
|
498
|
+
--color-warning-text: var(--warning-text);
|
|
499
|
+
|
|
500
|
+
/* Inverse — solid neutral surface 上的內容 */
|
|
501
|
+
--color-inverse-fg: var(--inverse-fg);
|
|
502
|
+
--color-inverse-neutral-hover: var(--inverse-neutral-hover);
|
|
503
|
+
--color-inverse-neutral-active: var(--inverse-neutral-active);
|
|
504
|
+
|
|
505
|
+
/* Neutral Interaction — Default state */
|
|
506
|
+
--color-neutral-hover: var(--neutral-hover);
|
|
507
|
+
--color-neutral-active: var(--neutral-active);
|
|
508
|
+
--color-disabled: var(--bg-disabled);
|
|
509
|
+
|
|
510
|
+
/* Neutral Interaction — Selected state family */
|
|
511
|
+
--color-neutral-selected: var(--neutral-selected);
|
|
512
|
+
--color-neutral-selected-hover: var(--neutral-selected-hover);
|
|
513
|
+
--color-neutral-selected-active: var(--neutral-selected-active);
|
|
514
|
+
|
|
515
|
+
/* Surface Utility */
|
|
516
|
+
--color-overlay: var(--overlay);
|
|
517
|
+
--color-tooltip: var(--tooltip);
|
|
518
|
+
--color-divider: var(--divider);
|
|
519
|
+
|
|
520
|
+
/* Chart categorical(Chart 元件消費;data viz 用) */
|
|
521
|
+
--color-chart-1: var(--chart-1);
|
|
522
|
+
--color-chart-2: var(--chart-2);
|
|
523
|
+
--color-chart-3: var(--chart-3);
|
|
524
|
+
--color-chart-4: var(--chart-4);
|
|
525
|
+
--color-chart-5: var(--chart-5);
|
|
526
|
+
|
|
527
|
+
/* Text / Icon levels */
|
|
528
|
+
--color-fg-secondary: var(--fg-secondary);
|
|
529
|
+
--color-fg-muted: var(--fg-muted);
|
|
530
|
+
--color-fg-disabled: var(--fg-disabled);
|
|
531
|
+
|
|
532
|
+
/* Border / Ring */
|
|
533
|
+
--color-border: var(--border);
|
|
534
|
+
--color-border-hover: var(--border-hover);
|
|
535
|
+
--color-ring: var(--ring);
|
|
536
|
+
|
|
537
|
+
/* Branding */
|
|
538
|
+
--color-brand: var(--brand);
|
|
539
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Overlay geometry SSOT — Radix prop number constants(non-CSS-var,JS-side single source).
|
|
3
|
+
*
|
|
4
|
+
* Why JS const not CSS var:Radix `sideOffset` / `collisionPadding` 接 number prop,
|
|
5
|
+
* 不接 `var(--...)`。改值要動 5+ primitive default = 假 SSOT。本檔抽 const,
|
|
6
|
+
* primitive default 統一 import → 改值只動一處全部聯動。
|
|
7
|
+
*
|
|
8
|
+
* Canonical source:`elevation.spec.md` § 浮層間距 sideOffset。
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export const OVERLAY_SIDE_OFFSET = 8
|
|
12
|
+
|
|
13
|
+
export const OVERLAY_COLLISION_PADDING = 8
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/* Layout Space Tokens — md 為預設,lg 透過 attribute 覆寫 */
|
|
2
|
+
|
|
3
|
+
:root {
|
|
4
|
+
--layout-space-loose: 16px;
|
|
5
|
+
--layout-space-tight: 12px;
|
|
6
|
+
--layout-space-bottom: 48px; /* intentionally fixed — same in md and lg density (see spec) */
|
|
7
|
+
|
|
8
|
+
/* Item-level label ↔ description gap — typography mode aware(2026-04-23)
|
|
9
|
+
理論基礎:gap 由 **typography mode**(label + description 的 font-size / line-height 組合)決定。
|
|
10
|
+
同 mode 全 DS 永遠同 gap;不同 mode 可不同值。架構支援 per-mode 獨立調整。
|
|
11
|
+
目前 4 mode 都 2px(視覺統一 tight 間距)— 未來可獨立調整不牽動其他 mode。
|
|
12
|
+
Primary consumer:<ItemContent mode={...}> primitive,自動挑對應 token。
|
|
13
|
+
備註:本 DS「配對」(uiSize.spec.md)專指 Tag↔Field 等**元件 size 配對**,
|
|
14
|
+
跟本 token 表達的「label + desc typography 組合」不同概念,勿混淆。 */
|
|
15
|
+
--item-gap-label-desc-reading: 2px; /* reading: body(14/1.5) + body(14/1.5) — SelectionItem sm-md / Switch sm-md / DescriptionList / item-anatomy reading row */
|
|
16
|
+
--item-gap-label-desc-reading-lg: 2px; /* reading-lg: body-lg(16/1.5) + body(14/1.5) — Dialog / Sheet / Empty / FileUpload / Coachmark / NameCard / SelectionItem lg / Switch lg */
|
|
17
|
+
--item-gap-label-desc-scanning: 2px; /* scanning: body(14/1.3) + caption(12/1.3) — FileItem compact+rich / MenuItem sm-md / Steps sm-md */
|
|
18
|
+
--item-gap-label-desc-scanning-lg: 2px; /* scanning-lg:body-lg(16/1.3) + body(14/1.3) — MenuItem lg / Steps lg */
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
[data-layout-space="lg"],
|
|
22
|
+
[data-density="lg"] {
|
|
23
|
+
--layout-space-loose: 24px;
|
|
24
|
+
--layout-space-tight: 16px;
|
|
25
|
+
--layout-space-bottom: 48px; /* intentionally fixed — same in md and lg density (see spec) */
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/* 2026-04-22:md reset selector — subtree 宣告 `data-density="md"` / `data-layout-space="md"`
|
|
29
|
+
時必須能 reset 回 md default(對齊 uiSize md reset rationale,Meta-Pattern M3 Portal
|
|
30
|
+
subtree context drift) */
|
|
31
|
+
[data-layout-space="md"],
|
|
32
|
+
[data-density="md"] {
|
|
33
|
+
--layout-space-loose: 16px;
|
|
34
|
+
--layout-space-tight: 12px;
|
|
35
|
+
--layout-space-bottom: 48px;
|
|
36
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motion tokens — hover delay tier system.
|
|
3
|
+
*
|
|
4
|
+
* 2026-05-18 ship per user 拍板 #3A(3-tier hover delay token + 確保命名世界級)。
|
|
5
|
+
*
|
|
6
|
+
* Naming convention:
|
|
7
|
+
* --hover-delay-{tier}
|
|
8
|
+
*
|
|
9
|
+
* Tier semantics 對齊 world-class consensus(see motion.spec.md「世界級對照」段):
|
|
10
|
+
* - plain → passive hint | Tooltip 文字提示 | 500ms | Material 3 / Apple HIG / shadcn-Radix default 主流共識
|
|
11
|
+
* - rich → rich preview | HoverCard / NameCard | 700ms | 含 fetch / multi-section,避免列表掃視誤觸發
|
|
12
|
+
* - close → universal exit| 全部關閉延遲 | 200ms | UX research consensus accidental-hover 容錯
|
|
13
|
+
*
|
|
14
|
+
* 2026-05-20 user 拍板「太快很容易干擾人」+ B 選項(plain 500 / rich 700):
|
|
15
|
+
* - plain 200 → 500ms:對齊 Material 3 plain tooltip 500ms + Apple HIG ~500ms + shadcn-Radix default 500ms
|
|
16
|
+
* 主流共識(MUI 100ms / Ant 100ms 是 fast-tier 例外);200ms 偏快會打擾滑過列表的 user
|
|
17
|
+
* - rich 300 → 700ms:HoverCard 含 fetch + multi-section(NameCard avatar / actions),
|
|
18
|
+
* 需 user「真停留」才觸發;300ms 列表掃視易觸發 N 次 fetch
|
|
19
|
+
* - close 200ms 維持:close delay ≤ open delay UX 共識(user 誤滑出可回來)
|
|
20
|
+
*
|
|
21
|
+
* Rationale 命名:不用 component name(`tooltip` 太特定)、不用純數字(`delay-200` 用值不用語意)、
|
|
22
|
+
* 不用孤立縮寫(`hd-fast` 跨人不可讀)。`plain` / `rich` / `close` 對齊 Material rich-tooltip 公開文件 +
|
|
23
|
+
* DS 既有 `compact / rich` mode 詞彙一致(per `# 命名與語言一致性` 命名 3 test)。
|
|
24
|
+
*/
|
|
25
|
+
|
|
26
|
+
:root {
|
|
27
|
+
--hover-delay-plain: 500ms;
|
|
28
|
+
--hover-delay-rich: 700ms;
|
|
29
|
+
--hover-delay-close: 200ms;
|
|
30
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Motion tokens — JS mirror of `motion.css` for Radix/JS API consumers.
|
|
3
|
+
*
|
|
4
|
+
* Radix primitive props(`delayDuration` / `openDelay` / `closeDelay`)期望 number ms,
|
|
5
|
+
* 不認 CSS var。本 file 是 motion.css 對應 number value 鏡像;改值必同步兩處(或加 lint)。
|
|
6
|
+
*
|
|
7
|
+
* SSOT: `motion.css` + `motion.spec.md`。
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
/** 純文字提示(Tooltip)— passive hint。2026-05-20 200→500ms 對齊 Material 3 / Apple HIG / shadcn-Radix 主流 */
|
|
11
|
+
export const HOVER_DELAY_PLAIN_MS = 500
|
|
12
|
+
|
|
13
|
+
/** 內容預覽(HoverCard / NameCard)— rich preview。2026-05-20 300→700ms 避免列表掃視誤觸發 fetch */
|
|
14
|
+
export const HOVER_DELAY_RICH_MS = 700
|
|
15
|
+
|
|
16
|
+
/** 通用關閉延遲(所有 hover overlay)— accidental-hover 容錯 */
|
|
17
|
+
export const HOVER_DELAY_CLOSE_MS = 200
|