@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,116 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* filter-operators.ts — Advanced Filter Operator Registry SSOT
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for all filter operator definitions.
|
|
5
|
+
* 51 ops × 9 columnTypes × 12 ValueShapes.
|
|
6
|
+
*
|
|
7
|
+
* **禁止**:component 內 hardcode op 字串。一律走 `OPERATOR_REGISTRY[columnType]`。
|
|
8
|
+
*
|
|
9
|
+
* 設計路線:ClickUp baseline + 合理擴充(string +2, url 獨立 +4, date +2)。
|
|
10
|
+
* 詳細 spec:`./advanced-filter-operators.draft.md`
|
|
11
|
+
*/
|
|
12
|
+
import type { ColumnType } from './column-types';
|
|
13
|
+
/**
|
|
14
|
+
* Filter value 該用什麼 picker — panel 只認 ValueShape,不認 op。
|
|
15
|
+
* 新增 op 只需 map 到既有 shape。
|
|
16
|
+
*/
|
|
17
|
+
export type ValueShape = 'none' | 'text' | 'number' | 'date_single' | 'date_range' | 'date_relative' | 'datetime_single' | 'datetime_range' | 'select_single' | 'select_multi' | 'person_single' | 'person_multi';
|
|
18
|
+
export interface OperatorSpec {
|
|
19
|
+
/** Internal key, snake_case, immutable for FilterTree serialization */
|
|
20
|
+
op: string;
|
|
21
|
+
/** UI label in zh-TW(暫硬編,留 i18n hook) */
|
|
22
|
+
label: string;
|
|
23
|
+
/** Reference label for English / future i18n key */
|
|
24
|
+
labelEn: string;
|
|
25
|
+
/**
|
|
26
|
+
* Value picker shape.
|
|
27
|
+
* date_* shapes auto-promote to datetime_* when includeTime=true(via `getValueShape`).
|
|
28
|
+
*/
|
|
29
|
+
valueShape: ValueShape;
|
|
30
|
+
}
|
|
31
|
+
export declare const DATE_RELATIVE_GROUPS: readonly [{
|
|
32
|
+
readonly key: "past";
|
|
33
|
+
readonly label: "過去";
|
|
34
|
+
}, {
|
|
35
|
+
readonly key: "current";
|
|
36
|
+
readonly label: "目前";
|
|
37
|
+
}, {
|
|
38
|
+
readonly key: "future";
|
|
39
|
+
readonly label: "未來";
|
|
40
|
+
}];
|
|
41
|
+
export declare const DATE_RELATIVE_OPTIONS: readonly [{
|
|
42
|
+
readonly value: "past_30_days";
|
|
43
|
+
readonly label: "過去 30 天";
|
|
44
|
+
readonly group: "past";
|
|
45
|
+
}, {
|
|
46
|
+
readonly value: "past_7_days";
|
|
47
|
+
readonly label: "過去 7 天";
|
|
48
|
+
readonly group: "past";
|
|
49
|
+
}, {
|
|
50
|
+
readonly value: "last_month";
|
|
51
|
+
readonly label: "上月";
|
|
52
|
+
readonly group: "past";
|
|
53
|
+
}, {
|
|
54
|
+
readonly value: "last_week";
|
|
55
|
+
readonly label: "上週";
|
|
56
|
+
readonly group: "past";
|
|
57
|
+
}, {
|
|
58
|
+
readonly value: "yesterday";
|
|
59
|
+
readonly label: "昨天";
|
|
60
|
+
readonly group: "past";
|
|
61
|
+
}, {
|
|
62
|
+
readonly value: "today";
|
|
63
|
+
readonly label: "今天";
|
|
64
|
+
readonly group: "current";
|
|
65
|
+
}, {
|
|
66
|
+
readonly value: "this_week";
|
|
67
|
+
readonly label: "本週";
|
|
68
|
+
readonly group: "current";
|
|
69
|
+
}, {
|
|
70
|
+
readonly value: "this_month";
|
|
71
|
+
readonly label: "本月";
|
|
72
|
+
readonly group: "current";
|
|
73
|
+
}, {
|
|
74
|
+
readonly value: "tomorrow";
|
|
75
|
+
readonly label: "明天";
|
|
76
|
+
readonly group: "future";
|
|
77
|
+
}, {
|
|
78
|
+
readonly value: "next_week";
|
|
79
|
+
readonly label: "下週";
|
|
80
|
+
readonly group: "future";
|
|
81
|
+
}, {
|
|
82
|
+
readonly value: "next_month";
|
|
83
|
+
readonly label: "下月";
|
|
84
|
+
readonly group: "future";
|
|
85
|
+
}, {
|
|
86
|
+
readonly value: "next_7_days";
|
|
87
|
+
readonly label: "未來 7 天";
|
|
88
|
+
readonly group: "future";
|
|
89
|
+
}, {
|
|
90
|
+
readonly value: "next_30_days";
|
|
91
|
+
readonly label: "未來 30 天";
|
|
92
|
+
readonly group: "future";
|
|
93
|
+
}];
|
|
94
|
+
/**
|
|
95
|
+
* SSOT canonical — 全部 51 ops, 9 columnTypes 對照表.
|
|
96
|
+
*
|
|
97
|
+
* **禁止繞過**:component 內勿 hardcode op 字串(M17 Rule-of-3 + Phase 5 Q3=c TypeScript-enforce 派)。
|
|
98
|
+
* `currency` 共用 `number` op set,渲染依 `column.meta.precision/prefix` 格式化。
|
|
99
|
+
*/
|
|
100
|
+
export declare const OPERATOR_REGISTRY: Record<ColumnType, OperatorSpec[]>;
|
|
101
|
+
/** Default operator per columnType — 開新 condition 時的 op preset */
|
|
102
|
+
export declare const DEFAULT_OPERATOR: Record<ColumnType, string>;
|
|
103
|
+
/**
|
|
104
|
+
* Resolve ValueShape for a given op + columnType + includeTime flag.
|
|
105
|
+
*
|
|
106
|
+
* `date_single` / `date_range` shapes auto-promote to `datetime_single` /
|
|
107
|
+
* `datetime_range` when columnType=`date` && includeTime=true. All other
|
|
108
|
+
* shapes pass-through unchanged.
|
|
109
|
+
*
|
|
110
|
+
* `date_relative` stays as-is(relative 本質 day-level,e.g. `today` =
|
|
111
|
+
* 從今天 00:00 到 23:59:59,跟 includeTime 無關)。
|
|
112
|
+
*/
|
|
113
|
+
export declare function getValueShape(op: OperatorSpec, columnType: ColumnType, includeTime?: boolean): ValueShape;
|
|
114
|
+
/** Get OperatorSpec by columnType + op key. Returns null if not found. */
|
|
115
|
+
export declare function getOperatorSpec(columnType: ColumnType, op: string): OperatorSpec | null;
|
|
116
|
+
//# sourceMappingURL=filter-operators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-operators.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/filter-operators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAIhD;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN,MAAM,GACN,QAAQ,GACR,aAAa,GACb,YAAY,GACZ,eAAe,GACf,iBAAiB,GACjB,gBAAgB,GAChB,eAAe,GACf,cAAc,GACd,eAAe,GACf,cAAc,CAAA;AAIlB,MAAM,WAAW,YAAY;IAC3B,uEAAuE;IACvE,EAAE,EAAE,MAAM,CAAA;IACV,yCAAyC;IACzC,KAAK,EAAE,MAAM,CAAA;IACb,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAA;IACf;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAA;CACvB;AAOD,eAAO,MAAM,oBAAoB;;;;;;;;;EAIvB,CAAA;AAEV,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAiBxB,CAAA;AAkFV;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,UAAU,EAAE,YAAY,EAAE,CAchE,CAAA;AAED,kEAAkE;AAClE,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAYvD,CAAA;AAID;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,UAAU,EACtB,WAAW,CAAC,EAAE,OAAO,GACpB,UAAU,CAMZ;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAAC,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAEvF"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* filter-tree.ts — FilterTree types + helpers + evaluator
|
|
3
|
+
*
|
|
4
|
+
* 抽自 data-table-filter-panel.tsx 為了 file-size budget(panel 拆分)。
|
|
5
|
+
* 純資料結構 + pure functions,無 UI dep。
|
|
6
|
+
*
|
|
7
|
+
* 詳:./advanced-filter.draft.md
|
|
8
|
+
*/
|
|
9
|
+
export type Conjunction = 'and' | 'or';
|
|
10
|
+
export interface FilterCondition {
|
|
11
|
+
kind: 'cond';
|
|
12
|
+
/** 唯一 row id(stable across renders) */
|
|
13
|
+
id: string;
|
|
14
|
+
/** 對應 column id;空字串 = 尚未選 field(operator/value picker disabled) */
|
|
15
|
+
field: string;
|
|
16
|
+
/** OperatorSpec.op key — 對齊 OPERATOR_REGISTRY */
|
|
17
|
+
op: string;
|
|
18
|
+
/** 依 ValueShape 解讀的值 */
|
|
19
|
+
value: unknown;
|
|
20
|
+
}
|
|
21
|
+
export interface FilterGroup {
|
|
22
|
+
kind: 'group';
|
|
23
|
+
id: string;
|
|
24
|
+
/** group 內 children 共用的 join(全 AND 或全 OR;不允許混) */
|
|
25
|
+
conjunction: Conjunction;
|
|
26
|
+
/** ⚠️ 型別鎖死:children 只能 condition,不可再 nested group(1-level cap) */
|
|
27
|
+
children: FilterCondition[];
|
|
28
|
+
}
|
|
29
|
+
export type FilterTreeFlat = {
|
|
30
|
+
mode: 'flat';
|
|
31
|
+
conjunction: Conjunction;
|
|
32
|
+
children: FilterCondition[];
|
|
33
|
+
};
|
|
34
|
+
export type FilterTreeNested = {
|
|
35
|
+
mode: 'nested';
|
|
36
|
+
conjunction: Conjunction;
|
|
37
|
+
children: FilterGroup[];
|
|
38
|
+
};
|
|
39
|
+
export type FilterTree = FilterTreeFlat | FilterTreeNested;
|
|
40
|
+
/** Empty FilterTree — consumer 用來 init useState */
|
|
41
|
+
export declare function createEmptyFilterTree(mode: 'flat'): FilterTreeFlat;
|
|
42
|
+
export declare function createEmptyFilterTree(mode: 'nested'): FilterTreeNested;
|
|
43
|
+
/** 是否有任何 active filter — DataTable trigger button checked state 用 */
|
|
44
|
+
export declare function isFilterTreeActive(tree: FilterTree): boolean;
|
|
45
|
+
/** Compare two FilterTrees structurally — 忽略內部 row id(refresh-detect 不該被內部 id 干擾)*/
|
|
46
|
+
export declare function isFilterTreeEqual(a: FilterTree, b: FilterTree): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* 整棵 FilterTree 對 row 求 boolean。
|
|
49
|
+
* 配合 useReactTable `globalFilterFn`:
|
|
50
|
+
*
|
|
51
|
+
* const tree = useState<FilterTree>(createEmptyFilterTree('flat'))
|
|
52
|
+
* useReactTable({
|
|
53
|
+
* state: { globalFilter: tree },
|
|
54
|
+
* onGlobalFilterChange: setTree,
|
|
55
|
+
* globalFilterFn: (row, _, t: FilterTree) => evaluateTree(t, row.original),
|
|
56
|
+
* getFilteredRowModel: getFilteredRowModel(),
|
|
57
|
+
* })
|
|
58
|
+
*/
|
|
59
|
+
export declare function evaluateTree(tree: FilterTree, row: any): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated v0.x — old per-column filterFn integration。
|
|
62
|
+
* 新版用 `evaluateTree` 配 TanStack `globalFilter`。
|
|
63
|
+
* 保留為了過渡期 backward-compat,新 consumer 不要用。
|
|
64
|
+
*/
|
|
65
|
+
export declare function dataTableFilterMatch(cellValue: unknown, filterValue: unknown): boolean;
|
|
66
|
+
//# sourceMappingURL=filter-tree.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter-tree.d.ts","sourceRoot":"","sources":["../../../src/components/DataTable/filter-tree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAoCH,MAAM,MAAM,WAAW,GAAG,KAAK,GAAG,IAAI,CAAA;AAEtC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,uCAAuC;IACvC,EAAE,EAAE,MAAM,CAAA;IACV,mEAAmE;IACnE,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,EAAE,EAAE,MAAM,CAAA;IACV,wBAAwB;IACxB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,EAAE,EAAE,MAAM,CAAA;IACV,kDAAkD;IAClD,WAAW,EAAE,WAAW,CAAA;IACxB,kEAAkE;IAClE,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B;AAED,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,eAAe,EAAE,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,QAAQ,CAAA;IACd,WAAW,EAAE,WAAW,CAAA;IACxB,QAAQ,EAAE,WAAW,EAAE,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,UAAU,GAAG,cAAc,GAAG,gBAAgB,CAAA;AAI1D,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,CAAA;AACnE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,GAAG,gBAAgB,CAAA;AAMvE,qEAAqE;AACrE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAK5D;AAsBD,oFAAoF;AACpF,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAUvE;AAeD;;;;;;;;;;;GAWG;AAEH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,GAAG,EAAE,GAAG,GAAG,OAAO,CAgBhE;AAgID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,GAAG,OAAO,CAMtF"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* column-meta — TanStack ColumnDef typed accessor helpers.
|
|
3
|
+
*
|
|
4
|
+
* **Scope:Internal-only — DataTable 自用,非 public API**(本檔不 re-export 出
|
|
5
|
+
* `data-table-filter-panel.tsx` / `data-table.tsx`,consumer 透過 panel / sort-manager
|
|
6
|
+
* 間接使用)。M21 (a) classification:lib/ folder 慣例 = internal helper。
|
|
7
|
+
*
|
|
8
|
+
* 為什麼存在:`ColumnDef<T, V>` 是 discriminated union(AccessorKey / AccessorFn /
|
|
9
|
+
* Display / Group),每個 variant 有不同欄位,直接 `col.id` 在型別上不安全。
|
|
10
|
+
* 既有 consumer 用 `(col as any).id` cast,3+ 處 hard-code = M17 違反。
|
|
11
|
+
* 抽成 typed helper 統一型別 narrowing,消除 `any` cast。
|
|
12
|
+
*
|
|
13
|
+
* Why not annotate each `as any`:DRY + single SSOT for column field access。
|
|
14
|
+
* 任一 helper 行為變更(e.g. 加 fallback 邏輯)只需改一處。
|
|
15
|
+
*
|
|
16
|
+
* 對齊 mindset #2 「優先消費既有」+ M17「同 hard-code 在 3+ consumer 必抽」。
|
|
17
|
+
*/
|
|
18
|
+
import type { ColumnDef, ColumnMeta, RowData } from '@tanstack/react-table';
|
|
19
|
+
/**
|
|
20
|
+
* 取 column 的 stable identifier。
|
|
21
|
+
*
|
|
22
|
+
* 解析順序對齊 TanStack 內部行為:
|
|
23
|
+
* 1. `col.id`(顯式設定優先)
|
|
24
|
+
* 2. `col.accessorKey`(string version,fallback for accessor columns)
|
|
25
|
+
*
|
|
26
|
+
* 都無 → return undefined(display column 無 accessorKey 且未設 id)。
|
|
27
|
+
*/
|
|
28
|
+
export declare function getColumnId<T extends RowData>(col: ColumnDef<T, unknown>): string | undefined;
|
|
29
|
+
/**
|
|
30
|
+
* 取 column 的 header 定義(可為 string / React node / function — TanStack 規約)。
|
|
31
|
+
*
|
|
32
|
+
* 注意:本 helper 不執行 header function。consumer 若需 rendered string,
|
|
33
|
+
* 自行 narrow + call,或用 TanStack `flexRender` API。
|
|
34
|
+
*/
|
|
35
|
+
export declare function getColumnHeader<T extends RowData>(col: ColumnDef<T, unknown>): ColumnDef<T, unknown>['header'];
|
|
36
|
+
/**
|
|
37
|
+
* 取 column 的 meta(本 DS 的 ColumnMeta 已 extend 加上 type / align / wrap 等)。
|
|
38
|
+
*/
|
|
39
|
+
export declare function getColumnMeta<T extends RowData>(col: ColumnDef<T, unknown>): ColumnMeta<T, unknown> | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* 從 header 定義抽 plain string label(filter / sort UI 顯示用)。
|
|
42
|
+
*
|
|
43
|
+
* 處理 3 種 header 形式:
|
|
44
|
+
* - string → 直接 return
|
|
45
|
+
* - function → 不執行(避過 React render context),fallback id
|
|
46
|
+
* - undefined / 其他 → fallback id
|
|
47
|
+
*/
|
|
48
|
+
export declare function getColumnLabel<T extends RowData>(col: ColumnDef<T, unknown>, fallbackId?: string): string;
|
|
49
|
+
//# sourceMappingURL=column-meta.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"column-meta.d.ts","sourceRoot":"","sources":["../../../../src/components/DataTable/lib/column-meta.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAE3E;;;;;;;;GAQG;AACH,wBAAgB,WAAW,CAAC,CAAC,SAAS,OAAO,EAC3C,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GACzB,MAAM,GAAG,SAAS,CASpB;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,CAAC,SAAS,OAAO,EAC/C,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GACzB,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,CAEjC;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,OAAO,EAC7C,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,GACzB,UAAU,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,SAAS,CAEpC;AAED;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAC9C,GAAG,EAAE,SAAS,CAAC,CAAC,EAAE,OAAO,CAAC,EAC1B,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,CAIR"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { DayPicker } from 'react-day-picker';
|
|
3
|
+
import 'react-day-picker/style.css';
|
|
4
|
+
/**
|
|
5
|
+
* DateGrid — DayPicker 包裝,用本 DS token 覆寫預設視覺。
|
|
6
|
+
*
|
|
7
|
+
* ── 視覺對照(ref/datepicker.png,2026-04-21 rewrite)──
|
|
8
|
+
*
|
|
9
|
+
* | 區塊 | 規格 |
|
|
10
|
+
* |------|------|
|
|
11
|
+
* | Outer padding | `p-3`(12px 四邊對稱) |
|
|
12
|
+
* | Nav + Month caption row | h-field-xs(24px)單行,chevron(xs)分居左右 / 月份置中垂直對齊 |
|
|
13
|
+
* | Nav → Weekday gap | 12px(mt-3) |
|
|
14
|
+
* | Weekday | text-body(14px)text-fg-secondary(neutral-8) |
|
|
15
|
+
* | Cell gap(水平 + 垂直)| 4px(gap-1) |
|
|
16
|
+
* | Day cell size | h-field-md w-field-height-md(32×32 md / 36×36 lg) |
|
|
17
|
+
* | Day button | rounded-full 填滿 cell |
|
|
18
|
+
*
|
|
19
|
+
* ── 五種 cell state canonical ──
|
|
20
|
+
*
|
|
21
|
+
* | State | 視覺 | Token |
|
|
22
|
+
* |-------|------|-------|
|
|
23
|
+
* | today | 文字下方藍色底線 | underline decoration-primary decoration-2 underline-offset-4 |
|
|
24
|
+
* | disabled | 灰底圓圈 + disabled 字色(跟 Button disabled 一致) | [&>button]:bg-disabled [&>button]:text-fg-disabled rounded-full |
|
|
25
|
+
* | outside(非本月) | text-fg-muted(neutral-7) | [&>button]:text-fg-muted |
|
|
26
|
+
* | selected / range 端點 | 藍底白字圓 | [&>button]:bg-primary [&>button]:text-on-emphasis rounded-full |
|
|
27
|
+
* | range middle | 灰底矩形 track(neutral-3),**高度 = button 高度**(28×28 @ md) | before pseudo: `inset-y-0.5 inset-x-0` |
|
|
28
|
+
* | range start/end 半圓 track | 左/右半圓 + selected 圓疊在上,**圓半徑 = button 半徑** | before pseudo: `rounded-l/r-full` 加 `left-0.5` / `right-0.5` |
|
|
29
|
+
* | hover(未選中) | 藍圈 outline | hover:ring-1 hover:ring-primary |
|
|
30
|
+
*
|
|
31
|
+
* ── Range track 高度 canonical(2026-05-02 Q8 修正,M8 4 家對照)──
|
|
32
|
+
* Ant Design([picker source](https://github.com/ant-design/ant-design/blob/master/components/date-picker/style/panel.ts))/ Material X DateRangePicker([mui-x source](https://github.com/mui/mui-x/tree/master/packages/x-date-pickers-pro/src/DateRangeCalendar))/ Apple Calendar `@benchmark-unverified`(closed-source)/ Google Calendar `@benchmark-unverified`(closed-source)共識:
|
|
33
|
+
* **range track 高度 = button 高度**(不是 cell 高度)— track 跟 selected 圓緊貼,
|
|
34
|
+
* 不留 2px「fat」邊距(舊版 cell-level bg 在 button 上下留 2px 空白看起來「胖」)。
|
|
35
|
+
* 實作:bg 走 `before:` pseudo 走 `inset-y-0.5`(top/bottom 2px 內縮),`inset-x-0`
|
|
36
|
+
* 維持完整 cell 寬度 → 相鄰 cell 的 pseudo 在 cell 邊界相接 = 橫向連貫。
|
|
37
|
+
*
|
|
38
|
+
* ── 為什麼 neutral-3 不 neutral-2(AR 新版 canonical)──
|
|
39
|
+
* neutral-2 在 light mode 太淡(OKLCH L≈0.97),range track 跟 white bg 幾乎無對比。
|
|
40
|
+
* neutral-3(L≈0.94-0.95)在 Google / Ant / Apple DateRange track 視覺明顯,維持「可見 track」。
|
|
41
|
+
*
|
|
42
|
+
* ── 為什麼 nav 放頂部 + 年月垂直置中(不 separate 兩行)──
|
|
43
|
+
* ref/datepicker.png:chevron prev / 月份 / chevron next 同一行,24px 高(xs field height)。
|
|
44
|
+
* 省垂直空間,使用者視線不需上下跳。世界級(Google Calendar / Apple / iOS 日期輸入)皆此佈局。
|
|
45
|
+
*/
|
|
46
|
+
export type DateGridProps = React.ComponentProps<typeof DayPicker>;
|
|
47
|
+
declare const DateGrid: React.ForwardRefExoticComponent<import("react-day-picker").DayPickerProps & React.RefAttributes<HTMLDivElement>>;
|
|
48
|
+
export declare const dateGridMeta: {
|
|
49
|
+
readonly component: "DateGrid";
|
|
50
|
+
readonly family: null;
|
|
51
|
+
readonly variants: {};
|
|
52
|
+
readonly sizes: {};
|
|
53
|
+
readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
|
|
54
|
+
readonly tokens: {
|
|
55
|
+
readonly bg: readonly ["bg-disabled", "bg-neutral-hover", "bg-primary", "bg-primary-hover", "bg-transparent"];
|
|
56
|
+
readonly fg: readonly ["text-fg-disabled", "text-fg-muted", "text-fg-secondary", "text-foreground"];
|
|
57
|
+
readonly ring: readonly ["ring-primary", "ring-ring"];
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
export { DateGrid };
|
|
61
|
+
//# sourceMappingURL=date-grid.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-grid.d.ts","sourceRoot":"","sources":["../../../src/components/DateGrid/date-grid.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAE5C,OAAO,4BAA4B,CAAA;AAKnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,MAAM,MAAM,aAAa,GAAG,KAAK,CAAC,cAAc,CAAC,OAAO,SAAS,CAAC,CAAA;AAGlE,QAAA,MAAM,QAAQ,kHAkIZ,CAAA;AAKF,eAAO,MAAM,YAAY;;;;;;;;;;;CAef,CAAA;AAEV,OAAO,EAAE,QAAQ,EAAE,CAAA"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
import { jsx } from "react/jsx-runtime";
|
|
2
|
+
import * as React from "react";
|
|
3
|
+
import { DayPicker } from "react-day-picker";
|
|
4
|
+
import { ChevronRight, ChevronLeft } from "lucide-react";
|
|
5
|
+
/* empty css */
|
|
6
|
+
import { cn } from "../../lib/utils.js";
|
|
7
|
+
import { Button } from "../Button/button.js";
|
|
8
|
+
const DateGrid = React.forwardRef(function DateGrid2({
|
|
9
|
+
className,
|
|
10
|
+
classNames,
|
|
11
|
+
showOutsideDays = true,
|
|
12
|
+
...props
|
|
13
|
+
}, _ref) {
|
|
14
|
+
return /* @__PURE__ */ jsx(
|
|
15
|
+
DayPicker,
|
|
16
|
+
{
|
|
17
|
+
showOutsideDays,
|
|
18
|
+
navLayout: "around",
|
|
19
|
+
className: cn("p-3", className),
|
|
20
|
+
classNames: {
|
|
21
|
+
months: "flex flex-col sm:flex-row gap-4",
|
|
22
|
+
// Month:relative 讓 prev/next 按鈕 absolute 定位到 month 右上/左上(navLayout="around")
|
|
23
|
+
month: "flex flex-col relative",
|
|
24
|
+
// Month caption:單行置中 h-field-xs,prev/next 按鈕 absolute 從兩側貼齊
|
|
25
|
+
month_caption: "flex items-center justify-center h-field-xs mb-3",
|
|
26
|
+
caption_label: "text-body font-medium",
|
|
27
|
+
// ── Prev/Next button(canonical 2026-05-03 v6,user audit fix)──
|
|
28
|
+
// RDP 把這 className apply 到 <Button> 本身(不是 wrapper),所以用 className 直接套
|
|
29
|
+
// 定位類(absolute top/left/right-0)。muted 色透過 Button override 內部加,不用 [&>button] 黑魔法。
|
|
30
|
+
button_previous: "absolute top-0 left-0 z-[1]",
|
|
31
|
+
button_next: "absolute top-0 right-0 z-[1]",
|
|
32
|
+
// ── Grid layout(canonical 2026-05-03 v7,純 table-native)──
|
|
33
|
+
// RDP v9 month_grid = <table>。v6 試 grid 在 tr 上但 break border-spacing(grid 蓋掉
|
|
34
|
+
// table-row layout)。乾淨修:**純 table layout** + `border-spacing-1`(4px H+V,table-native)。
|
|
35
|
+
// 所有 cells 自動同寬同高(td 的 w/h-field-sm),無 grid hack。
|
|
36
|
+
month_grid: "border-separate border-spacing-1",
|
|
37
|
+
weekdays: "",
|
|
38
|
+
// thead default
|
|
39
|
+
weekday: cn(
|
|
40
|
+
// text-foreground + font-medium 對齊 DS 一致設計語言(2026-05-03 user audit):
|
|
41
|
+
// weekday 列標跟 caption「April 2026」同視覺權重(都屬 calendar header 區),
|
|
42
|
+
// 不弱化(撤銷 v3 fg-secondary 的 mistake)。對齊 icon-only Button 預設 neutral-9 一致。
|
|
43
|
+
"text-foreground text-body font-medium",
|
|
44
|
+
"h-7 align-middle text-center"
|
|
45
|
+
),
|
|
46
|
+
week: "",
|
|
47
|
+
// tr default
|
|
48
|
+
// Cell **就是** button 容器(28×28 @ md / 32×32 @ lg),`relative` 讓 before pseudo 定位
|
|
49
|
+
// ── h-field-sm 對齊 user spec(28×28 @ md)— v3 用 h-field-md (32×32) 是錯的
|
|
50
|
+
day: cn(
|
|
51
|
+
"h-field-sm w-[var(--field-height-sm)] p-0 text-center relative"
|
|
52
|
+
),
|
|
53
|
+
day_button: cn(
|
|
54
|
+
// absolute inset-0 = 完全填滿 cell(naked button,無 inset 4px 空隙)
|
|
55
|
+
// z-[1] 讓 button 疊在 range track `before:` pseudo 之上
|
|
56
|
+
"absolute inset-0 z-[1] flex items-center justify-center",
|
|
57
|
+
"font-normal text-body rounded-full transition-colors",
|
|
58
|
+
// Hover 藍圈 1.5px(對齊 Apple HIG / Ant `@benchmark-unverified` visual ring measurement)— ring 在 button 之上 + 透明 bg 不擋 range track
|
|
59
|
+
"hover:ring-[1.5px] hover:ring-primary hover:bg-transparent",
|
|
60
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
61
|
+
),
|
|
62
|
+
// today:藍色 underline bar 貼近數字
|
|
63
|
+
today: cn(
|
|
64
|
+
"[&>button]:after:content-['']",
|
|
65
|
+
"[&>button]:after:absolute",
|
|
66
|
+
"[&>button]:after:bottom-[5px] [&>button]:after:left-1/2 [&>button]:after:-translate-x-1/2",
|
|
67
|
+
"[&>button]:after:w-[40%] [&>button]:after:h-[1.5px] [&>button]:after:rounded-full",
|
|
68
|
+
"[&>button]:after:bg-primary",
|
|
69
|
+
// today + selected:bar 切 on-emphasis(白)
|
|
70
|
+
"[&[data-selected=true]>button]:after:bg-on-emphasis"
|
|
71
|
+
),
|
|
72
|
+
outside: "[&>button]:text-fg-muted",
|
|
73
|
+
// Selected(single 或 range 端點):button 藍底白字圓
|
|
74
|
+
selected: cn(
|
|
75
|
+
"[&>button]:bg-primary [&>button]:text-on-emphasis",
|
|
76
|
+
"[&>button]:hover:bg-primary-hover [&>button]:hover:ring-0"
|
|
77
|
+
),
|
|
78
|
+
disabled: cn(
|
|
79
|
+
"[&>button]:bg-disabled [&>button]:text-fg-disabled [&>button]:cursor-not-allowed",
|
|
80
|
+
"[&>button]:hover:ring-0 [&>button]:hover:bg-disabled"
|
|
81
|
+
),
|
|
82
|
+
// ── Range track(canonical 2026-05-03 v6,Ant stadium pattern)──
|
|
83
|
+
// v5 用 pseudo 矩形蓋全 cell 修「白色破圖」,但新副作用:button 圓比矩形小,4 個
|
|
84
|
+
// corner triangle 區域 pseudo grey 凸出圓外(user 2026-05-03 抓到「凸出去」)。
|
|
85
|
+
// 對齊 Ant 實證(`cell-range-start::before { border-radius: 9999px 0 0 9999px }`):
|
|
86
|
+
// rangeStart pseudo 加 `rounded-l-full` → pseudo 變「左半圓 + 右矩形」stadium
|
|
87
|
+
// 左半圓 EXACTLY OVERLAY button 圓的左半圓(同 center,同 radius 14)→ 邊界無縫
|
|
88
|
+
// 右側矩形 bridge 2px to middle → 跟 middle pseudo 連續
|
|
89
|
+
// Cell 的 top-left + bottom-left corner triangle:pseudo 不蓋 + button 不蓋 →
|
|
90
|
+
// popover white 顯露(乾淨 breathing,跟 outside-of-range cells 一致視覺)
|
|
91
|
+
range_start: cn(
|
|
92
|
+
"before:content-[''] before:absolute before:inset-y-0",
|
|
93
|
+
"before:left-0 before:-right-[2px]",
|
|
94
|
+
"before:bg-neutral-selected before:pointer-events-none",
|
|
95
|
+
"before:rounded-l-full"
|
|
96
|
+
// ← stadium 左半圓 matches button 圓的左半弧
|
|
97
|
+
),
|
|
98
|
+
range_end: cn(
|
|
99
|
+
"before:content-[''] before:absolute before:inset-y-0",
|
|
100
|
+
"before:-left-[2px] before:right-0",
|
|
101
|
+
"before:bg-neutral-selected before:pointer-events-none",
|
|
102
|
+
"before:rounded-r-full"
|
|
103
|
+
// ← 鏡像
|
|
104
|
+
),
|
|
105
|
+
range_middle: cn(
|
|
106
|
+
"before:content-[''] before:absolute before:inset-y-0 before:-inset-x-[2px]",
|
|
107
|
+
"before:bg-neutral-selected before:pointer-events-none",
|
|
108
|
+
// button 透明顯露 track,但 hover ring 仍顯示
|
|
109
|
+
"[&>button]:!bg-transparent [&>button]:!text-foreground"
|
|
110
|
+
),
|
|
111
|
+
hidden: "invisible",
|
|
112
|
+
...classNames
|
|
113
|
+
},
|
|
114
|
+
components: {
|
|
115
|
+
// ── Prev/Next nav(canonical 2026-05-03 v9,DS 一致設計語言)──
|
|
116
|
+
// User 2026-05-03 audit:「icon-only Button icon 都用 neutral-9,只有 dismiss 用 45%」
|
|
117
|
+
// → chevron 不是 dismiss,**走 Button 預設 text-foreground**(neutral-9 85%),
|
|
118
|
+
// 不開新 tier 自打嘴(撤銷 v6-v8 用 fg-muted override 的 mistake)。
|
|
119
|
+
// RDP v9 `PreviousMonthButton / NextMonthButton` override(node_modules/react-day-picker/dist/esm/components/Nav.js)
|
|
120
|
+
// ⚠️ children: _ 必丟棄(RDP 把 <Chevron> 當 children 傳 → 跟 Button startIcon 重疊變 double chevron)
|
|
121
|
+
PreviousMonthButton: ({ className: className2, children: _children, ...props2 }) => /* @__PURE__ */ jsx(
|
|
122
|
+
Button,
|
|
123
|
+
{
|
|
124
|
+
variant: "text",
|
|
125
|
+
size: "xs",
|
|
126
|
+
iconOnly: true,
|
|
127
|
+
startIcon: ChevronLeft,
|
|
128
|
+
"aria-label": "上一個月",
|
|
129
|
+
className: className2,
|
|
130
|
+
...props2
|
|
131
|
+
}
|
|
132
|
+
),
|
|
133
|
+
NextMonthButton: ({ className: className2, children: _children, ...props2 }) => /* @__PURE__ */ jsx(
|
|
134
|
+
Button,
|
|
135
|
+
{
|
|
136
|
+
variant: "text",
|
|
137
|
+
size: "xs",
|
|
138
|
+
iconOnly: true,
|
|
139
|
+
startIcon: ChevronRight,
|
|
140
|
+
"aria-label": "下一個月",
|
|
141
|
+
className: className2,
|
|
142
|
+
...props2
|
|
143
|
+
}
|
|
144
|
+
)
|
|
145
|
+
},
|
|
146
|
+
...props
|
|
147
|
+
}
|
|
148
|
+
);
|
|
149
|
+
});
|
|
150
|
+
DateGrid.displayName = "DateGrid";
|
|
151
|
+
const dateGridMeta = {
|
|
152
|
+
component: "DateGrid",
|
|
153
|
+
family: null,
|
|
154
|
+
// non-family composite / overlay / layout
|
|
155
|
+
variants: {},
|
|
156
|
+
sizes: {},
|
|
157
|
+
states: ["default", "hover", "active", "focus-visible", "disabled"],
|
|
158
|
+
tokens: {
|
|
159
|
+
bg: ["bg-disabled", "bg-neutral-hover", "bg-primary", "bg-primary-hover", "bg-transparent"],
|
|
160
|
+
fg: ["text-fg-disabled", "text-fg-muted", "text-fg-secondary", "text-foreground"],
|
|
161
|
+
ring: ["ring-primary", "ring-ring"]
|
|
162
|
+
}
|
|
163
|
+
};
|
|
164
|
+
export {
|
|
165
|
+
DateGrid,
|
|
166
|
+
dateGridMeta
|
|
167
|
+
};
|
|
168
|
+
//# sourceMappingURL=date-grid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-grid.js","sources":["../../../src/components/DateGrid/date-grid.tsx"],"sourcesContent":["// @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.\n// M22 retrofit DONE 2026-05-03 v11(real source URLs added inline at lines 38 + 111)\nimport * as React from 'react'\nimport { DayPicker } from 'react-day-picker'\nimport { ChevronLeft, ChevronRight } from 'lucide-react'\nimport 'react-day-picker/style.css'\n\nimport { cn } from '@/lib/utils'\nimport { Button } from '@/design-system/components/Button/button'\n\n/**\n * DateGrid — DayPicker 包裝,用本 DS token 覆寫預設視覺。\n *\n * ── 視覺對照(ref/datepicker.png,2026-04-21 rewrite)──\n *\n * | 區塊 | 規格 |\n * |------|------|\n * | Outer padding | `p-3`(12px 四邊對稱) |\n * | Nav + Month caption row | h-field-xs(24px)單行,chevron(xs)分居左右 / 月份置中垂直對齊 |\n * | Nav → Weekday gap | 12px(mt-3) |\n * | Weekday | text-body(14px)text-fg-secondary(neutral-8) |\n * | Cell gap(水平 + 垂直)| 4px(gap-1) |\n * | Day cell size | h-field-md w-field-height-md(32×32 md / 36×36 lg) |\n * | Day button | rounded-full 填滿 cell |\n *\n * ── 五種 cell state canonical ──\n *\n * | State | 視覺 | Token |\n * |-------|------|-------|\n * | today | 文字下方藍色底線 | underline decoration-primary decoration-2 underline-offset-4 |\n * | disabled | 灰底圓圈 + disabled 字色(跟 Button disabled 一致) | [&>button]:bg-disabled [&>button]:text-fg-disabled rounded-full |\n * | outside(非本月) | text-fg-muted(neutral-7) | [&>button]:text-fg-muted |\n * | selected / range 端點 | 藍底白字圓 | [&>button]:bg-primary [&>button]:text-on-emphasis rounded-full |\n * | range middle | 灰底矩形 track(neutral-3),**高度 = button 高度**(28×28 @ md) | before pseudo: `inset-y-0.5 inset-x-0` |\n * | range start/end 半圓 track | 左/右半圓 + selected 圓疊在上,**圓半徑 = button 半徑** | before pseudo: `rounded-l/r-full` 加 `left-0.5` / `right-0.5` |\n * | hover(未選中) | 藍圈 outline | hover:ring-1 hover:ring-primary |\n *\n * ── Range track 高度 canonical(2026-05-02 Q8 修正,M8 4 家對照)──\n * Ant Design([picker source](https://github.com/ant-design/ant-design/blob/master/components/date-picker/style/panel.ts))/ Material X DateRangePicker([mui-x source](https://github.com/mui/mui-x/tree/master/packages/x-date-pickers-pro/src/DateRangeCalendar))/ Apple Calendar `@benchmark-unverified`(closed-source)/ Google Calendar `@benchmark-unverified`(closed-source)共識:\n * **range track 高度 = button 高度**(不是 cell 高度)— track 跟 selected 圓緊貼,\n * 不留 2px「fat」邊距(舊版 cell-level bg 在 button 上下留 2px 空白看起來「胖」)。\n * 實作:bg 走 `before:` pseudo 走 `inset-y-0.5`(top/bottom 2px 內縮),`inset-x-0`\n * 維持完整 cell 寬度 → 相鄰 cell 的 pseudo 在 cell 邊界相接 = 橫向連貫。\n *\n * ── 為什麼 neutral-3 不 neutral-2(AR 新版 canonical)──\n * neutral-2 在 light mode 太淡(OKLCH L≈0.97),range track 跟 white bg 幾乎無對比。\n * neutral-3(L≈0.94-0.95)在 Google / Ant / Apple DateRange track 視覺明顯,維持「可見 track」。\n *\n * ── 為什麼 nav 放頂部 + 年月垂直置中(不 separate 兩行)──\n * ref/datepicker.png:chevron prev / 月份 / chevron next 同一行,24px 高(xs field height)。\n * 省垂直空間,使用者視線不需上下跳。世界級(Google Calendar / Apple / iOS 日期輸入)皆此佈局。\n */\n\nexport type DateGridProps = React.ComponentProps<typeof DayPicker>\n\n// code-quality-allow: long-function — foundational composite main body — 拆 sub-fn 會複雜化 local state / ref / context binding\nconst DateGrid = React.forwardRef<HTMLDivElement, DateGridProps>(function DateGrid(\n {\n className,\n classNames,\n showOutsideDays = true,\n ...props\n },\n _ref,\n) {\n // Note: react-day-picker v9 DayPicker 未對外 forward ref 到單一 DOM 節點(內部有多 div),\n // 故 ref 簽名保留但不附著(符合 DS 統一 forwardRef 慣例;真要取 DOM 用 wrapper 包)。\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n // navLayout=\"around\" = 每個 month caption 兩側渲染 prev / next 按鈕(inline row)\n // 取代先前 absolute 定位覆蓋整個 months 容器導致箭頭垂直置中於中段的 bug\n navLayout=\"around\"\n // p-3 = 12px 四邊對稱(canonical 不可動)\n className={cn('p-3', className)}\n classNames={{\n months: 'flex flex-col sm:flex-row gap-4',\n // Month:relative 讓 prev/next 按鈕 absolute 定位到 month 右上/左上(navLayout=\"around\")\n month: 'flex flex-col relative',\n // Month caption:單行置中 h-field-xs,prev/next 按鈕 absolute 從兩側貼齊\n month_caption: 'flex items-center justify-center h-field-xs mb-3',\n caption_label: 'text-body font-medium',\n // ── Prev/Next button(canonical 2026-05-03 v6,user audit fix)──\n // RDP 把這 className apply 到 <Button> 本身(不是 wrapper),所以用 className 直接套\n // 定位類(absolute top/left/right-0)。muted 色透過 Button override 內部加,不用 [&>button] 黑魔法。\n button_previous: 'absolute top-0 left-0 z-[1]',\n button_next: 'absolute top-0 right-0 z-[1]',\n // ── Grid layout(canonical 2026-05-03 v7,純 table-native)──\n // RDP v9 month_grid = <table>。v6 試 grid 在 tr 上但 break border-spacing(grid 蓋掉\n // table-row layout)。乾淨修:**純 table layout** + `border-spacing-1`(4px H+V,table-native)。\n // 所有 cells 自動同寬同高(td 的 w/h-field-sm),無 grid hack。\n month_grid: 'border-separate border-spacing-1',\n weekdays: '', // thead default\n weekday: cn(\n // text-foreground + font-medium 對齊 DS 一致設計語言(2026-05-03 user audit):\n // weekday 列標跟 caption「April 2026」同視覺權重(都屬 calendar header 區),\n // 不弱化(撤銷 v3 fg-secondary 的 mistake)。對齊 icon-only Button 預設 neutral-9 一致。\n 'text-foreground text-body font-medium',\n 'h-7 align-middle text-center',\n ),\n week: '', // tr default\n // Cell **就是** button 容器(28×28 @ md / 32×32 @ lg),`relative` 讓 before pseudo 定位\n // ── h-field-sm 對齊 user spec(28×28 @ md)— v3 用 h-field-md (32×32) 是錯的\n day: cn(\n 'h-field-sm w-[var(--field-height-sm)] p-0 text-center relative',\n ),\n day_button: cn(\n // absolute inset-0 = 完全填滿 cell(naked button,無 inset 4px 空隙)\n // z-[1] 讓 button 疊在 range track `before:` pseudo 之上\n 'absolute inset-0 z-[1] flex items-center justify-center',\n 'font-normal text-body rounded-full transition-colors',\n // Hover 藍圈 1.5px(對齊 Apple HIG / Ant `@benchmark-unverified` visual ring measurement)— ring 在 button 之上 + 透明 bg 不擋 range track\n 'hover:ring-[1.5px] hover:ring-primary hover:bg-transparent',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n ),\n // today:藍色 underline bar 貼近數字\n today: cn(\n \"[&>button]:after:content-['']\",\n '[&>button]:after:absolute',\n '[&>button]:after:bottom-[5px] [&>button]:after:left-1/2 [&>button]:after:-translate-x-1/2',\n '[&>button]:after:w-[40%] [&>button]:after:h-[1.5px] [&>button]:after:rounded-full',\n '[&>button]:after:bg-primary',\n // today + selected:bar 切 on-emphasis(白)\n '[&[data-selected=true]>button]:after:bg-on-emphasis',\n ),\n outside: '[&>button]:text-fg-muted',\n // Selected(single 或 range 端點):button 藍底白字圓\n selected: cn(\n '[&>button]:bg-primary [&>button]:text-on-emphasis',\n '[&>button]:hover:bg-primary-hover [&>button]:hover:ring-0',\n ),\n disabled: cn(\n '[&>button]:bg-disabled [&>button]:text-fg-disabled [&>button]:cursor-not-allowed',\n '[&>button]:hover:ring-0 [&>button]:hover:bg-disabled',\n ),\n // ── Range track(canonical 2026-05-03 v6,Ant stadium pattern)──\n // v5 用 pseudo 矩形蓋全 cell 修「白色破圖」,但新副作用:button 圓比矩形小,4 個\n // corner triangle 區域 pseudo grey 凸出圓外(user 2026-05-03 抓到「凸出去」)。\n // 對齊 Ant 實證(`cell-range-start::before { border-radius: 9999px 0 0 9999px }`):\n // rangeStart pseudo 加 `rounded-l-full` → pseudo 變「左半圓 + 右矩形」stadium\n // 左半圓 EXACTLY OVERLAY button 圓的左半圓(同 center,同 radius 14)→ 邊界無縫\n // 右側矩形 bridge 2px to middle → 跟 middle pseudo 連續\n // Cell 的 top-left + bottom-left corner triangle:pseudo 不蓋 + button 不蓋 →\n // popover white 顯露(乾淨 breathing,跟 outside-of-range cells 一致視覺)\n range_start: cn(\n \"before:content-[''] before:absolute before:inset-y-0\",\n 'before:left-0 before:-right-[2px]',\n 'before:bg-neutral-selected before:pointer-events-none',\n 'before:rounded-l-full', // ← stadium 左半圓 matches button 圓的左半弧\n ),\n range_end: cn(\n \"before:content-[''] before:absolute before:inset-y-0\",\n 'before:-left-[2px] before:right-0',\n 'before:bg-neutral-selected before:pointer-events-none',\n 'before:rounded-r-full', // ← 鏡像\n ),\n range_middle: cn(\n \"before:content-[''] before:absolute before:inset-y-0 before:-inset-x-[2px]\",\n 'before:bg-neutral-selected before:pointer-events-none',\n // button 透明顯露 track,但 hover ring 仍顯示\n '[&>button]:!bg-transparent [&>button]:!text-foreground',\n ),\n hidden: 'invisible',\n ...classNames,\n }}\n components={{\n // ── Prev/Next nav(canonical 2026-05-03 v9,DS 一致設計語言)──\n // User 2026-05-03 audit:「icon-only Button icon 都用 neutral-9,只有 dismiss 用 45%」\n // → chevron 不是 dismiss,**走 Button 預設 text-foreground**(neutral-9 85%),\n // 不開新 tier 自打嘴(撤銷 v6-v8 用 fg-muted override 的 mistake)。\n // RDP v9 `PreviousMonthButton / NextMonthButton` override(node_modules/react-day-picker/dist/esm/components/Nav.js)\n // ⚠️ children: _ 必丟棄(RDP 把 <Chevron> 當 children 傳 → 跟 Button startIcon 重疊變 double chevron)\n PreviousMonthButton: ({ className, children: _children, ...props }) => (\n <Button variant=\"text\" size=\"xs\" iconOnly startIcon={ChevronLeft}\n aria-label=\"上一個月\"\n className={className} {...props} />\n ),\n NextMonthButton: ({ className, children: _children, ...props }) => (\n <Button variant=\"text\" size=\"xs\" iconOnly startIcon={ChevronRight}\n aria-label=\"下一個月\"\n className={className} {...props} />\n ),\n }}\n {...props}\n />\n )\n})\nDateGrid.displayName = 'DateGrid'\n\n// Story auto-compile metadata — Phase 1 mechanical migration(2026-04-24)\n// Phase 2 fill needed: purpose descriptions + when rationale + world-class refs\nexport const dateGridMeta = {\n component: 'DateGrid',\n family: null, // non-family composite / overlay / layout\n variants: {\n\n },\n sizes: {\n\n },\n states: ['default', 'hover', 'active', 'focus-visible', 'disabled'],\n tokens: {\n bg: ['bg-disabled', 'bg-neutral-hover', 'bg-primary', 'bg-primary-hover', 'bg-transparent'],\n fg: ['text-fg-disabled', 'text-fg-muted', 'text-fg-secondary', 'text-foreground'],\n ring: ['ring-primary', 'ring-ring'],\n },\n} as const\n\nexport { DateGrid }\n"],"names":["DateGrid","className","props"],"mappings":";;;;;;;AAwDA,MAAM,WAAW,MAAM,WAA0C,SAASA,UACxE;AAAA,EACE;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB,GAAG;AACL,GACA,MACA;AAGA,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC;AAAA,MAGA,WAAU;AAAA,MAEV,WAAW,GAAG,OAAO,SAAS;AAAA,MAC9B,YAAY;AAAA,QACV,QAAQ;AAAA;AAAA,QAER,OAAO;AAAA;AAAA,QAEP,eAAe;AAAA,QACf,eAAe;AAAA;AAAA;AAAA;AAAA,QAIf,iBAAiB;AAAA,QACjB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA,QAKb,YAAY;AAAA,QACZ,UAAU;AAAA;AAAA,QACV,SAAS;AAAA;AAAA;AAAA;AAAA,UAIP;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,MAAM;AAAA;AAAA;AAAA;AAAA,QAGN,KAAK;AAAA,UACH;AAAA,QAAA;AAAA,QAEF,YAAY;AAAA;AAAA;AAAA,UAGV;AAAA,UACA;AAAA;AAAA,UAEA;AAAA,UACA;AAAA,QAAA;AAAA;AAAA,QAGF,OAAO;AAAA,UACL;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,UAEA;AAAA,QAAA;AAAA,QAEF,SAAS;AAAA;AAAA,QAET,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA,QAEF,UAAU;AAAA,UACR;AAAA,UACA;AAAA,QAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAWF,aAAa;AAAA,UACX;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QAAA;AAAA,QAEF,WAAW;AAAA,UACT;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA;AAAA,QAAA;AAAA,QAEF,cAAc;AAAA,UACZ;AAAA,UACA;AAAA;AAAA,UAEA;AAAA,QAAA;AAAA,QAEF,QAAQ;AAAA,QACR,GAAG;AAAA,MAAA;AAAA,MAEL,YAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOV,qBAAqB,CAAC,EAAE,WAAAC,YAAW,UAAU,WAAW,GAAGC,OAAAA,MACzD;AAAA,UAAC;AAAA,UAAA;AAAA,YAAO,SAAQ;AAAA,YAAO,MAAK;AAAA,YAAK,UAAQ;AAAA,YAAC,WAAW;AAAA,YACnD,cAAW;AAAA,YACX,WAAWD;AAAAA,YAAY,GAAGC;AAAAA,UAAA;AAAA,QAAA;AAAA,QAE9B,iBAAiB,CAAC,EAAE,WAAAD,YAAW,UAAU,WAAW,GAAGC,OAAAA,MACrD;AAAA,UAAC;AAAA,UAAA;AAAA,YAAO,SAAQ;AAAA,YAAO,MAAK;AAAA,YAAK,UAAQ;AAAA,YAAC,WAAW;AAAA,YACnD,cAAW;AAAA,YACX,WAAWD;AAAAA,YAAY,GAAGC;AAAAA,UAAA;AAAA,QAAA;AAAA,MAAO;AAAA,MAGtC,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV,CAAC;AACD,SAAS,cAAc;AAIhB,MAAM,eAAe;AAAA,EAC1B,WAAW;AAAA,EACX,QAAQ;AAAA;AAAA,EACR,UAAU,CAAA;AAAA,EAGV,OAAO,CAAA;AAAA,EAGP,QAAQ,CAAC,WAAW,SAAS,UAAU,iBAAiB,UAAU;AAAA,EAClE,QAAQ;AAAA,IACN,IAAI,CAAC,eAAe,oBAAoB,cAAc,oBAAoB,gBAAgB;AAAA,IAC1F,IAAI,CAAC,oBAAoB,iBAAiB,qBAAqB,iBAAiB;AAAA,IAChF,MAAM,CAAC,gBAAgB,WAAW;AAAA,EAAA;AAEtC;"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { FieldMode, FieldVariant } from '../../components/Field/field-types';
|
|
3
|
+
import { type TimeStep } from '../../components/TimePicker/time-columns';
|
|
4
|
+
export interface DateFormatOptions {
|
|
5
|
+
/** Intl.DateTimeFormat options(預設 { year: 'numeric', month: '2-digit', day: '2-digit' }) */
|
|
6
|
+
formatOptions?: Intl.DateTimeFormatOptions;
|
|
7
|
+
/** locale(預設 'en-US') */
|
|
8
|
+
locale?: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Default format:**YYYY/MM/DD**(對齊 Ant Design 順序,year-first ISO-like)。
|
|
12
|
+
* 棄 `en-US` `MM/DD/YYYY`(month-first 美式)— 美式順序在 international DS 反直覺
|
|
13
|
+
* (跟 ISO date 視覺對不上,跟 sort 順序也對不上)。Ant / Material X / Apple HIG
|
|
14
|
+
* 一致 year-first。Consumer 想自訂可傳 `formatOptions` + `locale`。
|
|
15
|
+
*/
|
|
16
|
+
declare function formatDate(value: string | number | Date, options?: DateFormatOptions): string;
|
|
17
|
+
export interface DatePickerProps extends DateFormatOptions, Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'onChange' | 'placeholder' | 'defaultValue'> {
|
|
18
|
+
mode?: FieldMode;
|
|
19
|
+
/** Field chrome variant. Default = context.variant ?? 'default'. Per-prop override. */
|
|
20
|
+
variant?: FieldVariant;
|
|
21
|
+
error?: boolean;
|
|
22
|
+
size?: 'sm' | 'md' | 'lg';
|
|
23
|
+
/** ISO date(YYYY-MM-DD)或 ISO datetime(YYYY-MM-DDTHH:MM:SS,當 showTime=true) */
|
|
24
|
+
value?: string | null;
|
|
25
|
+
onChange?: (value: string) => void;
|
|
26
|
+
placeholder?: string;
|
|
27
|
+
className?: string;
|
|
28
|
+
disabled?: boolean;
|
|
29
|
+
/** 允許清空已選值 */
|
|
30
|
+
clearable?: boolean;
|
|
31
|
+
/** 啟用時間欄位(時 / 分 [/ 秒]),Ant idiom — value 變 ISO datetime */
|
|
32
|
+
showTime?: boolean;
|
|
33
|
+
/** showTime 時是否顯示秒 */
|
|
34
|
+
showSeconds?: boolean;
|
|
35
|
+
/** showTime 分鐘步進(會議常用 15) */
|
|
36
|
+
minuteStep?: TimeStep;
|
|
37
|
+
/** showTime 秒鐘步進 */
|
|
38
|
+
secondStep?: TimeStep;
|
|
39
|
+
/**
|
|
40
|
+
* 是否需 OK 確認才提交,預設 showTime=true 時為 true(對齊 Ant DatePicker showTime)
|
|
41
|
+
* — datetime picker user 習慣編完才 commit,避免 calendar 點到就關。
|
|
42
|
+
*/
|
|
43
|
+
needConfirm?: boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Display 是否渲 Calendar icon + Field naked wrapper(D-path opt-in,2026-05-08)
|
|
46
|
+
* — DataTable cell display↔edit 像素級對齊用。預設 false(裸 span,backward compat)。
|
|
47
|
+
* 設 true 時 display 走 fieldWrapperStyles(naked variant)+ ItemSuffix CalendarIcon,
|
|
48
|
+
* 與 edit 同 DOM 結構,消除 Layer-B padding mismatch。
|
|
49
|
+
*/
|
|
50
|
+
showDisplayEndIcon?: boolean;
|
|
51
|
+
/** Initial open state(uncontrolled)— DataTable cell-as-input 1-step open canonical */
|
|
52
|
+
defaultOpen?: boolean;
|
|
53
|
+
/** open state 變更 callback。DataTable cell-as-input 用:open=false → cell exit edit */
|
|
54
|
+
onOpenChange?: (open: boolean) => void;
|
|
55
|
+
/**
|
|
56
|
+
* Issue 10 typed input(2026-05-10):trigger 內渲 real `<input>` 接 user 鍵盤輸入,
|
|
57
|
+
* 同時保持 Calendar icon trigger 開啟 calendar 選擇(對齊 Material X DatePicker / Ant
|
|
58
|
+
* DatePicker / Notion typed-date idiom)。
|
|
59
|
+
*
|
|
60
|
+
* 預設 false(backward-compat)— trigger 仍是 `<div role="combobox">` + `<span>` 文字。
|
|
61
|
+
*
|
|
62
|
+
* Behavior(opt-in `typeable=true`):
|
|
63
|
+
* - `<input>` 取代 `<span>` displayValue,user 可直接打字
|
|
64
|
+
* - Partial input(打到一半,如 "2025-")allow,**不**即時驗證
|
|
65
|
+
* - `Enter` / `Blur` → `parseDateInput` 解析 → 合法 commit `onChange`;不合法 set
|
|
66
|
+
* aria-invalid + keep draft visible(user 可繼續修)
|
|
67
|
+
* - `Esc` → reset draft 回 committed value
|
|
68
|
+
* - IME composition 期間不觸發驗證(中日韓輸入法 onCompositionStart/End 攔截)
|
|
69
|
+
* - Calendar pick → 同步 input draft + commit(走原 path)
|
|
70
|
+
* - Calendar icon 仍 click 開 popover(Material/Ant idiom)
|
|
71
|
+
*
|
|
72
|
+
* **v1 limits**:
|
|
73
|
+
* - format detection ISO YYYY-MM-DD / YYYY/MM/DD / Date.parse fallback(`parseDateInput`)
|
|
74
|
+
* - US `MM/DD/YYYY` vs EU `DD/MM/YYYY` ambiguous → fallback native parser
|
|
75
|
+
* - 未支援 locale-aware format prop(v2 加 `dateFormat?: string`)
|
|
76
|
+
*
|
|
77
|
+
* 對齊 Material X-DatePicker `format` prop / Ant DatePicker `format` array / Notion typed-input。
|
|
78
|
+
*/
|
|
79
|
+
typeable?: boolean;
|
|
80
|
+
}
|
|
81
|
+
export interface DatePickerRangeProps extends DateFormatOptions, Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'onChange' | 'placeholder' | 'defaultValue'> {
|
|
82
|
+
mode?: FieldMode;
|
|
83
|
+
/** Field chrome variant. Default = context.variant ?? 'default'. Per-prop override. */
|
|
84
|
+
variant?: FieldVariant;
|
|
85
|
+
error?: boolean;
|
|
86
|
+
size?: 'sm' | 'md' | 'lg';
|
|
87
|
+
/** 區間值:[start ISO, end ISO]。任一 null 代表尚未選。 */
|
|
88
|
+
value?: [string | null, string | null] | null;
|
|
89
|
+
onChange?: (value: [string | null, string | null]) => void;
|
|
90
|
+
/** Placeholder:[start placeholder, end placeholder] */
|
|
91
|
+
placeholder?: [string, string];
|
|
92
|
+
className?: string;
|
|
93
|
+
disabled?: boolean;
|
|
94
|
+
clearable?: boolean;
|
|
95
|
+
/** 啟用時間欄位 — value 兩端皆變 ISO datetime */
|
|
96
|
+
showTime?: boolean;
|
|
97
|
+
showSeconds?: boolean;
|
|
98
|
+
minuteStep?: TimeStep;
|
|
99
|
+
secondStep?: TimeStep;
|
|
100
|
+
needConfirm?: boolean;
|
|
101
|
+
}
|
|
102
|
+
declare const DatePickerRange: React.ForwardRefExoticComponent<DatePickerRangeProps & React.RefAttributes<HTMLDivElement>>;
|
|
103
|
+
declare const DatePickerWithRange: React.ForwardRefExoticComponent<DatePickerProps & React.RefAttributes<HTMLDivElement>> & {
|
|
104
|
+
Range: React.ForwardRefExoticComponent<DatePickerRangeProps & React.RefAttributes<HTMLDivElement>>;
|
|
105
|
+
};
|
|
106
|
+
export declare const datePickerMeta: {
|
|
107
|
+
readonly component: "DatePicker";
|
|
108
|
+
readonly family: 4;
|
|
109
|
+
readonly variants: {};
|
|
110
|
+
readonly sizes: {};
|
|
111
|
+
readonly states: readonly ["default", "hover", "active", "focus-visible", "disabled"];
|
|
112
|
+
readonly tokens: {
|
|
113
|
+
readonly bg: readonly [];
|
|
114
|
+
readonly fg: readonly ["text-fg-disabled", "text-fg-muted"];
|
|
115
|
+
readonly ring: readonly [];
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
export { DatePickerWithRange as DatePicker, DatePickerRange, formatDate, };
|
|
119
|
+
//# sourceMappingURL=date-picker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"date-picker.d.ts","sourceRoot":"","sources":["../../../src/components/DatePicker/date-picker.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAG9B,OAAO,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,8CAA8C,CAAA;AAQ3F,OAAO,EAKL,KAAK,QAAQ,EACd,MAAM,oDAAoD,CAAA;AAK3D,MAAM,WAAW,iBAAiB;IAChC,4FAA4F;IAC5F,aAAa,CAAC,EAAE,IAAI,CAAC,qBAAqB,CAAA;IAC1C,yBAAyB;IACzB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED;;;;;GAKG;AACH,iBAAS,UAAU,CACjB,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,EAC7B,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CAYR;AAyND,MAAM,WAAW,eACf,SAAQ,iBAAiB,EACvB,IAAI,CACF,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtD;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uFAAuF;IACvF,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,8EAA8E;IAC9E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,cAAc;IACd,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,sBAAsB;IACtB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,oBAAoB;IACpB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAA;IAC5B,sFAAsF;IACtF,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mFAAmF;IACnF,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAA;IACtC;;;;;;;;;;;;;;;;;;;;;;;OAuBG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB;AAyUD,MAAM,WAAW,oBACf,SAAQ,iBAAiB,EACvB,IAAI,CACF,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,EACpC,OAAO,GAAG,UAAU,GAAG,aAAa,GAAG,cAAc,CACtD;IACH,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,uFAAuF;IACvF,OAAO,CAAC,EAAE,YAAY,CAAA;IACtB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAA;IACzB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,GAAG,IAAI,CAAA;IAC7C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,KAAK,IAAI,CAAA;IAC1D,uDAAuD;IACvD,WAAW,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,UAAU,CAAC,EAAE,QAAQ,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAGD,QAAA,MAAM,eAAe,6FAqYpB,CAAA;AAKD,QAAA,MAAM,mBAAmB;;CAAwD,CAAA;AAIjF,eAAO,MAAM,cAAc;;;;;;;;;;;CAejB,CAAA;AAEV,OAAO,EACL,mBAAmB,IAAI,UAAU,EACjC,eAAe,EACf,UAAU,GACX,CAAA"}
|