@k8ordo/ui 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +624 -0
- package/dist/components/_internal/focus-ring.d.mts +8 -0
- package/dist/components/_internal/focus-ring.mjs +8 -0
- package/dist/components/ai/_internal/collapsible.d.mts +13 -0
- package/dist/components/ai/_internal/collapsible.mjs +49 -0
- package/dist/components/ai/_internal/streaming-cursor.d.mts +5 -0
- package/dist/components/ai/_internal/streaming-cursor.mjs +8 -0
- package/dist/components/ai/conversation/conversation.d.mts +18 -0
- package/dist/components/ai/conversation/conversation.mjs +111 -0
- package/dist/components/ai/conversation/index.d.mts +2 -0
- package/dist/components/ai/conversation/index.mjs +2 -0
- package/dist/components/ai/index.d.mts +14 -0
- package/dist/components/ai/index.mjs +7 -0
- package/dist/components/ai/message/index.d.mts +2 -0
- package/dist/components/ai/message/index.mjs +2 -0
- package/dist/components/ai/message/message.d.mts +17 -0
- package/dist/components/ai/message/message.mjs +34 -0
- package/dist/components/ai/prompt-input/index.d.mts +2 -0
- package/dist/components/ai/prompt-input/index.mjs +2 -0
- package/dist/components/ai/prompt-input/prompt-input.d.mts +27 -0
- package/dist/components/ai/prompt-input/prompt-input.mjs +108 -0
- package/dist/components/ai/reasoning/index.d.mts +2 -0
- package/dist/components/ai/reasoning/index.mjs +2 -0
- package/dist/components/ai/reasoning/reasoning.d.mts +12 -0
- package/dist/components/ai/reasoning/reasoning.mjs +25 -0
- package/dist/components/ai/response/index.d.mts +2 -0
- package/dist/components/ai/response/index.mjs +2 -0
- package/dist/components/ai/response/response.d.mts +20 -0
- package/dist/components/ai/response/response.mjs +57 -0
- package/dist/components/ai/suggestion/index.d.mts +2 -0
- package/dist/components/ai/suggestion/index.mjs +2 -0
- package/dist/components/ai/suggestion/suggestion.d.mts +17 -0
- package/dist/components/ai/suggestion/suggestion.mjs +29 -0
- package/dist/components/ai/tool-invocation/index.d.mts +2 -0
- package/dist/components/ai/tool-invocation/index.mjs +2 -0
- package/dist/components/ai/tool-invocation/tool-invocation.d.mts +17 -0
- package/dist/components/ai/tool-invocation/tool-invocation.mjs +73 -0
- package/dist/components/ai/types.d.mts +5 -0
- package/dist/components/ai/types.mjs +1 -0
- package/dist/components/buttons/button/button.d.mts +27 -0
- package/dist/components/buttons/button/button.mjs +60 -0
- package/dist/components/buttons/button/index.d.mts +2 -0
- package/dist/components/buttons/button/index.mjs +2 -0
- package/dist/components/buttons/icon-button/icon-button.d.mts +29 -0
- package/dist/components/buttons/icon-button/icon-button.mjs +84 -0
- package/dist/components/buttons/icon-button/index.d.mts +2 -0
- package/dist/components/buttons/icon-button/index.mjs +2 -0
- package/dist/components/data-display/accordion/accordion-button.d.mts +5 -0
- package/dist/components/data-display/accordion/accordion-button.mjs +26 -0
- package/dist/components/data-display/accordion/accordion-item.d.mts +9 -0
- package/dist/components/data-display/accordion/accordion-item.mjs +20 -0
- package/dist/components/data-display/accordion/accordion-panel.d.mts +5 -0
- package/dist/components/data-display/accordion/accordion-panel.mjs +18 -0
- package/dist/components/data-display/accordion/accordion.d.mts +5 -0
- package/dist/components/data-display/accordion/accordion.mjs +8 -0
- package/dist/components/data-display/accordion/context.d.mts +14 -0
- package/dist/components/data-display/accordion/context.mjs +32 -0
- package/dist/components/data-display/accordion/index.d.mts +19 -0
- package/dist/components/data-display/accordion/index.mjs +13 -0
- package/dist/components/data-display/avatar/avatar.d.mts +14 -0
- package/dist/components/data-display/avatar/avatar.mjs +43 -0
- package/dist/components/data-display/avatar/index.d.mts +2 -0
- package/dist/components/data-display/avatar/index.mjs +2 -0
- package/dist/components/data-display/badge/badge.d.mts +21 -0
- package/dist/components/data-display/badge/badge.mjs +27 -0
- package/dist/components/data-display/badge/index.d.mts +2 -0
- package/dist/components/data-display/badge/index.mjs +2 -0
- package/dist/components/data-display/card/card.d.mts +10 -0
- package/dist/components/data-display/card/card.mjs +10 -0
- package/dist/components/data-display/card/index.d.mts +2 -0
- package/dist/components/data-display/card/index.mjs +2 -0
- package/dist/components/data-display/code/code.d.mts +8 -0
- package/dist/components/data-display/code/code.mjs +35 -0
- package/dist/components/data-display/code/find-all-colors.d.mts +16 -0
- package/dist/components/data-display/code/find-all-colors.mjs +267 -0
- package/dist/components/data-display/code/index.d.mts +2 -0
- package/dist/components/data-display/code/index.mjs +2 -0
- package/dist/components/data-display/heading/heading.d.mts +9 -0
- package/dist/components/data-display/heading/heading.mjs +46 -0
- package/dist/components/data-display/heading/index.d.mts +2 -0
- package/dist/components/data-display/heading/index.mjs +2 -0
- package/dist/components/data-display/table/index.d.mts +2 -0
- package/dist/components/data-display/table/index.mjs +2 -0
- package/dist/components/data-display/table/table.d.mts +33 -0
- package/dist/components/data-display/table/table.mjs +62 -0
- package/dist/components/feedback/alert/alert.d.mts +19 -0
- package/dist/components/feedback/alert/alert.mjs +71 -0
- package/dist/components/feedback/alert/index.d.mts +2 -0
- package/dist/components/feedback/alert/index.mjs +2 -0
- package/dist/components/feedback/progress/index.d.mts +2 -0
- package/dist/components/feedback/progress/index.mjs +2 -0
- package/dist/components/feedback/progress/progress.d.mts +11 -0
- package/dist/components/feedback/progress/progress.mjs +21 -0
- package/dist/components/feedback/skeleton/index.d.mts +2 -0
- package/dist/components/feedback/skeleton/index.mjs +2 -0
- package/dist/components/feedback/skeleton/skeleton.d.mts +10 -0
- package/dist/components/feedback/skeleton/skeleton.mjs +10 -0
- package/dist/components/feedback/spinner/index.d.mts +2 -0
- package/dist/components/feedback/spinner/index.mjs +2 -0
- package/dist/components/feedback/spinner/spinner.d.mts +9 -0
- package/dist/components/feedback/spinner/spinner.mjs +24 -0
- package/dist/components/feedback/toast/context.d.mts +34 -0
- package/dist/components/feedback/toast/context.mjs +7 -0
- package/dist/components/feedback/toast/index.d.mts +3 -0
- package/dist/components/feedback/toast/index.mjs +3 -0
- package/dist/components/feedback/toast/provider.d.mts +8 -0
- package/dist/components/feedback/toast/provider.mjs +171 -0
- package/dist/components/feedback/toast/toast.d.mts +15 -0
- package/dist/components/feedback/toast/toast.mjs +32 -0
- package/dist/components/form/autocomplete/autocomplete.d.mts +23 -0
- package/dist/components/form/autocomplete/autocomplete.mjs +225 -0
- package/dist/components/form/autocomplete/index.d.mts +2 -0
- package/dist/components/form/autocomplete/index.mjs +2 -0
- package/dist/components/form/checkbox/checkbox.d.mts +21 -0
- package/dist/components/form/checkbox/checkbox.mjs +59 -0
- package/dist/components/form/checkbox/index.d.mts +2 -0
- package/dist/components/form/checkbox/index.mjs +2 -0
- package/dist/components/form/checkbox-card/checkbox-card.d.mts +29 -0
- package/dist/components/form/checkbox-card/checkbox-card.mjs +76 -0
- package/dist/components/form/checkbox-card/index.d.mts +2 -0
- package/dist/components/form/checkbox-card/index.mjs +2 -0
- package/dist/components/form/checkbox-group/checkbox-group.d.mts +29 -0
- package/dist/components/form/checkbox-group/checkbox-group.mjs +43 -0
- package/dist/components/form/checkbox-group/index.d.mts +34 -0
- package/dist/components/form/checkbox-group/index.mjs +9 -0
- package/dist/components/form/file-field/file-field.d.mts +27 -0
- package/dist/components/form/file-field/file-field.mjs +129 -0
- package/dist/components/form/file-field/index.d.mts +2 -0
- package/dist/components/form/file-field/index.mjs +2 -0
- package/dist/components/form/form/form.d.mts +9 -0
- package/dist/components/form/form/form.mjs +11 -0
- package/dist/components/form/form/index.d.mts +2 -0
- package/dist/components/form/form/index.mjs +2 -0
- package/dist/components/form/form-control/form-control.d.mts +23 -0
- package/dist/components/form/form-control/form-control.mjs +61 -0
- package/dist/components/form/form-control/index.d.mts +2 -0
- package/dist/components/form/form-control/index.mjs +2 -0
- package/dist/components/form/number-field/cast.d.mts +4 -0
- package/dist/components/form/number-field/cast.mjs +32 -0
- package/dist/components/form/number-field/index.d.mts +2 -0
- package/dist/components/form/number-field/index.mjs +2 -0
- package/dist/components/form/number-field/number-field.d.mts +25 -0
- package/dist/components/form/number-field/number-field.mjs +115 -0
- package/dist/components/form/password-input/index.d.mts +2 -0
- package/dist/components/form/password-input/index.mjs +2 -0
- package/dist/components/form/password-input/password-input.d.mts +11 -0
- package/dist/components/form/password-input/password-input.mjs +36 -0
- package/dist/components/form/radio/index.d.mts +2 -0
- package/dist/components/form/radio/index.mjs +2 -0
- package/dist/components/form/radio/radio.d.mts +24 -0
- package/dist/components/form/radio/radio.mjs +51 -0
- package/dist/components/form/radio-card/index.d.mts +2 -0
- package/dist/components/form/radio-card/index.mjs +2 -0
- package/dist/components/form/radio-card/radio-card.d.mts +29 -0
- package/dist/components/form/radio-card/radio-card.mjs +74 -0
- package/dist/components/form/select/index.d.mts +2 -0
- package/dist/components/form/select/index.mjs +2 -0
- package/dist/components/form/select/select.d.mts +11 -0
- package/dist/components/form/select/select.mjs +33 -0
- package/dist/components/form/slider/index.d.mts +2 -0
- package/dist/components/form/slider/index.mjs +2 -0
- package/dist/components/form/slider/slider.d.mts +23 -0
- package/dist/components/form/slider/slider.mjs +50 -0
- package/dist/components/form/switch/index.d.mts +2 -0
- package/dist/components/form/switch/index.mjs +2 -0
- package/dist/components/form/switch/switch.d.mts +21 -0
- package/dist/components/form/switch/switch.mjs +50 -0
- package/dist/components/form/text-field/index.d.mts +2 -0
- package/dist/components/form/text-field/index.mjs +2 -0
- package/dist/components/form/text-field/text-field.d.mts +11 -0
- package/dist/components/form/text-field/text-field.mjs +19 -0
- package/dist/components/form/textarea/index.d.mts +2 -0
- package/dist/components/form/textarea/index.mjs +2 -0
- package/dist/components/form/textarea/textarea.d.mts +11 -0
- package/dist/components/form/textarea/textarea.mjs +38 -0
- package/dist/components/icons/base.d.mts +15 -0
- package/dist/components/icons/base.mjs +18 -0
- package/dist/components/icons/browsers.d.mts +9 -0
- package/dist/components/icons/browsers.mjs +891 -0
- package/dist/components/icons/color-scale.d.mts +6 -0
- package/dist/components/icons/color-scale.mjs +44 -0
- package/dist/components/icons/github-mark.d.mts +6 -0
- package/dist/components/icons/github-mark.mjs +19 -0
- package/dist/components/icons/index.d.mts +10 -0
- package/dist/components/icons/index.mjs +9 -0
- package/dist/components/icons/logo.d.mts +7 -0
- package/dist/components/icons/logo.mjs +29 -0
- package/dist/components/icons/lucide-deep.d.mts +9 -0
- package/dist/components/icons/lucide-imports.d.mts +65 -0
- package/dist/components/icons/lucide-imports.mjs +65 -0
- package/dist/components/icons/lucide.d.mts +69 -0
- package/dist/components/icons/lucide.mjs +256 -0
- package/dist/components/icons/qiita.d.mts +6 -0
- package/dist/components/icons/qiita.mjs +28 -0
- package/dist/components/icons/twitter.d.mts +6 -0
- package/dist/components/icons/twitter.mjs +20 -0
- package/dist/components/icons/vertical-writing.d.mts +6 -0
- package/dist/components/icons/vertical-writing.mjs +26 -0
- package/dist/components/index.d.mts +106 -0
- package/dist/components/index.mjs +57 -0
- package/dist/components/layout/_shared/gap.d.mts +11 -0
- package/dist/components/layout/_shared/gap.mjs +10 -0
- package/dist/components/layout/_shared/padding.d.mts +11 -0
- package/dist/components/layout/_shared/padding.mjs +10 -0
- package/dist/components/layout/grid/grid.d.mts +16 -0
- package/dist/components/layout/grid/grid.mjs +35 -0
- package/dist/components/layout/grid/index.d.mts +2 -0
- package/dist/components/layout/grid/index.mjs +2 -0
- package/dist/components/layout/scroll-linked/index.d.mts +2 -0
- package/dist/components/layout/scroll-linked/index.mjs +2 -0
- package/dist/components/layout/scroll-linked/scroll-linked.d.mts +14 -0
- package/dist/components/layout/scroll-linked/scroll-linked.mjs +59 -0
- package/dist/components/layout/separator/index.d.mts +2 -0
- package/dist/components/layout/separator/index.mjs +2 -0
- package/dist/components/layout/separator/separator.d.mts +9 -0
- package/dist/components/layout/separator/separator.mjs +14 -0
- package/dist/components/layout/stack/index.d.mts +2 -0
- package/dist/components/layout/stack/index.mjs +2 -0
- package/dist/components/layout/stack/stack.d.mts +15 -0
- package/dist/components/layout/stack/stack.mjs +24 -0
- package/dist/components/navigation/anchor/anchor.d.mts +20 -0
- package/dist/components/navigation/anchor/anchor.mjs +28 -0
- package/dist/components/navigation/anchor/index.d.mts +2 -0
- package/dist/components/navigation/anchor/index.mjs +2 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.d.mts +19 -0
- package/dist/components/navigation/breadcrumb/breadcrumb.mjs +43 -0
- package/dist/components/navigation/breadcrumb/index.d.mts +14 -0
- package/dist/components/navigation/breadcrumb/index.mjs +10 -0
- package/dist/components/navigation/pagination/index.d.mts +2 -0
- package/dist/components/navigation/pagination/index.mjs +2 -0
- package/dist/components/navigation/pagination/pagination.d.mts +15 -0
- package/dist/components/navigation/pagination/pagination.mjs +74 -0
- package/dist/components/navigation/tabs/index.d.mts +2 -0
- package/dist/components/navigation/tabs/index.mjs +2 -0
- package/dist/components/navigation/tabs/tabs.d.mts +21 -0
- package/dist/components/navigation/tabs/tabs.mjs +130 -0
- package/dist/components/overlays/_internal/index.d.mts +4 -0
- package/dist/components/overlays/_internal/index.mjs +4 -0
- package/dist/components/overlays/_internal/modal-dialog-context.d.mts +14 -0
- package/dist/components/overlays/_internal/modal-dialog-context.mjs +13 -0
- package/dist/components/overlays/_internal/use-can-hover.d.mts +9 -0
- package/dist/components/overlays/_internal/use-can-hover.mjs +20 -0
- package/dist/components/overlays/_internal/use-hover-intent.d.mts +25 -0
- package/dist/components/overlays/_internal/use-hover-intent.mjs +56 -0
- package/dist/components/overlays/_internal/use-list-navigation.d.mts +36 -0
- package/dist/components/overlays/_internal/use-list-navigation.mjs +98 -0
- package/dist/components/overlays/dialog/dialog.d.mts +19 -0
- package/dist/components/overlays/dialog/dialog.mjs +87 -0
- package/dist/components/overlays/dialog/index.d.mts +2 -0
- package/dist/components/overlays/dialog/index.mjs +2 -0
- package/dist/components/overlays/drawer/drawer.d.mts +12 -0
- package/dist/components/overlays/drawer/drawer.mjs +60 -0
- package/dist/components/overlays/drawer/index.d.mts +2 -0
- package/dist/components/overlays/drawer/index.mjs +2 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.d.mts +34 -0
- package/dist/components/overlays/dropdown-menu/dropdown-menu.mjs +85 -0
- package/dist/components/overlays/dropdown-menu/hooks.d.mts +24 -0
- package/dist/components/overlays/dropdown-menu/hooks.mjs +26 -0
- package/dist/components/overlays/dropdown-menu/index.d.mts +2 -0
- package/dist/components/overlays/dropdown-menu/index.mjs +2 -0
- package/dist/components/overlays/dropdown-menu/shared.d.mts +7 -0
- package/dist/components/overlays/dropdown-menu/shared.mjs +8 -0
- package/dist/components/overlays/dropdown-menu/sub-menu.d.mts +10 -0
- package/dist/components/overlays/dropdown-menu/sub-menu.mjs +143 -0
- package/dist/components/overlays/dropdown-menu/use-safe-triangle.d.mts +18 -0
- package/dist/components/overlays/dropdown-menu/use-safe-triangle.mjs +57 -0
- package/dist/components/overlays/list-box/hooks.d.mts +35 -0
- package/dist/components/overlays/list-box/hooks.mjs +43 -0
- package/dist/components/overlays/list-box/index.d.mts +2 -0
- package/dist/components/overlays/list-box/index.mjs +2 -0
- package/dist/components/overlays/list-box/list-box.d.mts +28 -0
- package/dist/components/overlays/list-box/list-box.mjs +150 -0
- package/dist/components/overlays/modal/index.d.mts +2 -0
- package/dist/components/overlays/modal/index.mjs +2 -0
- package/dist/components/overlays/modal/modal.d.mts +15 -0
- package/dist/components/overlays/modal/modal.mjs +72 -0
- package/dist/components/overlays/popover/anchor-positioning.d.mts +26 -0
- package/dist/components/overlays/popover/anchor-positioning.mjs +49 -0
- package/dist/components/overlays/popover/escape-stack.d.mts +7 -0
- package/dist/components/overlays/popover/escape-stack.mjs +34 -0
- package/dist/components/overlays/popover/hooks.d.mts +53 -0
- package/dist/components/overlays/popover/hooks.mjs +141 -0
- package/dist/components/overlays/popover/index.d.mts +3 -0
- package/dist/components/overlays/popover/index.mjs +3 -0
- package/dist/components/overlays/popover/popover.d.mts +25 -0
- package/dist/components/overlays/popover/popover.mjs +90 -0
- package/dist/components/overlays/tooltip/bridge.d.mts +5 -0
- package/dist/components/overlays/tooltip/bridge.mjs +29 -0
- package/dist/components/overlays/tooltip/index.d.mts +2 -0
- package/dist/components/overlays/tooltip/index.mjs +2 -0
- package/dist/components/overlays/tooltip/tooltip.d.mts +34 -0
- package/dist/components/overlays/tooltip/tooltip.mjs +87 -0
- package/dist/components/providers/index.d.mts +4 -0
- package/dist/components/providers/index.mjs +3 -0
- package/dist/components/providers/portal-root.d.mts +8 -0
- package/dist/components/providers/portal-root.mjs +12 -0
- package/dist/components/providers/ui-provider.d.mts +8 -0
- package/dist/components/providers/ui-provider.mjs +11 -0
- package/dist/helpers/chain.d.mts +5 -0
- package/dist/helpers/chain.mjs +29 -0
- package/dist/helpers/cn.d.mts +5 -0
- package/dist/helpers/cn.mjs +27 -0
- package/dist/helpers/create-safe-context.d.mts +6 -0
- package/dist/helpers/create-safe-context.mjs +30 -0
- package/dist/helpers/index.d.mts +6 -0
- package/dist/helpers/index.mjs +6 -0
- package/dist/helpers/merge-props.d.mts +6 -0
- package/dist/helpers/merge-props.mjs +56 -0
- package/dist/helpers/merge-refs.d.mts +5 -0
- package/dist/helpers/merge-refs.mjs +55 -0
- package/dist/hooks/breakpoint/index.d.mts +5 -0
- package/dist/hooks/breakpoint/index.mjs +24 -0
- package/dist/hooks/click-away/index.d.mts +5 -0
- package/dist/hooks/click-away/index.mjs +24 -0
- package/dist/hooks/client/index.d.mts +4 -0
- package/dist/hooks/client/index.mjs +6 -0
- package/dist/hooks/clipboard/index.d.mts +7 -0
- package/dist/hooks/clipboard/index.mjs +15 -0
- package/dist/hooks/controllable-state/index.d.mts +9 -0
- package/dist/hooks/controllable-state/index.mjs +21 -0
- package/dist/hooks/debounced-transition/index.d.mts +5 -0
- package/dist/hooks/debounced-transition/index.mjs +49 -0
- package/dist/hooks/deferred-debounce/index.d.mts +4 -0
- package/dist/hooks/deferred-debounce/index.mjs +9 -0
- package/dist/hooks/disclosure/index.d.mts +10 -0
- package/dist/hooks/disclosure/index.mjs +20 -0
- package/dist/hooks/focus-trap/index.d.mts +18 -0
- package/dist/hooks/focus-trap/index.mjs +51 -0
- package/dist/hooks/hash/index.d.mts +4 -0
- package/dist/hooks/hash/index.mjs +25 -0
- package/dist/hooks/hover/index.d.mts +12 -0
- package/dist/hooks/hover/index.mjs +19 -0
- package/dist/hooks/index.d.mts +25 -0
- package/dist/hooks/index.mjs +24 -0
- package/dist/hooks/intersection-observer/index.d.mts +3 -0
- package/dist/hooks/intersection-observer/index.mjs +3 -0
- package/dist/hooks/intersection-observer/use-in-view.d.mts +11 -0
- package/dist/hooks/intersection-observer/use-in-view.mjs +18 -0
- package/dist/hooks/intersection-observer/use-intersection-observer.d.mts +11 -0
- package/dist/hooks/intersection-observer/use-intersection-observer.mjs +33 -0
- package/dist/hooks/interval/index.d.mts +4 -0
- package/dist/hooks/interval/index.mjs +19 -0
- package/dist/hooks/local-storage/index.d.mts +4 -0
- package/dist/hooks/local-storage/index.mjs +46 -0
- package/dist/hooks/resize/index.d.mts +8 -0
- package/dist/hooks/resize/index.mjs +24 -0
- package/dist/hooks/scroll-direction/index.d.mts +13 -0
- package/dist/hooks/scroll-direction/index.mjs +67 -0
- package/dist/hooks/scroll-lock/index.d.mts +9 -0
- package/dist/hooks/scroll-lock/index.mjs +59 -0
- package/dist/hooks/session-storage/index.d.mts +4 -0
- package/dist/hooks/session-storage/index.mjs +46 -0
- package/dist/hooks/step/index.d.mts +15 -0
- package/dist/hooks/step/index.mjs +39 -0
- package/dist/hooks/timeout/index.d.mts +4 -0
- package/dist/hooks/timeout/index.mjs +19 -0
- package/dist/hooks/window-resize/index.d.mts +11 -0
- package/dist/hooks/window-resize/index.mjs +21 -0
- package/dist/hooks/window-size/index.d.mts +8 -0
- package/dist/hooks/window-size/index.mjs +31 -0
- package/dist/hooks/writing-mode/index.d.mts +6 -0
- package/dist/hooks/writing-mode/index.mjs +24 -0
- package/dist/i18n/context.d.mts +9 -0
- package/dist/i18n/context.mjs +19 -0
- package/dist/i18n/en.d.mts +5 -0
- package/dist/i18n/en.mjs +64 -0
- package/dist/i18n/index.d.mts +5 -0
- package/dist/i18n/index.mjs +4 -0
- package/dist/i18n/ja.d.mts +5 -0
- package/dist/i18n/ja.mjs +64 -0
- package/dist/i18n/messages.d.mts +84 -0
- package/dist/i18n/messages.mjs +1 -0
- package/dist/index.d.mts +94 -0
- package/dist/index.mjs +85 -0
- package/dist/integrations/_shared/openui-defs.d.mts +18 -0
- package/dist/integrations/_shared/openui-defs.mjs +162 -0
- package/dist/integrations/_shared/renderers.d.mts +71 -0
- package/dist/integrations/_shared/renderers.mjs +679 -0
- package/dist/integrations/_shared/schemas.d.mts +718 -0
- package/dist/integrations/_shared/schemas.mjs +545 -0
- package/dist/integrations/ai-sdk/index.d.mts +3 -0
- package/dist/integrations/ai-sdk/index.mjs +2 -0
- package/dist/integrations/ai-sdk/map-parts.d.mts +28 -0
- package/dist/integrations/ai-sdk/map-parts.mjs +32 -0
- package/dist/integrations/json-render/catalog.d.mts +838 -0
- package/dist/integrations/json-render/catalog.mjs +311 -0
- package/dist/integrations/json-render/registry.d.mts +29 -0
- package/dist/integrations/json-render/registry.mjs +159 -0
- package/dist/integrations/openui/form-views.d.mts +21 -0
- package/dist/integrations/openui/form-views.mjs +66 -0
- package/dist/integrations/openui/library.d.mts +151 -0
- package/dist/integrations/openui/library.mjs +69 -0
- package/dist/integrations/openui/prompt.d.mts +5 -0
- package/dist/integrations/openui/prompt.mjs +19 -0
- package/dist/internal/clamp.d.mts +4 -0
- package/dist/internal/clamp.mjs +15 -0
- package/dist/internal/to-precision.d.mts +4 -0
- package/dist/internal/to-precision.mjs +15 -0
- package/dist/styles/base.css +315 -0
- package/dist/styles/index.css +2677 -0
- package/dist/styles/tailwind.css +22 -0
- package/dist/styles/tokens.css +380 -0
- package/dist/styles/tokens.d.mts +2 -0
- package/dist/styles/tokens.generated.d.mts +840 -0
- package/dist/styles/tokens.generated.mjs +813 -0
- package/dist/styles/tokens.mjs +2 -0
- package/dist/styles/utilities.css +62 -0
- package/dist/types/index.d.mts +2 -0
- package/dist/types/index.mjs +1 -0
- package/dist/types/variables.d.mts +23 -0
- package/dist/types/variables.mjs +1 -0
- package/docs/GUIDE.md +324 -0
- package/docs/llms.txt +25 -0
- package/docs/props.generated.json +3519 -0
- package/docs/references/ai-chat.md +354 -0
- package/docs/references/color.md +121 -0
- package/docs/references/components.md +1466 -0
- package/docs/references/generative-ui.md +112 -0
- package/docs/references/helpers.md +120 -0
- package/docs/references/hooks.md +314 -0
- package/docs/references/interaction-design.md +95 -0
- package/docs/references/spatial-design.md +137 -0
- package/docs/references/typography.md +110 -0
- package/package.json +197 -0
|
@@ -0,0 +1,354 @@
|
|
|
1
|
+
# k8ordo UI AI チャットコンポーネント
|
|
2
|
+
|
|
3
|
+
AI チャット UI(会話ログ・メッセージ・入力欄・推論表示・ツール実行表示)を構築するコンポーネント群。ルートではなく専用サブパスからインポートする。
|
|
4
|
+
|
|
5
|
+
## インポート方法
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
// 基本コンポーネント(追加の依存なし)
|
|
9
|
+
import {
|
|
10
|
+
Conversation,
|
|
11
|
+
Message,
|
|
12
|
+
PromptInput,
|
|
13
|
+
Reasoning,
|
|
14
|
+
Suggestion,
|
|
15
|
+
ToolInvocation,
|
|
16
|
+
} from '@k8ordo/ui/ai';
|
|
17
|
+
|
|
18
|
+
// ストリーミング対応 Markdown 描画(optional peer: streamdown)
|
|
19
|
+
import { Response } from '@k8ordo/ui/ai/response';
|
|
20
|
+
|
|
21
|
+
// AI SDK 連携(optional peer: ai)
|
|
22
|
+
import { mapMessageParts } from '@k8ordo/ui/ai-sdk';
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
型も `@k8ordo/ui/ai` から export される:
|
|
26
|
+
|
|
27
|
+
- `ChatStatus`: `'ready' | 'submitted' | 'streaming' | 'error'`(AI SDK の `status` と互換)
|
|
28
|
+
- `ToolState`: `'input-streaming' | 'input-available' | 'approval-requested' | 'approval-responded' | 'output-available' | 'output-error' | 'output-denied'`(AI SDK v7 のツール状態と 1:1)
|
|
29
|
+
|
|
30
|
+
### optional peer のセットアップ
|
|
31
|
+
|
|
32
|
+
使うサブパスの分だけインストールする。`@k8ordo/ui/ai` 本体はどちらも不要。
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# @k8ordo/ui/ai/response(Response)を使う場合
|
|
36
|
+
pnpm add streamdown
|
|
37
|
+
# @k8ordo/ui/ai-sdk(mapMessageParts)を使う場合
|
|
38
|
+
pnpm add ai
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
`Response` を使う場合は streamdown のスタイルシートの読み込みと、Tailwind の `@source` 設定も必要。streamdown のスタイルはビルド済み `styles.css` には含まれないため、`Response` だけは Tailwind CSS 4 のビルド(`@k8ordo/ui/tailwind.css` エントリ)が前提になる:
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import 'streamdown/styles.css';
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
```css
|
|
48
|
+
/* アプリの CSS エントリに追加(パスは CSS ファイルから node_modules への相対) */
|
|
49
|
+
@source '../node_modules/streamdown/dist/*.js';
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
なお本リファレンスの例で使う `useChat` は AI SDK の React バインディング(`pnpm add @ai-sdk/react`)から import する。
|
|
53
|
+
|
|
54
|
+
以下に出てくる `label` / `sendLabel` などの「デフォルト」は文言辞書の既定値(日本語)。`<UIProvider messages={en}>` で辞書ごと切り替えられる([i18n](components.md))。個別の prop を渡した場合はそちらが辞書より優先される。
|
|
55
|
+
|
|
56
|
+
## 全体像
|
|
57
|
+
|
|
58
|
+
`Conversation`(会話ログ)+ `Message`(吹き出し)+ `PromptInput`(入力欄)が骨組み。`Response` / `Reasoning` / `ToolInvocation` は後から足せる。
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
'use client';
|
|
62
|
+
import { Avatar, AssistantIcon } from '@k8ordo/ui';
|
|
63
|
+
import { Conversation, Message, PromptInput } from '@k8ordo/ui/ai';
|
|
64
|
+
import { useChat } from '@ai-sdk/react';
|
|
65
|
+
import type { UIMessage } from 'ai';
|
|
66
|
+
|
|
67
|
+
const textOf = (m: UIMessage) =>
|
|
68
|
+
m.parts.map((p) => (p.type === 'text' ? p.text : '')).join('');
|
|
69
|
+
|
|
70
|
+
export function Chat() {
|
|
71
|
+
const { messages, sendMessage, status, stop } = useChat();
|
|
72
|
+
|
|
73
|
+
return (
|
|
74
|
+
<div className="flex h-full flex-col gap-3">
|
|
75
|
+
<Conversation.Root>
|
|
76
|
+
<Conversation.Messages isStreaming={status === 'streaming'}>
|
|
77
|
+
{messages.map((m) => (
|
|
78
|
+
<Message.Root
|
|
79
|
+
from={m.role === 'user' ? 'user' : 'assistant'}
|
|
80
|
+
key={m.id}
|
|
81
|
+
>
|
|
82
|
+
{m.role !== 'user' && (
|
|
83
|
+
<Avatar
|
|
84
|
+
color="primary"
|
|
85
|
+
icon={<AssistantIcon />}
|
|
86
|
+
name="AI"
|
|
87
|
+
size="sm"
|
|
88
|
+
/>
|
|
89
|
+
)}
|
|
90
|
+
<Message.Content>{textOf(m)}</Message.Content>
|
|
91
|
+
</Message.Root>
|
|
92
|
+
))}
|
|
93
|
+
</Conversation.Messages>
|
|
94
|
+
<Conversation.ScrollButton />
|
|
95
|
+
</Conversation.Root>
|
|
96
|
+
|
|
97
|
+
<PromptInput.Root
|
|
98
|
+
onStop={stop}
|
|
99
|
+
onSubmit={(text) => sendMessage({ text })}
|
|
100
|
+
status={status}
|
|
101
|
+
>
|
|
102
|
+
<PromptInput.Textarea placeholder="メッセージを入力" />
|
|
103
|
+
<PromptInput.Submit />
|
|
104
|
+
</PromptInput.Root>
|
|
105
|
+
</div>
|
|
106
|
+
);
|
|
107
|
+
}
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Conversation
|
|
111
|
+
|
|
112
|
+
会話ログのスクロール領域。Compound component パターン。最下部に張り付き、新しいメッセージで自動スクロールする。最下部から離れると `ScrollButton` が現れる。
|
|
113
|
+
|
|
114
|
+
```tsx
|
|
115
|
+
import { Conversation } from '@k8ordo/ui/ai';
|
|
116
|
+
|
|
117
|
+
<Conversation.Root>
|
|
118
|
+
<Conversation.Messages isStreaming={isStreaming}>
|
|
119
|
+
{/* Message.Root ... */}
|
|
120
|
+
</Conversation.Messages>
|
|
121
|
+
<Conversation.ScrollButton />
|
|
122
|
+
</Conversation.Root>;
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Props (Conversation.Messages):
|
|
126
|
+
|
|
127
|
+
- `label`: string(デフォルト: `'チャット'`、aria-label として使用)
|
|
128
|
+
- `isStreaming`: boolean(`aria-busy` に反映)
|
|
129
|
+
|
|
130
|
+
Props (Conversation.ScrollButton):
|
|
131
|
+
|
|
132
|
+
- `label`: string(デフォルト: `'最新のメッセージへ移動'`)
|
|
133
|
+
|
|
134
|
+
## Message
|
|
135
|
+
|
|
136
|
+
メッセージ 1 件。`from="user"` は右寄せの吹き出し、`from="assistant"` は地の文として描画される。アバターなどは `Message.Root` の子として自由に並べられる。
|
|
137
|
+
|
|
138
|
+
```tsx
|
|
139
|
+
import { Message } from '@k8ordo/ui/ai';
|
|
140
|
+
|
|
141
|
+
<Message.Root from="user">
|
|
142
|
+
<Message.Content>こんにちは</Message.Content>
|
|
143
|
+
</Message.Root>
|
|
144
|
+
|
|
145
|
+
<Message.Root from="assistant">
|
|
146
|
+
<Message.Content isStreaming>生成中の本文…</Message.Content>
|
|
147
|
+
</Message.Root>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
Props (Message.Root):
|
|
151
|
+
|
|
152
|
+
- `from`: `'user'` | `'assistant'`(必須)
|
|
153
|
+
|
|
154
|
+
Props (Message.Content):
|
|
155
|
+
|
|
156
|
+
- `isStreaming`: boolean(true でストリーミングカーソルを表示)
|
|
157
|
+
|
|
158
|
+
## PromptInput
|
|
159
|
+
|
|
160
|
+
送信フォーム。Enter で送信、Shift+Enter で改行。IME 変換確定の Enter では送信しない。`status` が `'submitted'` / `'streaming'` の間は `Submit` が停止ボタンに切り替わる。本文は trim され、空文字は送信されない。
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
import { PromptInput } from '@k8ordo/ui/ai';
|
|
164
|
+
|
|
165
|
+
<PromptInput.Root
|
|
166
|
+
status={status}
|
|
167
|
+
onSubmit={(message) => send(message)}
|
|
168
|
+
onStop={stop}
|
|
169
|
+
>
|
|
170
|
+
<PromptInput.Textarea placeholder="メッセージを入力" />
|
|
171
|
+
<PromptInput.Submit />
|
|
172
|
+
</PromptInput.Root>;
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Props (PromptInput.Root):
|
|
176
|
+
|
|
177
|
+
- `status`: ChatStatus(デフォルト: `'ready'`)
|
|
178
|
+
- `value` / `defaultValue` / `onChange`: controlled / uncontrolled 両対応(`onChange` は `(value: string) => void`)
|
|
179
|
+
- `onSubmit`: `(message: string) => void`(trim 済みの本文)
|
|
180
|
+
- `onStop`: `() => void`(送信中に停止ボタンを押したとき)
|
|
181
|
+
|
|
182
|
+
Props (PromptInput.Textarea):
|
|
183
|
+
|
|
184
|
+
- `placeholder`: string ほか textarea 属性
|
|
185
|
+
|
|
186
|
+
Props (PromptInput.Submit):
|
|
187
|
+
|
|
188
|
+
- `sendLabel`: string(デフォルト: `'送信'`)
|
|
189
|
+
- `stopLabel`: string(デフォルト: `'停止'`)
|
|
190
|
+
|
|
191
|
+
## Reasoning
|
|
192
|
+
|
|
193
|
+
推論(思考過程)の折りたたみ表示。ストリーミング中はラベルが「思考中…」になる。
|
|
194
|
+
|
|
195
|
+
```tsx
|
|
196
|
+
import { Reasoning } from '@k8ordo/ui/ai';
|
|
197
|
+
|
|
198
|
+
<Reasoning isStreaming={isThinking}>{reasoningText}</Reasoning>;
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
Props:
|
|
202
|
+
|
|
203
|
+
- `isStreaming`: boolean
|
|
204
|
+
- `isOpen` / `defaultOpen` / `onChange`: 開閉の controlled / uncontrolled 両対応(`onChange` は `(isOpen: boolean) => void`)
|
|
205
|
+
|
|
206
|
+
## Response
|
|
207
|
+
|
|
208
|
+
ストリーミング対応の Markdown レンダラ。未クローズのコードブロックなど途中の Markdown も破綻なく描画する。optional peer の `streamdown` が必要([セットアップ](#optional-peer-のセットアップ)参照)。
|
|
209
|
+
|
|
210
|
+
```tsx
|
|
211
|
+
import { Response } from '@k8ordo/ui/ai/response';
|
|
212
|
+
import 'streamdown/styles.css';
|
|
213
|
+
|
|
214
|
+
<Message.Content>
|
|
215
|
+
<Response isStreaming={isStreaming}>{markdown}</Response>
|
|
216
|
+
</Message.Content>;
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
Props:
|
|
220
|
+
|
|
221
|
+
- `children`: string(Markdown 文字列、必須)
|
|
222
|
+
- `isStreaming`: boolean
|
|
223
|
+
- 上記以外の streamdown の props(`translations` / `controls` / `linkSafety` / `plugins` / `components` / `urlTransform` / `dir` など)はそのまま透過する。`className` と `mode` はライブラリが握る(`mode` は `isStreaming` から決まる)
|
|
224
|
+
|
|
225
|
+
文言は i18n 辞書から引くので、既定では「コードをコピー」「表をダウンロード」などが日本語で出る。個別に変えたいときは `translations` を渡す(prop > 辞書 > streamdown 既定)。
|
|
226
|
+
|
|
227
|
+
`linkSafety` はライブラリ側で**無効を既定にしている**。streamdown の既定(有効)ではリンクが `<a>` ではなく `<button>` で描画され、⌘クリック・中クリック・リンクアドレスのコピー・支援技術の link ロールが失われるため。確認ダイアログを挟みたい場合は明示的に有効化する:
|
|
228
|
+
|
|
229
|
+
```tsx
|
|
230
|
+
<Response linkSafety={{ enabled: true }}>{markdown}</Response>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
なお `javascript:` のような危険なスキームは `linkSafety` とは無関係に rehype-harden が無効化するので、既定のままでも生きたリンクにはならない。
|
|
234
|
+
|
|
235
|
+
## Suggestion
|
|
236
|
+
|
|
237
|
+
候補プロンプトのチップ表示。クリックで `onSelect` に `value` が渡る。
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
import { Suggestion } from '@k8ordo/ui/ai';
|
|
241
|
+
|
|
242
|
+
<Suggestion.List>
|
|
243
|
+
<Suggestion.Item onSelect={send} value="IME 対応について教えて" />
|
|
244
|
+
<Suggestion.Item onSelect={send} value="streaming">
|
|
245
|
+
ストリーミング表示は?
|
|
246
|
+
</Suggestion.Item>
|
|
247
|
+
</Suggestion.List>;
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Props (Suggestion.List):
|
|
251
|
+
|
|
252
|
+
- `label`: string(デフォルト: `'候補'`、aria-label として使用)
|
|
253
|
+
|
|
254
|
+
Props (Suggestion.Item):
|
|
255
|
+
|
|
256
|
+
- `value`: string(必須。children 省略時は表示テキストも兼ねる)
|
|
257
|
+
- `onSelect`: `(value: string) => void`
|
|
258
|
+
|
|
259
|
+
## ToolInvocation
|
|
260
|
+
|
|
261
|
+
ツール呼び出しの折りたたみ表示。`state` に応じてスピナー / 成功 / エラー / 拒否のアイコンが切り替わる(承認待ち・承認応答・入力中は進行中としてスピナー)。
|
|
262
|
+
|
|
263
|
+
```tsx
|
|
264
|
+
import { ToolInvocation } from '@k8ordo/ui/ai';
|
|
265
|
+
|
|
266
|
+
<ToolInvocation
|
|
267
|
+
name="search_web"
|
|
268
|
+
state="output-available"
|
|
269
|
+
input={{ query: 'k8ordo UI' }}
|
|
270
|
+
output="検索結果…"
|
|
271
|
+
/>;
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Props:
|
|
275
|
+
|
|
276
|
+
- `name`: string(必須、ツール名)
|
|
277
|
+
- `state`: ToolState(必須)
|
|
278
|
+
- `input`: unknown(文字列以外は JSON 表示)
|
|
279
|
+
- `output`: ReactNode(文字列は `pre` 表示、要素はそのまま描画)
|
|
280
|
+
- `errorText`: string(`state="output-error"` 時の表示。省略時は既定文言)
|
|
281
|
+
- `deniedReason`: string(`state="output-denied"` 時の表示。省略時は既定文言)
|
|
282
|
+
- `isOpen` / `defaultOpen` / `onChange`: 開閉の controlled / uncontrolled 両対応
|
|
283
|
+
|
|
284
|
+
## AI SDK 連携(mapMessageParts)
|
|
285
|
+
|
|
286
|
+
`@k8ordo/ui/ai-sdk` の `mapMessageParts` は、AI SDK の `UIMessage.parts` を描画しやすい `MappedPart[]` に変換する。React 非依存で、optional peer の `ai`(v7)が必要。
|
|
287
|
+
|
|
288
|
+
```ts
|
|
289
|
+
type MappedPart =
|
|
290
|
+
| { kind: 'text'; text: string }
|
|
291
|
+
| { kind: 'reasoning'; text: string }
|
|
292
|
+
| {
|
|
293
|
+
kind: 'tool';
|
|
294
|
+
name: string;
|
|
295
|
+
toolCallId: string;
|
|
296
|
+
state: ToolState;
|
|
297
|
+
input?: unknown;
|
|
298
|
+
output?: unknown;
|
|
299
|
+
errorText?: string;
|
|
300
|
+
deniedReason?: string;
|
|
301
|
+
};
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
利用側が `kind` で分岐して `Response` / `Reasoning` / `ToolInvocation` を描画する:
|
|
305
|
+
|
|
306
|
+
```tsx
|
|
307
|
+
import { mapMessageParts } from '@k8ordo/ui/ai-sdk';
|
|
308
|
+
import { Reasoning, ToolInvocation } from '@k8ordo/ui/ai';
|
|
309
|
+
import { Response } from '@k8ordo/ui/ai/response';
|
|
310
|
+
|
|
311
|
+
<Message.Content>
|
|
312
|
+
{mapMessageParts(message).map((part, i) => {
|
|
313
|
+
if (part.kind === 'reasoning')
|
|
314
|
+
return <Reasoning key={i}>{part.text}</Reasoning>;
|
|
315
|
+
if (part.kind === 'tool') {
|
|
316
|
+
// output は unknown なので、ReactNode に変換してから渡す
|
|
317
|
+
return (
|
|
318
|
+
<ToolInvocation
|
|
319
|
+
key={part.toolCallId}
|
|
320
|
+
name={part.name}
|
|
321
|
+
state={part.state}
|
|
322
|
+
input={part.input}
|
|
323
|
+
output={
|
|
324
|
+
typeof part.output === 'string'
|
|
325
|
+
? part.output
|
|
326
|
+
: JSON.stringify(part.output, null, 2)
|
|
327
|
+
}
|
|
328
|
+
errorText={part.errorText}
|
|
329
|
+
deniedReason={part.deniedReason}
|
|
330
|
+
/>
|
|
331
|
+
);
|
|
332
|
+
}
|
|
333
|
+
return <Response key={i}>{part.text}</Response>;
|
|
334
|
+
})}
|
|
335
|
+
</Message.Content>;
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
`ChatStatus` / `ToolState` 型は `@k8ordo/ui/ai-sdk` からも re-export される。
|
|
339
|
+
|
|
340
|
+
## 生成 UI との組み合わせ
|
|
341
|
+
|
|
342
|
+
LLM がツール結果として返した UI spec を、チャットの吹き出し内で描画できる。詳細は [生成 UI リファレンス](generative-ui.md) を参照。
|
|
343
|
+
|
|
344
|
+
```tsx
|
|
345
|
+
'use client';
|
|
346
|
+
import { Message } from '@k8ordo/ui/ai';
|
|
347
|
+
import { JsonRenderUI } from '@k8ordo/ui/json-render/registry';
|
|
348
|
+
|
|
349
|
+
<Message.Root from="assistant">
|
|
350
|
+
<Message.Content>
|
|
351
|
+
<JsonRenderUI spec={spec} />
|
|
352
|
+
</Message.Content>
|
|
353
|
+
</Message.Root>;
|
|
354
|
+
```
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
# カラーシステム
|
|
2
|
+
|
|
3
|
+
k8ordo UI のカラーは OKLCH 色空間で定義され、穏やかなトーンでUIに出る。
|
|
4
|
+
|
|
5
|
+
## 設計思想
|
|
6
|
+
|
|
7
|
+
- **OKLCH パレット**: 全色を OKLCH で定義。明度(L)を全色相で統一し、同じステップ番号同士のコントラストが揃う
|
|
8
|
+
- **鮮やかなパレット、穏やかなトークン**: パレット自体は鮮やかに保ち、セマンティックトークンで抑えたトーンにマッピング
|
|
9
|
+
- **WCAG AAA 準拠**: fg/bg の組み合わせで 7:1 以上のコントラスト比を確保
|
|
10
|
+
- **60-30-10 ルール**: 60% ニュートラル(グレー系)、30% サポート(bg-subtle 等)、10% アクセント(primary)
|
|
11
|
+
- Primary に Teal(H:180)、Secondary に Cyan(H:210)を使用
|
|
12
|
+
- ダークモードは「ライトモードの反転」ではなく、独立したトーンで設計
|
|
13
|
+
|
|
14
|
+
## OKLCH パレット設計
|
|
15
|
+
|
|
16
|
+
明度スケール(全色相で共通):
|
|
17
|
+
|
|
18
|
+
| Step | L | 用途 |
|
|
19
|
+
| ---- | ----- | -------------------------- |
|
|
20
|
+
| 50 | 0.975 | 最も薄い背景 |
|
|
21
|
+
| 100 | 0.945 | 薄い背景 |
|
|
22
|
+
| 200 | 0.900 | 控えめな背景 |
|
|
23
|
+
| 300 | 0.840 | サポートカラー |
|
|
24
|
+
| 400 | 0.750 | 中間トーン |
|
|
25
|
+
| 500 | 0.660 | コアカラー |
|
|
26
|
+
| 600 | 0.575 | やや暗い |
|
|
27
|
+
| 700 | 0.490 | 暗いトーン |
|
|
28
|
+
| 800 | 0.410 | テキスト用(AAA on white) |
|
|
29
|
+
| 900 | 0.370 | 最も暗い |
|
|
30
|
+
|
|
31
|
+
Chroma は色相ごとに最適化(gamut 内で最大化)。
|
|
32
|
+
|
|
33
|
+
## セマンティックカラー(前景)
|
|
34
|
+
|
|
35
|
+
| Tailwind クラス | Light | Dark | 用途 |
|
|
36
|
+
| ----------------- | ---------- | ---------- | ---------------- |
|
|
37
|
+
| `text-fg-base` | gray-900 | gray-50 | 基本テキスト |
|
|
38
|
+
| `text-fg-subtle` | gray-400 | gray-500 | プレースホルダー |
|
|
39
|
+
| `text-fg-mute` | gray-700 | gray-300 | 補足テキスト |
|
|
40
|
+
| `text-fg-inverse` | gray-50 | gray-900 | 反転テキスト |
|
|
41
|
+
| `text-fg-info` | blue-800 | blue-200 | 情報 |
|
|
42
|
+
| `text-fg-success` | green-800 | green-200 | 成功 |
|
|
43
|
+
| `text-fg-warning` | yellow-800 | yellow-200 | 警告 |
|
|
44
|
+
| `text-fg-error` | red-800 | red-200 | エラー |
|
|
45
|
+
|
|
46
|
+
## セマンティックカラー(背景)
|
|
47
|
+
|
|
48
|
+
| Tailwind クラス | Light | Dark | 用途 |
|
|
49
|
+
| ----------------- | ---------- | ---------- | ---------------- |
|
|
50
|
+
| `bg-bg-base` | white | gray-900 | カード背景 |
|
|
51
|
+
| `bg-bg-subtle` | gray-100 | gray-800 | ページ背景 |
|
|
52
|
+
| `bg-bg-mute` | gray-200 | gray-700 | ホバー状態用 |
|
|
53
|
+
| `bg-bg-emphasize` | gray-300 | gray-600 | アクティブ状態用 |
|
|
54
|
+
| `bg-bg-inverse` | gray-900 | white | 反転背景 |
|
|
55
|
+
| `bg-bg-info` | blue-100 | blue-900 | 情報背景 |
|
|
56
|
+
| `bg-bg-success` | green-100 | green-900 | 成功背景 |
|
|
57
|
+
| `bg-bg-warning` | yellow-100 | yellow-900 | 警告背景 |
|
|
58
|
+
| `bg-bg-error` | red-100 | red-900 | エラー背景 |
|
|
59
|
+
|
|
60
|
+
## セマンティックカラー(ボーダー)
|
|
61
|
+
|
|
62
|
+
| Tailwind クラス | Light | Dark | 用途 |
|
|
63
|
+
| ------------------------- | ---------- | ---------- | -------------- |
|
|
64
|
+
| `border-border-base` | gray-400 | gray-600 | 標準ボーダー |
|
|
65
|
+
| `border-border-subtle` | gray-100 | gray-900 | 薄いボーダー |
|
|
66
|
+
| `border-border-mute` | gray-200 | gray-800 | 控えめボーダー |
|
|
67
|
+
| `border-border-emphasize` | gray-500 | gray-500 | 強調ボーダー |
|
|
68
|
+
| `border-border-inverse` | gray-700 | gray-300 | 反転ボーダー |
|
|
69
|
+
| `border-border-info` | blue-500 | blue-500 | 情報ボーダー |
|
|
70
|
+
| `border-border-success` | green-500 | green-500 | 成功ボーダー |
|
|
71
|
+
| `border-border-warning` | yellow-500 | yellow-500 | 警告ボーダー |
|
|
72
|
+
| `border-border-error` | red-500 | red-500 | エラーボーダー |
|
|
73
|
+
|
|
74
|
+
## ブランドカラー(Primary: Teal H:180)
|
|
75
|
+
|
|
76
|
+
| Tailwind クラス | Light | Dark | 用途 |
|
|
77
|
+
| ------------------------- | -------- | -------- | ------------------- |
|
|
78
|
+
| `text-primary-fg` | teal-800 | teal-100 | Primary テキスト |
|
|
79
|
+
| `bg-primary-bg` | teal-200 | teal-800 | Primary 背景 |
|
|
80
|
+
| `bg-primary-bg-subtle` | teal-50 | teal-900 | 薄い Primary 背景 |
|
|
81
|
+
| `bg-primary-bg-mute` | teal-100 | teal-800 | 控えめ Primary 背景 |
|
|
82
|
+
| `bg-primary-bg-emphasize` | teal-200 | teal-700 | 強調 Primary 背景 |
|
|
83
|
+
| `border-primary-border` | teal-500 | teal-500 | Primary ボーダー |
|
|
84
|
+
|
|
85
|
+
## ブランドカラー(Secondary: Cyan H:210)
|
|
86
|
+
|
|
87
|
+
| Tailwind クラス | Light | Dark | 用途 |
|
|
88
|
+
| ------------------------- | -------- | -------- | ------------------- |
|
|
89
|
+
| `text-secondary-fg` | cyan-700 | cyan-300 | Secondary テキスト |
|
|
90
|
+
| `bg-secondary-bg` | cyan-300 | cyan-700 | Secondary 背景 |
|
|
91
|
+
| `bg-secondary-bg-subtle` | cyan-100 | cyan-900 | 薄い Secondary 背景 |
|
|
92
|
+
| `border-secondary-border` | cyan-600 | cyan-600 | Secondary ボーダー |
|
|
93
|
+
|
|
94
|
+
## 使い方の例
|
|
95
|
+
|
|
96
|
+
```tsx
|
|
97
|
+
// ページ背景にカードを浮かせる
|
|
98
|
+
<div className="bg-bg-subtle min-h-screen">
|
|
99
|
+
<Card appearance="shadow">
|
|
100
|
+
<div className="p-8">
|
|
101
|
+
<h2 className="text-fg-base font-bold">タイトル</h2>
|
|
102
|
+
<p className="text-fg-mute mt-2">補足テキスト</p>
|
|
103
|
+
<span className="text-primary-fg">アクセントテキスト</span>
|
|
104
|
+
</div>
|
|
105
|
+
</Card>
|
|
106
|
+
</div>
|
|
107
|
+
|
|
108
|
+
// ホバー状態
|
|
109
|
+
<button className="bg-bg-base hover:bg-bg-mute transition-colors">
|
|
110
|
+
ボタン
|
|
111
|
+
</button>
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## やってはいけないこと
|
|
115
|
+
|
|
116
|
+
- グラデーション背景(`bg-gradient-to-*`)
|
|
117
|
+
- 彩度の高い色の広範囲使用(アクセントは小面積で)
|
|
118
|
+
- 透明度による状態表現(`/90`, `/80` など)— 専用のセマンティックカラーを使う
|
|
119
|
+
- ホバーに `bg-primary-bg` を使う — `bg-bg-mute` を優先
|
|
120
|
+
- 生のパレット色(`bg-teal-500`)を直接使う — セマンティックトークンを使う
|
|
121
|
+
- ダークモードで単純にカラーを反転させる
|