@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,141 @@
|
|
|
1
|
+
// @benchmark-unverified-blanket: file-level retraction per M22 (d) — claims herein not individually URL-cited; treat as unverified visual/usage rumor unless retrofit per-claim. Hook escape preserved.
|
|
2
|
+
import * as React from 'react'
|
|
3
|
+
import { cn } from '@/lib/utils'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* DescriptionList — 唯讀 label + value 展示
|
|
7
|
+
*
|
|
8
|
+
* HTML 語義:dl + dt + dd(跟 Atlassian、Shopify Polaris 對齊)。
|
|
9
|
+
*
|
|
10
|
+
* ── Typography(兩個方向都一致)──
|
|
11
|
+
* label (dt): text-body (14px) text-fg-secondary (neutral-8)
|
|
12
|
+
* value (dd): text-body (14px) text-foreground (neutral-9)
|
|
13
|
+
* 兩者都是 14px × 1.5 行高——層級靠色彩區分,不靠字體大小。
|
|
14
|
+
*
|
|
15
|
+
* ── direction(2026-04-20 新增)──
|
|
16
|
+
* vertical(預設):label 在上 / value 在下,適合長 value(地址、bio、說明段落)、
|
|
17
|
+
* form-like 資訊展示
|
|
18
|
+
* horizontal :label 左 / value 右對齊,適合短 value 的 metadata 列
|
|
19
|
+
* (檔案資訊、訂單詳情、settings summary)— Google Drive /
|
|
20
|
+
* Notion file info panel 模式
|
|
21
|
+
*
|
|
22
|
+
* ── divided(horizontal 專用,預設 false)──
|
|
23
|
+
* 每個 item 下方加 `border-b border-divider`,rows 視覺對齊。長列表、key 長度
|
|
24
|
+
* 不一時需要對齊格線才易讀 → 開 divided;短列表(< 4 rows)不需要。
|
|
25
|
+
*
|
|
26
|
+
* ── 間距 ──
|
|
27
|
+
* vertical: label → value(同 item 內): `var(--item-gap-label-desc)` token(預設 2px,item-anatomy SSOT)
|
|
28
|
+
* horizontal: label ↔ value: gap-x-4(16px)最小間距
|
|
29
|
+
* items 之間垂直 gap: layout-space-tight(density-aware)
|
|
30
|
+
* divided horizontal 模式:每 item py-[var(--layout-space-tight)](cell-like row 高度)
|
|
31
|
+
*/
|
|
32
|
+
|
|
33
|
+
export type DescriptionDirection = 'vertical' | 'horizontal'
|
|
34
|
+
|
|
35
|
+
interface DescriptionContextValue {
|
|
36
|
+
direction: DescriptionDirection
|
|
37
|
+
divided: boolean
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const DescriptionContext = React.createContext<DescriptionContextValue>({
|
|
41
|
+
direction: 'vertical',
|
|
42
|
+
divided: false,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export interface DescriptionListProps extends React.HTMLAttributes<HTMLDListElement> {
|
|
46
|
+
/** grid 欄數(vertical 才生效;horizontal 永遠單欄),預設 1 */
|
|
47
|
+
cols?: 1 | 2 | 3
|
|
48
|
+
/** 項目排列方向,預設 vertical(label 在上 / value 在下) */
|
|
49
|
+
direction?: DescriptionDirection
|
|
50
|
+
/**
|
|
51
|
+
* horizontal 模式下每個 item 下方加分隔線以對齊 rows。預設 false。
|
|
52
|
+
* 短列表(< 4 rows)不需要;檔案 metadata 等長列表、key 長度不一時建議開。
|
|
53
|
+
*/
|
|
54
|
+
divided?: boolean
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
const colsClass: Record<number, string> = {
|
|
58
|
+
1: 'grid-cols-1',
|
|
59
|
+
2: 'grid-cols-2',
|
|
60
|
+
3: 'grid-cols-3',
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const DescriptionList = React.forwardRef<HTMLDListElement, DescriptionListProps>(
|
|
64
|
+
({ cols = 1, direction = 'vertical', divided = false, className, ...props }, ref) => {
|
|
65
|
+
const isHorizontal = direction === 'horizontal'
|
|
66
|
+
// Memoize provider value(2026-04-22 D3 perf audit):避免每 render 重建 2-field object
|
|
67
|
+
const ctxValue = React.useMemo(() => ({ direction, divided }), [direction, divided])
|
|
68
|
+
return (
|
|
69
|
+
<DescriptionContext.Provider value={ctxValue}>
|
|
70
|
+
<dl
|
|
71
|
+
ref={ref}
|
|
72
|
+
className={cn(
|
|
73
|
+
isHorizontal
|
|
74
|
+
? 'flex flex-col'
|
|
75
|
+
: cn('grid gap-x-4 gap-y-[var(--layout-space-tight)]', colsClass[cols]),
|
|
76
|
+
className,
|
|
77
|
+
)}
|
|
78
|
+
{...props}
|
|
79
|
+
/>
|
|
80
|
+
</DescriptionContext.Provider>
|
|
81
|
+
)
|
|
82
|
+
},
|
|
83
|
+
)
|
|
84
|
+
DescriptionList.displayName = 'DescriptionList'
|
|
85
|
+
|
|
86
|
+
export interface DescriptionItemProps extends React.HTMLAttributes<HTMLDivElement> {
|
|
87
|
+
label: string
|
|
88
|
+
children: React.ReactNode
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
const DescriptionItem = React.forwardRef<HTMLDivElement, DescriptionItemProps>(
|
|
92
|
+
({ label, children, className, ...props }, ref) => {
|
|
93
|
+
const { direction, divided } = React.useContext(DescriptionContext)
|
|
94
|
+
if (direction === 'horizontal') {
|
|
95
|
+
return (
|
|
96
|
+
<div
|
|
97
|
+
ref={ref}
|
|
98
|
+
className={cn(
|
|
99
|
+
'flex items-baseline justify-between gap-4',
|
|
100
|
+
divided
|
|
101
|
+
? 'py-[var(--layout-space-tight)] border-b border-divider last:border-b-0'
|
|
102
|
+
: 'mb-[var(--layout-space-tight)] last:mb-0',
|
|
103
|
+
className,
|
|
104
|
+
)}
|
|
105
|
+
{...props}
|
|
106
|
+
>
|
|
107
|
+
<dt className="text-body text-fg-secondary shrink-0">{label}</dt>
|
|
108
|
+
<dd className="text-body text-foreground text-right break-all min-w-0">{children}</dd>
|
|
109
|
+
</div>
|
|
110
|
+
)
|
|
111
|
+
}
|
|
112
|
+
return (
|
|
113
|
+
<div ref={ref} className={cn('flex flex-col', className)} {...props}>
|
|
114
|
+
<dt className="text-body text-fg-secondary">{label}</dt>
|
|
115
|
+
<dd className="text-body mt-[var(--item-gap-label-desc-reading)]">{children}</dd>
|
|
116
|
+
</div>
|
|
117
|
+
)
|
|
118
|
+
},
|
|
119
|
+
)
|
|
120
|
+
DescriptionItem.displayName = 'DescriptionItem'
|
|
121
|
+
|
|
122
|
+
// Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)
|
|
123
|
+
// Phase 2 fill needed: purpose descriptions + when rationale + world-class refs
|
|
124
|
+
export const descriptionListMeta = {
|
|
125
|
+
component: 'DescriptionList',
|
|
126
|
+
family: null, // non-family composite / overlay / layout
|
|
127
|
+
variants: {
|
|
128
|
+
|
|
129
|
+
},
|
|
130
|
+
sizes: {
|
|
131
|
+
|
|
132
|
+
},
|
|
133
|
+
states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],
|
|
134
|
+
tokens: {
|
|
135
|
+
bg: [],
|
|
136
|
+
fg: ['text-fg-secondary', 'text-foreground'],
|
|
137
|
+
ring: [],
|
|
138
|
+
},
|
|
139
|
+
} as const
|
|
140
|
+
|
|
141
|
+
export { DescriptionList, DescriptionItem }
|
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
// @benchmark-unverified-blanket: file-level retraction per M22 (d) — claims herein not individually URL-cited; treat as unverified visual/usage rumor unless retrofit per-claim. Hook escape preserved.
|
|
2
|
+
import * as React from "react"
|
|
3
|
+
import * as DialogPrimitive from "@radix-ui/react-dialog"
|
|
4
|
+
import { X as XIcon } from "lucide-react"
|
|
5
|
+
|
|
6
|
+
import { cn } from "@/lib/utils"
|
|
7
|
+
import { Button } from "@/design-system/components/Button/button"
|
|
8
|
+
import { SurfaceHeader, SurfaceFooter, type SurfaceHeaderProps } from "@/design-system/patterns/overlay-surface/overlay-surface"
|
|
9
|
+
import { ScrollArea } from "@/design-system/components/ScrollArea/scroll-area"
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Dialog (Modal) — Radix Dialog + 設計系統 token
|
|
13
|
+
*
|
|
14
|
+
* ── Layout ──
|
|
15
|
+
* px = layout-space-loose, header/footer py = layout-space-tight。
|
|
16
|
+
* Body pt = layout-space-tight, pb = layout-space-bottom。
|
|
17
|
+
* Density:繼承 page `data-density`(v5 校準,跟 Sheet 對齊;header 自動對齊
|
|
18
|
+
* `--chrome-header-height` 48/56)。詳 dialog.spec.md「Density」節。
|
|
19
|
+
*
|
|
20
|
+
* ── Viewport Inset ──
|
|
21
|
+
* Modal 與 viewport 四邊保持 layout-space-bottom (48px) 最小間距。
|
|
22
|
+
*
|
|
23
|
+
* ── 高度行為 ──
|
|
24
|
+
* 預設:height 填滿 viewport(扣除 inset),body 捲動。防止動態內容跳動。
|
|
25
|
+
* height="auto":高度隨內容,超過 viewport 時 max-height 安全帽。
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
const Dialog = DialogPrimitive.Root
|
|
29
|
+
const DialogTrigger = DialogPrimitive.Trigger
|
|
30
|
+
const DialogPortal = DialogPrimitive.Portal
|
|
31
|
+
const DialogClose = DialogPrimitive.Close
|
|
32
|
+
|
|
33
|
+
// Modal 與 viewport 四邊的最小間距 = layout-space-bottom (48px)
|
|
34
|
+
const DIALOG_INSET_VAR = 'var(--layout-space-bottom)'
|
|
35
|
+
|
|
36
|
+
const DialogOverlay = React.forwardRef<
|
|
37
|
+
React.ElementRef<typeof DialogPrimitive.Overlay>,
|
|
38
|
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Overlay>
|
|
39
|
+
>(({ className, ...props }, ref) => (
|
|
40
|
+
<DialogPrimitive.Overlay
|
|
41
|
+
ref={ref}
|
|
42
|
+
className={cn(
|
|
43
|
+
"fixed inset-0 z-50 bg-overlay",
|
|
44
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out motion-reduce:animate-none",
|
|
45
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
46
|
+
className,
|
|
47
|
+
)}
|
|
48
|
+
{...props}
|
|
49
|
+
/>
|
|
50
|
+
))
|
|
51
|
+
DialogOverlay.displayName = DialogPrimitive.Overlay.displayName
|
|
52
|
+
|
|
53
|
+
interface DialogContentProps extends React.ComponentPropsWithoutRef<typeof DialogPrimitive.Content> {
|
|
54
|
+
/** 最大寬度。預設 512px。傳 number 視為 px。 */
|
|
55
|
+
maxWidth?: string | number
|
|
56
|
+
/**
|
|
57
|
+
* 高度模式。
|
|
58
|
+
* - 不傳(預設):填滿 viewport(height = 100vh - inset*2),body 捲動。防止內容跳動。
|
|
59
|
+
* - true:高度隨內容,超過 viewport 時捲動(max-height 安全帽)。
|
|
60
|
+
*/
|
|
61
|
+
autoHeight?: boolean
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
const DialogContent = React.forwardRef<
|
|
65
|
+
React.ElementRef<typeof DialogPrimitive.Content>,
|
|
66
|
+
DialogContentProps
|
|
67
|
+
>(({ className, maxWidth = '512px', autoHeight, children, style, ...props }, ref) => {
|
|
68
|
+
const insetCalc = `${DIALOG_INSET_VAR} * 2`
|
|
69
|
+
const viewportH = `calc(100vh - ${insetCalc})`
|
|
70
|
+
const maxWidthCss = typeof maxWidth === 'number' ? `${maxWidth}px` : maxWidth
|
|
71
|
+
|
|
72
|
+
const heightStyle: React.CSSProperties = autoHeight
|
|
73
|
+
? { maxHeight: viewportH }
|
|
74
|
+
: { height: viewportH }
|
|
75
|
+
|
|
76
|
+
// AutoFocus canonical(對齊 Material / Polaris / Atlassian)—
|
|
77
|
+
// 開啟時 focus 落在 body 第一個有意義互動元素(input / button),不是 chrome close X。
|
|
78
|
+
// 預設 Radix 會 focus first tabbable = close X → Button iconOnly 的 focus-triggered
|
|
79
|
+
// tooltip 會立即顯示「關閉」,user-hostile。此 callback 攔截:先找 body 第一個
|
|
80
|
+
// input/textarea/select/button(排除 data-dismiss)focus;找不到就 focus container(不 focus X)。
|
|
81
|
+
const handleOpenAutoFocus = (e: Event) => {
|
|
82
|
+
e.preventDefault()
|
|
83
|
+
const content = e.currentTarget as HTMLElement
|
|
84
|
+
const firstBodyTarget = content.querySelector<HTMLElement>(
|
|
85
|
+
'[data-dialog-body] input:not([disabled]),[data-dialog-body] textarea:not([disabled]),[data-dialog-body] select:not([disabled]),[data-dialog-body] button:not([disabled]):not([data-dismiss])'
|
|
86
|
+
)
|
|
87
|
+
const firstFooterButton = content.querySelector<HTMLElement>(
|
|
88
|
+
'[data-dialog-footer] button:not([disabled]):not([data-dismiss])'
|
|
89
|
+
)
|
|
90
|
+
;(firstBodyTarget ?? firstFooterButton ?? content).focus({ preventScroll: true })
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
return (
|
|
94
|
+
<DialogPortal>
|
|
95
|
+
<DialogOverlay />
|
|
96
|
+
<DialogPrimitive.Content
|
|
97
|
+
ref={ref}
|
|
98
|
+
// Density canonical(2026-04-22 v5 校準):Dialog 繼承 page density(跟 Sheet 對齊
|
|
99
|
+
// sheet.tsx line 111 canonical),不自設 data-layout-space="lg" 或 data-density。
|
|
100
|
+
//
|
|
101
|
+
// 先前曾設 `data-layout-space="lg"` 給 header/body 寬鬆呼吸,但跟 chrome-header-height
|
|
102
|
+
// canonical 衝突(md page dialog header 期望 48,強設 lg 會變 56)。
|
|
103
|
+
// 世界級對照:Polaris Modal horizontal padding 16 / Material M3 24 / Atlassian 24 — 16 是
|
|
104
|
+
// 合理 lower bound;md page 用 16 loose body padding 可接受,lg page 自動 24。
|
|
105
|
+
// 詳 overlay-surface.spec.md「Chrome dismiss size canonical」
|
|
106
|
+
onOpenAutoFocus={handleOpenAutoFocus}
|
|
107
|
+
className={cn(
|
|
108
|
+
"fixed left-1/2 top-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2",
|
|
109
|
+
"flex flex-col bg-surface-raised rounded-lg border border-border",
|
|
110
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out motion-reduce:animate-none",
|
|
111
|
+
"data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
|
|
112
|
+
"data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95",
|
|
113
|
+
"data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%]",
|
|
114
|
+
"data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%]",
|
|
115
|
+
className,
|
|
116
|
+
)}
|
|
117
|
+
style={{
|
|
118
|
+
boxShadow: 'var(--elevation-200)',
|
|
119
|
+
maxWidth: `min(${maxWidthCss}, calc(100vw - ${insetCalc}))`,
|
|
120
|
+
...heightStyle,
|
|
121
|
+
...style,
|
|
122
|
+
}}
|
|
123
|
+
{...props}
|
|
124
|
+
>
|
|
125
|
+
{children}
|
|
126
|
+
</DialogPrimitive.Content>
|
|
127
|
+
</DialogPortal>
|
|
128
|
+
)
|
|
129
|
+
})
|
|
130
|
+
DialogContent.displayName = DialogPrimitive.Content.displayName
|
|
131
|
+
|
|
132
|
+
// DialogHeader: SurfaceHeader + Close 按鈕(Dialog 特有)
|
|
133
|
+
// justify-between 讓 children 與 Close 分左右;Close 用 Radix DialogPrimitive.Close 包裝。
|
|
134
|
+
// 2026-05-18 audit gap fix:type 用 SurfaceHeaderProps 對齊 — DialogHeader 是 SurfaceHeader
|
|
135
|
+
// 薄包裝,withTabs / lockDensity 等 props 透過 spread 已 forward,但 TS type 沒 expose
|
|
136
|
+
// 導致 consumer 不能用 `<DialogHeader withTabs>` 而只能寫 `as any` 繞。Type lift 修
|
|
137
|
+
// per header-canonical.spec.md W1 跨 6 consumer 同契約。
|
|
138
|
+
const DialogHeader = React.forwardRef<
|
|
139
|
+
HTMLDivElement,
|
|
140
|
+
SurfaceHeaderProps
|
|
141
|
+
>(({ className, children, ...props }, ref) => (
|
|
142
|
+
// 2026-05-18:className 不再硬加 justify-between(冗餘:row 1 是 flex items-center gap-2,
|
|
143
|
+
// 第一 child flex-1 grow 自然 push close X 靠右,跟 justify-between 同視覺)。
|
|
144
|
+
// 並且 column mode(tabsSlot 提供)justify-between 會把 row 1 / row 2 上下推開 = 破裂。
|
|
145
|
+
// tabsSlot via `...props` spread 自動 forward(type 來自 SurfaceHeaderProps)。
|
|
146
|
+
<SurfaceHeader
|
|
147
|
+
ref={ref}
|
|
148
|
+
className={className}
|
|
149
|
+
{...props}
|
|
150
|
+
>
|
|
151
|
+
<div className="flex-1 min-w-0">{children}</div>
|
|
152
|
+
{/* Dismiss X(chrome-slot canonical,v5):Button 本身 native sm(28 md / 32 lg,touch target 亦同),
|
|
153
|
+
但 data-dismiss attribute 讓 SurfaceHeader CSS rule 套負 my 讓 layout 佔位 = 24,
|
|
154
|
+
header = 24 + 2×tight = 48 / 56 chrome-header-height ✓。
|
|
155
|
+
詳 overlay-surface.spec.md「Chrome dismiss size canonical」*/}
|
|
156
|
+
<DialogPrimitive.Close asChild>
|
|
157
|
+
<Button data-dismiss iconOnly dismiss size="sm" startIcon={XIcon} aria-label="關閉" />
|
|
158
|
+
</DialogPrimitive.Close>
|
|
159
|
+
</SurfaceHeader>
|
|
160
|
+
))
|
|
161
|
+
DialogHeader.displayName = "DialogHeader"
|
|
162
|
+
|
|
163
|
+
// DialogBody: flex-1 ScrollArea + chrome padding(對齊 overlay-surface SSOT + ScrollArea canonical)
|
|
164
|
+
// 捲軸必用 ScrollArea(跨 OS 一致、不吃寬度)— 不自寫 overflow-y-auto。
|
|
165
|
+
// padding 搬進 viewport inner div:px-loose / pt-tight / pb-bottom(Dialog 「大容器」底部多一拍呼吸)。
|
|
166
|
+
// data-dialog-body:讓 DialogContent onOpenAutoFocus 找得到 body 第一個有意義互動元素(避免 focus 到 close X)
|
|
167
|
+
//
|
|
168
|
+
// ── List-as-region 場景(menu group / Cmd+K)──
|
|
169
|
+
// 不再提供 `flush` variant(2026-05-01 移除,先前曾叫 `variant="list"`)。
|
|
170
|
+
// **canonical pattern** = consumer 自管 list outer wrapper + 用 `className` override 撤掉 chrome padding:
|
|
171
|
+
// ```tsx
|
|
172
|
+
// <DialogBody className="!px-0 !pt-0 !pb-0">
|
|
173
|
+
// <div className="py-2"> {/* list outer wrapper 自帶 py-2(menu group canonical)*/}
|
|
174
|
+
// {items.map(item => <MenuItem className="px-[var(--layout-space-loose)] rounded-md" />)}
|
|
175
|
+
// </div>
|
|
176
|
+
// </DialogBody>
|
|
177
|
+
// ```
|
|
178
|
+
// **rationale**:flush 只為 list-only body 省一行 className,但 (a) 多一個 row(search / banner)
|
|
179
|
+
// 就破功 → 保留 chrome padding 反而更穩,(b) 加新 variant 不解決底層脆弱(consumer 仍要管 list py
|
|
180
|
+
// 且 item px-loose),反而把 1 個 surface decision 拆兩 API。世界級主流(Material/Atlassian/Mantine/
|
|
181
|
+
// shadcn)無 universal LayoutBody flush variant,Polaris flush API 只用於極窄 scope。
|
|
182
|
+
// 詳 `tokens/layoutSpace/layoutSpace.spec.md`「List-as-region in overlay body」節
|
|
183
|
+
// `className` forward 到 **inner content div**(非外層 ScrollArea wrapper)——
|
|
184
|
+
// consumer `<DialogBody className="flex flex-col gap-X">` 期望作用於 children 排列;
|
|
185
|
+
// 套在 ScrollArea 上會 0 效果(children 住 inner div),曾造成 modal form field 完全貼邊。
|
|
186
|
+
const DialogBody = React.forwardRef<
|
|
187
|
+
HTMLDivElement,
|
|
188
|
+
React.ComponentPropsWithoutRef<typeof ScrollArea>
|
|
189
|
+
>(({ className, children, ...props }, ref) => (
|
|
190
|
+
<ScrollArea ref={ref} data-dialog-body className="flex-1 min-h-0" {...props}>
|
|
191
|
+
<div
|
|
192
|
+
className={cn(
|
|
193
|
+
"px-[var(--layout-space-loose)] pt-[var(--layout-space-tight)] pb-[var(--layout-space-bottom)]",
|
|
194
|
+
className,
|
|
195
|
+
)}
|
|
196
|
+
>
|
|
197
|
+
{children}
|
|
198
|
+
</div>
|
|
199
|
+
</ScrollArea>
|
|
200
|
+
))
|
|
201
|
+
DialogBody.displayName = "DialogBody"
|
|
202
|
+
|
|
203
|
+
// DialogFooter: SurfaceFooter wrap 加 data-dialog-footer(autoFocus fallback target)
|
|
204
|
+
const DialogFooter = React.forwardRef<
|
|
205
|
+
HTMLDivElement,
|
|
206
|
+
React.HTMLAttributes<HTMLDivElement>
|
|
207
|
+
>(({ ...props }, ref) => <SurfaceFooter ref={ref} data-dialog-footer {...props} />)
|
|
208
|
+
DialogFooter.displayName = "DialogFooter"
|
|
209
|
+
|
|
210
|
+
const DialogTitle = React.forwardRef<
|
|
211
|
+
React.ElementRef<typeof DialogPrimitive.Title>,
|
|
212
|
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Title>
|
|
213
|
+
>(({ className, ...props }, ref) => (
|
|
214
|
+
<DialogPrimitive.Title
|
|
215
|
+
ref={ref}
|
|
216
|
+
className={cn("text-body-lg font-medium truncate", className)}
|
|
217
|
+
{...props}
|
|
218
|
+
/>
|
|
219
|
+
))
|
|
220
|
+
DialogTitle.displayName = DialogPrimitive.Title.displayName
|
|
221
|
+
|
|
222
|
+
const DialogDescription = React.forwardRef<
|
|
223
|
+
React.ElementRef<typeof DialogPrimitive.Description>,
|
|
224
|
+
React.ComponentPropsWithoutRef<typeof DialogPrimitive.Description>
|
|
225
|
+
>(({ className, ...props }, ref) => (
|
|
226
|
+
<DialogPrimitive.Description
|
|
227
|
+
ref={ref}
|
|
228
|
+
// title → description 間距 canonical:DialogTitle 是 body-lg(16)+ desc body(14)→ reading-lg token
|
|
229
|
+
// (label tier 決定 token 選擇;item-anatomy Family 2 reading-family token 對照表)
|
|
230
|
+
className={cn("mt-[var(--item-gap-label-desc-reading-lg)] text-body text-fg-secondary", className)}
|
|
231
|
+
{...props}
|
|
232
|
+
/>
|
|
233
|
+
))
|
|
234
|
+
DialogDescription.displayName = DialogPrimitive.Description.displayName
|
|
235
|
+
|
|
236
|
+
// Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)
|
|
237
|
+
// Phase 2 fill needed: purpose descriptions + when rationale + world-class refs
|
|
238
|
+
export const dialogMeta = {
|
|
239
|
+
component: 'Dialog',
|
|
240
|
+
family: null, // non-family composite / overlay / layout
|
|
241
|
+
variants: {
|
|
242
|
+
|
|
243
|
+
},
|
|
244
|
+
sizes: {
|
|
245
|
+
|
|
246
|
+
},
|
|
247
|
+
states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],
|
|
248
|
+
tokens: {
|
|
249
|
+
bg: ['bg-surface-raised'],
|
|
250
|
+
fg: ['text-fg-secondary'],
|
|
251
|
+
ring: [],
|
|
252
|
+
},
|
|
253
|
+
} as const
|
|
254
|
+
|
|
255
|
+
export {
|
|
256
|
+
Dialog,
|
|
257
|
+
DialogPortal,
|
|
258
|
+
DialogOverlay,
|
|
259
|
+
DialogClose,
|
|
260
|
+
DialogTrigger,
|
|
261
|
+
DialogContent,
|
|
262
|
+
DialogHeader,
|
|
263
|
+
DialogBody,
|
|
264
|
+
DialogFooter,
|
|
265
|
+
DialogTitle,
|
|
266
|
+
DialogDescription,
|
|
267
|
+
}
|