@ctrl-ui/react 0.8.2 → 0.8.5
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 +32 -23
- package/dist/action-bar.d.ts +11 -12
- package/dist/activity.d.ts +24 -25
- package/dist/audio-recorder.d.ts +16 -16
- package/dist/audio-visualizer.d.ts +3 -4
- package/dist/audio-visualizer.js +1 -1
- package/dist/blocks/chat.d.ts +3 -4
- package/dist/blocks/chat.js +6 -3
- package/dist/blocks/coding-agent.d.ts +11 -12
- package/dist/blocks/coding-agent.js +10 -9
- package/dist/blocks/file-explorer-data.d.ts +11 -12
- package/dist/blocks/file-explorer.d.ts +3 -3
- package/dist/blocks/settings-data.d.ts +8 -9
- package/dist/blocks/settings.d.ts +4 -4
- package/dist/blocks/theme-toggle.d.ts +11 -12
- package/dist/blocks/theme-toggle.js +14 -4
- package/dist/chat-composer-attachment.d.ts +20 -21
- package/dist/chat-composer-attachment.js +24 -20
- package/dist/chat-composer-editor/extensions/mention.d.ts +5 -6
- package/dist/chat-composer-editor/extensions/mention.js +4 -0
- package/dist/chat-composer-editor/ghost.d.ts +3 -4
- package/dist/chat-composer-editor/schema.d.ts +2 -3
- package/dist/chat-composer-editor/serialize.d.ts +3 -4
- package/dist/chat-composer-editor/types.d.ts +5 -6
- package/dist/chat-composer-editor.d.ts +2 -3
- package/dist/chat-composer-editor.js +18 -4
- package/dist/chat-composer.d.ts +17 -18
- package/dist/chat-composer.js +14 -8
- package/dist/chat-layout.d.ts +17 -21
- package/dist/chat-layout.js +72 -86
- package/dist/chat-message.d.ts +19 -15
- package/dist/chat-message.js +19 -2
- package/dist/context-model.d.ts +7 -8
- package/dist/context.d.ts +21 -22
- package/dist/context.js +0 -2
- package/dist/control-props.d.ts +10 -11
- package/dist/control-variants.d.ts +6 -7
- package/dist/dynamic-notification-glass.d.ts +3 -4
- package/dist/dynamic-notification-liquid.d.ts +3 -4
- package/dist/dynamic-notification-siri-wave.d.ts +2 -3
- package/dist/dynamic-notification.d.ts +28 -29
- package/dist/email/email-brand.d.ts +60 -0
- package/dist/email/email-brand.js +101 -0
- package/dist/email/email-code.d.ts +18 -0
- package/dist/email/email-code.js +172 -0
- package/dist/email/email-footer.d.ts +63 -0
- package/dist/email/email-footer.js +98 -0
- package/dist/email/email.d.ts +62 -14
- package/dist/email/email.js +155 -24
- package/dist/email/length.d.ts +2 -3
- package/dist/email/templates.d.ts +56 -12
- package/dist/email/templates.js +314 -116
- package/dist/email/theme.d.ts +15 -8
- package/dist/email/theme.js +30 -8
- package/dist/environment-variables.d.ts +35 -36
- package/dist/extensions/create-track-highlight.d.ts +3 -4
- package/dist/extensions/supports-anchor-transitions.d.ts +2 -3
- package/dist/extensions/track-highlight.d.ts +3 -4
- package/dist/hooks/use-audio-recorder.d.ts +14 -15
- package/dist/hooks/use-chat-composer.d.ts +5 -6
- package/dist/hooks/use-chat-message.d.ts +8 -8
- package/dist/hooks/use-chat-message.js +1 -0
- package/dist/hooks/use-chat-thread-scroll.d.ts +8 -0
- package/dist/hooks/use-chat-thread-scroll.js +66 -0
- package/dist/hooks/use-color-area.d.ts +5 -6
- package/dist/hooks/use-copy-to-clipboard.d.ts +7 -8
- package/dist/hooks/use-dropzone.d.ts +11 -12
- package/dist/hooks/use-dynamic-notification.d.ts +6 -7
- package/dist/hooks/use-environment-variables.d.ts +9 -10
- package/dist/hooks/use-keyboard-navigation.d.ts +3 -0
- package/dist/hooks/use-keyboard-navigation.js +22 -0
- package/dist/hooks/use-mobile.d.ts +2 -3
- package/dist/hooks/use-textarea-trigger-menu.d.ts +2 -3
- package/dist/hooks/use-trigger-menu.d.ts +7 -8
- package/dist/hooks/use-user-ask.d.ts +11 -10
- package/dist/hooks/use-user-ask.js +56 -17
- package/dist/inline-attachment.d.ts +16 -17
- package/dist/inline-attachment.js +1 -1
- package/dist/inline-citation.d.ts +22 -23
- package/dist/knob-contracts/accordion-knobs.d.ts +3 -4
- package/dist/knob-contracts/accordion-knobs.js +1 -0
- package/dist/knob-contracts/action-bar-knobs.d.ts +3 -4
- package/dist/knob-contracts/action-bar-knobs.js +1 -1
- package/dist/knob-contracts/activity-knobs.d.ts +3 -4
- package/dist/knob-contracts/activity-knobs.js +2 -1
- package/dist/knob-contracts/alert-knobs.d.ts +3 -4
- package/dist/knob-contracts/alert-knobs.js +12 -1
- package/dist/knob-contracts/audio-recorder-knobs.d.ts +3 -4
- package/dist/knob-contracts/audio-visualizer-knobs.d.ts +3 -4
- package/dist/knob-contracts/audio-visualizer-knobs.js +1 -0
- package/dist/knob-contracts/avatar-knobs.d.ts +3 -4
- package/dist/knob-contracts/avatar-knobs.js +2 -1
- package/dist/knob-contracts/badge-knobs.d.ts +3 -4
- package/dist/knob-contracts/button-group-knobs.d.ts +3 -4
- package/dist/knob-contracts/button-knobs.d.ts +3 -4
- package/dist/knob-contracts/button-knobs.js +1 -0
- package/dist/knob-contracts/calendar-knobs.d.ts +3 -4
- package/dist/knob-contracts/card-knobs.d.ts +3 -4
- package/dist/knob-contracts/chat-composer-attachment-knobs.d.ts +3 -4
- package/dist/knob-contracts/chat-composer-attachment-knobs.js +5 -1
- package/dist/knob-contracts/chat-composer-knobs.d.ts +3 -4
- package/dist/knob-contracts/chat-composer-knobs.js +2 -0
- package/dist/knob-contracts/chat-layout-knobs.d.ts +3 -4
- package/dist/knob-contracts/chat-layout-knobs.js +2 -2
- package/dist/knob-contracts/chat-message-knobs.d.ts +3 -4
- package/dist/knob-contracts/chat-message-knobs.js +3 -1
- package/dist/knob-contracts/choice-knobs.d.ts +3 -4
- package/dist/knob-contracts/choice-knobs.js +2 -1
- package/dist/knob-contracts/code-diff-knobs.d.ts +3 -4
- package/dist/knob-contracts/code-diff-knobs.js +1 -0
- package/dist/knob-contracts/code-knobs.d.ts +3 -4
- package/dist/knob-contracts/code-knobs.js +3 -1
- package/dist/knob-contracts/collapsible-knobs.d.ts +3 -4
- package/dist/knob-contracts/color-picker-knobs.d.ts +3 -4
- package/dist/knob-contracts/context-knobs.d.ts +3 -4
- package/dist/knob-contracts/context-knobs.js +3 -0
- package/dist/knob-contracts/dockable-panel-knobs.d.ts +3 -4
- package/dist/knob-contracts/dockable-panel-knobs.js +1 -0
- package/dist/knob-contracts/dropzone-knobs.d.ts +3 -4
- package/dist/knob-contracts/dropzone-knobs.js +1 -0
- package/dist/knob-contracts/dynamic-notification-knobs.d.ts +3 -4
- package/dist/knob-contracts/empty-knobs.d.ts +3 -4
- package/dist/knob-contracts/empty-knobs.js +14 -1
- package/dist/knob-contracts/environment-variables-knobs.d.ts +3 -4
- package/dist/knob-contracts/environment-variables-knobs.js +2 -1
- package/dist/knob-contracts/field-knobs.d.ts +3 -4
- package/dist/knob-contracts/gradient-editor-knobs.d.ts +3 -4
- package/dist/knob-contracts/gradient-editor-knobs.js +3 -1
- package/dist/knob-contracts/infinite-canvas-knobs.d.ts +3 -4
- package/dist/knob-contracts/inline-attachment-knobs.d.ts +3 -4
- package/dist/knob-contracts/inline-attachment-knobs.js +6 -1
- package/dist/knob-contracts/inline-citation-knobs.d.ts +3 -4
- package/dist/knob-contracts/inline-citation-knobs.js +4 -1
- package/dist/knob-contracts/item-knobs.d.ts +3 -4
- package/dist/knob-contracts/kbd-knobs.d.ts +3 -4
- package/dist/knob-contracts/markdown-block-knobs.d.ts +3 -4
- package/dist/knob-contracts/markdown-block-knobs.js +2 -0
- package/dist/knob-contracts/markdown-knobs.d.ts +3 -4
- package/dist/knob-contracts/markdown-knobs.js +1 -0
- package/dist/knob-contracts/morphing-panel-knobs.d.ts +3 -4
- package/dist/knob-contracts/page-layout-knobs.d.ts +4 -0
- package/dist/knob-contracts/page-layout-knobs.js +15 -0
- package/dist/knob-contracts/pagination-knobs.d.ts +3 -4
- package/dist/knob-contracts/phone-input-knobs.d.ts +3 -4
- package/dist/knob-contracts/phone-input-knobs.js +1 -0
- package/dist/knob-contracts/popup-knobs.d.ts +3 -4
- package/dist/knob-contracts/progressive-blur-knobs.d.ts +3 -4
- package/dist/knob-contracts/progressive-blur-knobs.js +1 -0
- package/dist/knob-contracts/range-knobs.d.ts +3 -4
- package/dist/knob-contracts/resizable-knobs.d.ts +3 -4
- package/dist/knob-contracts/resizable-knobs.js +1 -0
- package/dist/knob-contracts/rich-tooltip-knobs.d.ts +3 -4
- package/dist/knob-contracts/scroll-area-knobs.d.ts +3 -4
- package/dist/knob-contracts/separator-knobs.d.ts +3 -4
- package/dist/knob-contracts/sidebar-knobs.d.ts +3 -4
- package/dist/knob-contracts/sidebar-knobs.js +1 -0
- package/dist/knob-contracts/skeleton-knobs.d.ts +3 -4
- package/dist/knob-contracts/skeleton-knobs.js +9 -1
- package/dist/knob-contracts/source-badge-knobs.d.ts +3 -4
- package/dist/knob-contracts/spinner-knobs.d.ts +3 -4
- package/dist/knob-contracts/stepper-knobs.d.ts +3 -4
- package/dist/knob-contracts/stepper-knobs.js +1 -0
- package/dist/knob-contracts/switch-knobs.d.ts +3 -4
- package/dist/knob-contracts/switch-knobs.js +7 -1
- package/dist/knob-contracts/table-knobs.d.ts +3 -4
- package/dist/knob-contracts/table-of-contents-knobs.d.ts +3 -4
- package/dist/knob-contracts/table-of-contents-knobs.js +25 -0
- package/dist/knob-contracts/tabs-knobs.d.ts +3 -4
- package/dist/knob-contracts/tabs-knobs.js +2 -1
- package/dist/knob-contracts/task-list-knobs.d.ts +3 -4
- package/dist/knob-contracts/task-list-knobs.js +5 -0
- package/dist/knob-contracts/thread-rail-knobs.d.ts +3 -4
- package/dist/knob-contracts/timeline-knobs.d.ts +3 -4
- package/dist/knob-contracts/toolbar-knobs.d.ts +3 -4
- package/dist/knob-contracts/toolbar-knobs.js +1 -0
- package/dist/knob-contracts/track-highlight-knobs.d.ts +3 -4
- package/dist/knob-contracts/transcript-divider-knobs.d.ts +3 -4
- package/dist/knob-contracts/tree-knobs.d.ts +3 -4
- package/dist/knob-contracts/user-ask-knobs.d.ts +3 -4
- package/dist/knob-contracts/user-ask-knobs.js +5 -0
- package/dist/lib/cn.d.ts +2 -3
- package/dist/lib/code-tokens.d.ts +12 -13
- package/dist/lib/color.d.ts +26 -27
- package/dist/lib/contrast.d.ts +12 -13
- package/dist/lib/diff.d.ts +14 -15
- package/dist/lib/dropzone-validation.d.ts +25 -26
- package/dist/lib/env-file.d.ts +12 -13
- package/dist/lib/format-audio-recorder-duration.d.ts +2 -3
- package/dist/lib/liquid-glass-optics.d.ts +2 -3
- package/dist/lib/phone-input-format.d.ts +3 -4
- package/dist/lib/phone-number.d.ts +8 -9
- package/dist/lib/trigger-detect.d.ts +4 -5
- package/dist/markdown-block.d.ts +11 -12
- package/dist/markdown-block.js +1 -1
- package/dist/scripts/contrast-eval.d.ts +16 -17
- package/dist/scripts/contrast-eval.js +13 -7
- package/dist/skin-provider.d.ts +14 -0
- package/dist/skin-provider.js +21 -0
- package/dist/skin.d.ts +14 -33
- package/dist/skin.js +3 -46
- package/dist/source-badge.d.ts +7 -8
- package/dist/styles/index.css +3 -5
- package/dist/styles/recipes/accordion.css +8 -2
- package/dist/styles/recipes/action-bar.css +40 -5
- package/dist/styles/recipes/activity.css +36 -3
- package/dist/styles/recipes/alert.css +97 -16
- package/dist/styles/recipes/audio-visualizer.css +8 -1
- package/dist/styles/recipes/avatar.css +17 -1
- package/dist/styles/recipes/badge.css +0 -1
- package/dist/styles/recipes/button-group.css +8 -0
- package/dist/styles/recipes/button.css +49 -8
- package/dist/styles/recipes/calendar.css +21 -6
- package/dist/styles/recipes/card.css +2 -0
- package/dist/styles/recipes/chat-composer-attachment.css +83 -54
- package/dist/styles/recipes/chat-composer.css +41 -22
- package/dist/styles/recipes/chat-layout.css +37 -54
- package/dist/styles/recipes/chat-message.css +78 -5
- package/dist/styles/recipes/choice.css +21 -2
- package/dist/styles/recipes/code-diff.css +9 -1
- package/dist/styles/recipes/code.css +64 -17
- package/dist/styles/recipes/collapsible.css +0 -3
- package/dist/styles/recipes/color-picker-details.css +1 -2
- package/dist/styles/recipes/color-picker-values.css +0 -4
- package/dist/styles/recipes/context.css +30 -18
- package/dist/styles/recipes/dockable-panel.css +8 -1
- package/dist/styles/recipes/dropzone.css +9 -2
- package/dist/styles/recipes/dynamic-notification-input.css +6 -0
- package/dist/styles/recipes/dynamic-notification.css +1 -0
- package/dist/styles/recipes/empty.css +118 -17
- package/dist/styles/recipes/environment-variables.css +9 -1
- package/dist/styles/recipes/field-parts.css +3 -6
- package/dist/styles/recipes/field.css +15 -5
- package/dist/styles/recipes/gradient-editor.css +33 -5
- package/dist/styles/recipes/inline-attachment.css +68 -20
- package/dist/styles/recipes/inline-citation.css +52 -10
- package/dist/styles/recipes/item.css +4 -2
- package/dist/styles/recipes/kbd.css +8 -0
- package/dist/styles/recipes/markdown-block.css +17 -2
- package/dist/styles/recipes/markdown.css +19 -0
- package/dist/styles/recipes/morphing-panel.css +1 -1
- package/dist/styles/recipes/page-layout.css +203 -0
- package/dist/styles/recipes/pagination.css +16 -4
- package/dist/styles/recipes/phone-input.css +8 -4
- package/dist/styles/recipes/popup-drawer.css +3 -1
- package/dist/styles/recipes/popup-lists.css +11 -0
- package/dist/styles/recipes/popup-toast.css +3 -29
- package/dist/styles/recipes/popup.css +10 -14
- package/dist/styles/recipes/progressive-blur.css +28 -7
- package/dist/styles/recipes/range.css +74 -3
- package/dist/styles/recipes/resizable.css +8 -10
- package/dist/styles/recipes/rich-tooltip.css +1 -4
- package/dist/styles/recipes/scroll-area.css +8 -2
- package/dist/styles/recipes/sidebar-menu.css +0 -6
- package/dist/styles/recipes/sidebar.css +56 -17
- package/dist/styles/recipes/skeleton.css +85 -3
- package/dist/styles/recipes/source-badge.css +20 -3
- package/dist/styles/recipes/stepper.css +8 -1
- package/dist/styles/recipes/switch.css +89 -17
- package/dist/styles/recipes/table-of-contents.css +211 -45
- package/dist/styles/recipes/table.css +0 -1
- package/dist/styles/recipes/tabs.css +35 -2
- package/dist/styles/recipes/task-list.css +68 -9
- package/dist/styles/recipes/thread-rail.css +19 -17
- package/dist/styles/recipes/toolbar.css +39 -4
- package/dist/styles/recipes/track-highlight.css +63 -5
- package/dist/styles/recipes/transcript-divider.css +1 -0
- package/dist/styles/recipes/tree.css +2 -0
- package/dist/styles/recipes/user-ask.css +65 -18
- package/dist/styles/theme.css +164 -138
- package/dist/surface-variants.d.ts +4 -5
- package/dist/task-list.d.ts +16 -17
- package/dist/thread-rail.d.ts +21 -22
- package/dist/thread-rail.js +1 -1
- package/dist/transcript-divider.d.ts +6 -7
- package/dist/ui/accordion.d.ts +10 -11
- package/dist/ui/alert-dialog.d.ts +11 -12
- package/dist/ui/alert-dialog.js +9 -7
- package/dist/ui/alert.d.ts +9 -10
- package/dist/ui/alert.js +3 -3
- package/dist/ui/aspect-ratio.d.ts +3 -4
- package/dist/ui/autocomplete.d.ts +19 -20
- package/dist/ui/autocomplete.js +6 -4
- package/dist/ui/avatar.d.ts +9 -10
- package/dist/ui/badge.d.ts +9 -10
- package/dist/ui/button-group.d.ts +7 -8
- package/dist/ui/button-group.js +3 -2
- package/dist/ui/button.d.ts +17 -18
- package/dist/ui/button.js +20 -5
- package/dist/ui/calendar.d.ts +3 -4
- package/dist/ui/card.d.ts +16 -17
- package/dist/ui/checkbox-group.d.ts +4 -5
- package/dist/ui/checkbox-group.js +3 -2
- package/dist/ui/checkbox.d.ts +3 -4
- package/dist/ui/code-diff.d.ts +8 -9
- package/dist/ui/code.d.ts +32 -23
- package/dist/ui/code.js +41 -20
- package/dist/ui/collapsible.d.ts +7 -8
- package/dist/ui/color-picker.d.ts +40 -41
- package/dist/ui/color-picker.js +8 -6
- package/dist/ui/combobox-disabled-selection.d.ts +3 -4
- package/dist/ui/combobox.d.ts +19 -20
- package/dist/ui/combobox.js +6 -4
- package/dist/ui/command.d.ts +22 -19
- package/dist/ui/command.js +63 -13
- package/dist/ui/context-menu.d.ts +30 -31
- package/dist/ui/context-menu.js +10 -7
- package/dist/ui/dialog.d.ts +13 -13
- package/dist/ui/dialog.js +11 -9
- package/dist/ui/dockable-panel-geometry.d.ts +7 -8
- package/dist/ui/dockable-panel.d.ts +21 -22
- package/dist/ui/drawer.d.ts +17 -18
- package/dist/ui/drawer.js +9 -8
- package/dist/ui/dropdown-menu.d.ts +32 -33
- package/dist/ui/dropdown-menu.js +6 -4
- package/dist/ui/dropzone.d.ts +24 -24
- package/dist/ui/dropzone.js +4 -1
- package/dist/ui/empty.d.ts +14 -14
- package/dist/ui/empty.js +3 -3
- package/dist/ui/field.d.ts +26 -27
- package/dist/ui/form.d.ts +4 -5
- package/dist/ui/gradient-editor.d.ts +16 -17
- package/dist/ui/gradient-editor.js +2 -2
- package/dist/ui/hover-card.d.ts +6 -7
- package/dist/ui/hover-card.js +6 -4
- package/dist/ui/infinite-canvas.d.ts +11 -12
- package/dist/ui/infinite-canvas.js +1 -0
- package/dist/ui/input-group.d.ts +6 -7
- package/dist/ui/input-otp.d.ts +7 -8
- package/dist/ui/input.d.ts +3 -4
- package/dist/ui/item.d.ts +20 -21
- package/dist/ui/kbd.d.ts +7 -5
- package/dist/ui/kbd.js +4 -2
- package/dist/ui/markdown-elements.d.ts +20 -21
- package/dist/ui/markdown.d.ts +5 -6
- package/dist/ui/menubar.d.ts +25 -26
- package/dist/ui/menubar.js +10 -7
- package/dist/ui/meter.d.ts +11 -12
- package/dist/ui/morphing-panel.d.ts +8 -9
- package/dist/ui/native-select.d.ts +3 -4
- package/dist/ui/native-select.js +1 -1
- package/dist/ui/navigation-menu.d.ts +17 -18
- package/dist/ui/navigation-menu.js +6 -4
- package/dist/ui/number-field.d.ts +15 -16
- package/dist/ui/number-field.js +1 -1
- package/dist/ui/page-layout.d.ts +44 -0
- package/dist/ui/page-layout.js +108 -0
- package/dist/ui/pagination.d.ts +10 -11
- package/dist/ui/phone-input.d.ts +5 -6
- package/dist/ui/phone-input.js +39 -36
- package/dist/ui/popover.d.ts +11 -12
- package/dist/ui/popover.js +6 -4
- package/dist/ui/progress.d.ts +11 -12
- package/dist/ui/progressive-blur.d.ts +4 -5
- package/dist/ui/radio-group.d.ts +5 -6
- package/dist/ui/resizable.d.ts +12 -13
- package/dist/ui/resizable.js +1 -1
- package/dist/ui/responsive-dialog.d.ts +11 -12
- package/dist/ui/rich-tooltip-tour.d.ts +5 -6
- package/dist/ui/rich-tooltip.d.ts +21 -23
- package/dist/ui/rich-tooltip.js +6 -6
- package/dist/ui/scroll-area.d.ts +7 -8
- package/dist/ui/scroll-area.js +9 -6
- package/dist/ui/select.d.ts +21 -14
- package/dist/ui/select.js +8 -5
- package/dist/ui/separator.d.ts +2 -3
- package/dist/ui/sheet.d.ts +8 -9
- package/dist/ui/sheet.js +9 -7
- package/dist/ui/sidebar-menu.d.ts +18 -19
- package/dist/ui/sidebar-menu.js +4 -3
- package/dist/ui/sidebar-provider.d.ts +32 -7
- package/dist/ui/sidebar-provider.js +82 -22
- package/dist/ui/sidebar-resize-rail.d.ts +8 -0
- package/dist/ui/sidebar-resize-rail.js +192 -0
- package/dist/ui/sidebar.d.ts +19 -13
- package/dist/ui/sidebar.js +120 -55
- package/dist/ui/skeleton.d.ts +7 -4
- package/dist/ui/skeleton.js +9 -2
- package/dist/ui/slider.d.ts +6 -5
- package/dist/ui/slider.js +16 -13
- package/dist/ui/spinner.d.ts +3 -4
- package/dist/ui/stepper.d.ts +22 -23
- package/dist/ui/switch.d.ts +3 -4
- package/dist/ui/switch.js +12 -1
- package/dist/ui/table-of-contents.d.ts +7 -8
- package/dist/ui/table-of-contents.js +4 -2
- package/dist/ui/table.d.ts +17 -18
- package/dist/ui/tabs.d.ts +14 -11
- package/dist/ui/textarea.d.ts +3 -4
- package/dist/ui/timeline.d.ts +18 -19
- package/dist/ui/toast.d.ts +9 -9
- package/dist/ui/toast.js +23 -16
- package/dist/ui/toggle.d.ts +5 -6
- package/dist/ui/toggle.js +3 -2
- package/dist/ui/toolbar.d.ts +15 -16
- package/dist/ui/toolbar.js +15 -4
- package/dist/ui/tooltip.d.ts +6 -13
- package/dist/ui/tooltip.js +8 -9
- package/dist/ui/tree.d.ts +18 -19
- package/dist/ui/tree.js +3 -2
- package/dist/ui/trigger-menu.d.ts +15 -16
- package/dist/ui/trigger-menu.js +6 -4
- package/dist/ui/use-switch-drag.d.ts +7 -0
- package/dist/ui/use-switch-drag.js +104 -0
- package/dist/user-ask.d.ts +28 -27
- package/dist/user-ask.js +38 -13
- package/package.json +17 -16
- package/dist/code-block-editor.d.ts +0 -59
- package/dist/code-block-editor.js +0 -250
- package/dist/knob-contracts/code-block-editor-knobs.d.ts +0 -5
- package/dist/knob-contracts/code-block-editor-knobs.js +0 -11
- package/dist/lib/code-block-shiki.d.ts +0 -9
- package/dist/lib/code-block-shiki.js +0 -6
- package/dist/skin.config.d.ts +0 -5
- package/dist/skin.config.js +0 -12
- package/dist/styles/recipes/code-block-editor.css +0 -136
- package/dist/styles/skin-theme.css +0 -137
- package/dist/styles/skin.css +0 -143
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
import { useCopyToClipboard } from "./hooks/use-copy-to-clipboard.js";
|
|
3
|
-
import { cn } from "./lib/cn.js";
|
|
4
|
-
import { Button } from "./ui/button.js";
|
|
5
|
-
import { ScrollArea } from "./ui/scroll-area.js";
|
|
6
|
-
import { highlightCodeToTokens } from "./lib/code-block-shiki.js";
|
|
7
|
-
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "./ui/tooltip.js";
|
|
8
|
-
import { Children, Fragment, createContext, isValidElement, use, useEffect, useState } from "react";
|
|
9
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
-
import { CheckIcon, CopyIcon } from "lucide-react";
|
|
11
|
-
//#region src/code-block-editor.tsx
|
|
12
|
-
const CodeBlockEditorContext = createContext(null);
|
|
13
|
-
function useCodeBlockEditorContext() {
|
|
14
|
-
const context = use(CodeBlockEditorContext);
|
|
15
|
-
if (!context) throw new Error("CodeBlockEditor compound parts must be rendered inside <CodeBlockEditor>.");
|
|
16
|
-
return context;
|
|
17
|
-
}
|
|
18
|
-
function resolveCodeBlockEditorClasses({ overflow, density, variant }) {
|
|
19
|
-
const isCommand = variant === "command";
|
|
20
|
-
const isCompact = density === "compact" || isCommand;
|
|
21
|
-
return {
|
|
22
|
-
codeClassName: cn(overflow === "scroll" ? isCommand ? "w-full max-w-full overflow-x-auto whitespace-pre" : "w-max min-w-full whitespace-pre" : "w-full whitespace-pre-wrap break-words"),
|
|
23
|
-
editorClassName: cn("w-full max-w-full overflow-auto", overflow === "scroll" ? "whitespace-pre" : "whitespace-pre-wrap break-words"),
|
|
24
|
-
scrollable: !isCommand,
|
|
25
|
-
maxHeight: isCompact ? "320px" : "520px"
|
|
26
|
-
};
|
|
27
|
-
}
|
|
28
|
-
function hasCodeBlockEditorHeader(children) {
|
|
29
|
-
return Children.toArray(children).some((child) => isValidElement(child) && child.type === CodeBlockEditorHeader);
|
|
30
|
-
}
|
|
31
|
-
function createKeyedTokenLines(lines) {
|
|
32
|
-
return lines.reduce((state, line) => {
|
|
33
|
-
const tokenState = line.reduce((tokenAccumulator, token) => ({
|
|
34
|
-
offset: tokenAccumulator.offset + token.content.length,
|
|
35
|
-
tokens: [...tokenAccumulator.tokens, {
|
|
36
|
-
key: tokenAccumulator.offset,
|
|
37
|
-
content: token.content,
|
|
38
|
-
style: token.style
|
|
39
|
-
}]
|
|
40
|
-
}), {
|
|
41
|
-
offset: state.offset,
|
|
42
|
-
tokens: []
|
|
43
|
-
});
|
|
44
|
-
return {
|
|
45
|
-
offset: tokenState.offset + 1,
|
|
46
|
-
lines: [...state.lines, {
|
|
47
|
-
key: state.offset,
|
|
48
|
-
tokens: tokenState.tokens
|
|
49
|
-
}]
|
|
50
|
-
};
|
|
51
|
-
}, {
|
|
52
|
-
offset: 0,
|
|
53
|
-
lines: []
|
|
54
|
-
}).lines;
|
|
55
|
-
}
|
|
56
|
-
function useHighlightedTokens({ code, lang, tokens, highlight }) {
|
|
57
|
-
const tokenKey = `${lang ?? ""}\n${code}`;
|
|
58
|
-
const [clientTokens, setClientTokens] = useState(null);
|
|
59
|
-
useEffect(() => {
|
|
60
|
-
if (highlight === "none" || tokens !== void 0 || !lang) return;
|
|
61
|
-
let cancelled = false;
|
|
62
|
-
const requestKey = `${lang}\n${code}`;
|
|
63
|
-
highlightCodeToTokens(code, lang).then((result) => {
|
|
64
|
-
if (!cancelled) setClientTokens({
|
|
65
|
-
key: requestKey,
|
|
66
|
-
tokens: result
|
|
67
|
-
});
|
|
68
|
-
}).catch(() => {
|
|
69
|
-
if (!cancelled) setClientTokens({
|
|
70
|
-
key: requestKey,
|
|
71
|
-
tokens: null
|
|
72
|
-
});
|
|
73
|
-
});
|
|
74
|
-
return () => {
|
|
75
|
-
cancelled = true;
|
|
76
|
-
};
|
|
77
|
-
}, [
|
|
78
|
-
code,
|
|
79
|
-
lang,
|
|
80
|
-
tokens,
|
|
81
|
-
highlight
|
|
82
|
-
]);
|
|
83
|
-
if (highlight === "none") return null;
|
|
84
|
-
return tokens ?? (clientTokens?.key === tokenKey ? clientTokens.tokens : null);
|
|
85
|
-
}
|
|
86
|
-
function CodeBlockEditorCode({ code, lang, tokens, highlight, maxHeight, scrollAreaClassName, scrollable, className, ...props }) {
|
|
87
|
-
const highlightedTokens = useHighlightedTokens({
|
|
88
|
-
code,
|
|
89
|
-
lang,
|
|
90
|
-
tokens,
|
|
91
|
-
highlight
|
|
92
|
-
});
|
|
93
|
-
const codeNode = highlightedTokens === null || highlightedTokens.length === 0 ? /* @__PURE__ */ jsx("code", { children: code }) : /* @__PURE__ */ jsx("code", { children: createKeyedTokenLines(highlightedTokens).map((line, lineIndex, keyedLines) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", { children: line.tokens.map((token) => /* @__PURE__ */ jsx("span", {
|
|
94
|
-
style: token.style,
|
|
95
|
-
children: token.content
|
|
96
|
-
}, token.key)) }), lineIndex !== keyedLines.length - 1 ? "\n" : null] }, line.key)) });
|
|
97
|
-
const block = /* @__PURE__ */ jsx("pre", {
|
|
98
|
-
"data-control-ui": "code-block-editor",
|
|
99
|
-
"data-control-family": "code-block-editor",
|
|
100
|
-
"data-slot": "content",
|
|
101
|
-
className,
|
|
102
|
-
...props,
|
|
103
|
-
children: codeNode
|
|
104
|
-
});
|
|
105
|
-
if (!scrollable) return block;
|
|
106
|
-
return /* @__PURE__ */ jsx(ScrollArea, {
|
|
107
|
-
className: scrollAreaClassName,
|
|
108
|
-
maxHeight,
|
|
109
|
-
children: block
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
function CodeBlockEditor({ overflow, chrome = "standalone", density = "default", variant = "default", className, children, ...props }) {
|
|
113
|
-
const resolvedOverflow = overflow ?? (variant === "command" ? "wrap" : "scroll");
|
|
114
|
-
const hasHeader = hasCodeBlockEditorHeader(children);
|
|
115
|
-
return /* @__PURE__ */ jsx(CodeBlockEditorContext.Provider, {
|
|
116
|
-
value: {
|
|
117
|
-
overflow: resolvedOverflow,
|
|
118
|
-
chrome,
|
|
119
|
-
density,
|
|
120
|
-
variant,
|
|
121
|
-
hasHeader
|
|
122
|
-
},
|
|
123
|
-
children: /* @__PURE__ */ jsx("figure", {
|
|
124
|
-
"data-control-ui": "code-block-editor",
|
|
125
|
-
"data-control-family": "code-block-editor",
|
|
126
|
-
"data-slot": "root",
|
|
127
|
-
"data-surface": "panel",
|
|
128
|
-
"data-variant": variant,
|
|
129
|
-
"data-chrome": chrome,
|
|
130
|
-
"data-density": density,
|
|
131
|
-
"data-header": hasHeader ? "true" : void 0,
|
|
132
|
-
className: cn("min-w-0 overflow-hidden", !hasHeader && "relative", className),
|
|
133
|
-
...props,
|
|
134
|
-
children
|
|
135
|
-
})
|
|
136
|
-
});
|
|
137
|
-
}
|
|
138
|
-
function CodeBlockEditorHeader({ className, ...props }) {
|
|
139
|
-
return /* @__PURE__ */ jsx("figcaption", {
|
|
140
|
-
"data-control-ui": "code-block-editor",
|
|
141
|
-
"data-control-family": "code-block-editor",
|
|
142
|
-
"data-slot": "header",
|
|
143
|
-
className: cn("flex items-center justify-between", className),
|
|
144
|
-
...props
|
|
145
|
-
});
|
|
146
|
-
}
|
|
147
|
-
function CodeBlockEditorTitle({ className, ...props }) {
|
|
148
|
-
return /* @__PURE__ */ jsx("span", {
|
|
149
|
-
"data-control-ui": "code-block-editor",
|
|
150
|
-
"data-control-family": "code-block-editor",
|
|
151
|
-
"data-slot": "title",
|
|
152
|
-
className: cn("block min-w-0 truncate", className),
|
|
153
|
-
...props
|
|
154
|
-
});
|
|
155
|
-
}
|
|
156
|
-
function CodeBlockEditorActions({ className, ...props }) {
|
|
157
|
-
return /* @__PURE__ */ jsx("div", {
|
|
158
|
-
"data-control-ui": "code-block-editor",
|
|
159
|
-
"data-control-family": "code-block-editor",
|
|
160
|
-
"data-slot": "actions",
|
|
161
|
-
className: cn("flex shrink-0 items-center", className),
|
|
162
|
-
...props
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
function CodeBlockEditorCopy({ value, copiedLabel, copiedAriaLabel = "Copied", children, className, "aria-label": ariaLabel, ...props }) {
|
|
166
|
-
const { isCopied, handleCopy } = useCopyToClipboard({ text: value });
|
|
167
|
-
const isIconOnly = children === void 0;
|
|
168
|
-
const label = ariaLabel ?? (isIconOnly ? "Copy code" : void 0);
|
|
169
|
-
const copied = copiedLabel ?? (isIconOnly ? /* @__PURE__ */ jsx(CheckIcon, {
|
|
170
|
-
"aria-hidden": "true",
|
|
171
|
-
className: "size-3.5"
|
|
172
|
-
}) : "Copied");
|
|
173
|
-
const button = /* @__PURE__ */ jsx(Button, {
|
|
174
|
-
type: "button",
|
|
175
|
-
variant: "quiet",
|
|
176
|
-
size: "xs",
|
|
177
|
-
"aria-live": "polite",
|
|
178
|
-
"aria-label": label && isCopied ? copiedAriaLabel : label,
|
|
179
|
-
"data-code-block-editor-copy": isIconOnly ? "true" : void 0,
|
|
180
|
-
className,
|
|
181
|
-
...props,
|
|
182
|
-
onClick: handleCopy,
|
|
183
|
-
children: isCopied ? copied : children ?? /* @__PURE__ */ jsx(CopyIcon, {
|
|
184
|
-
"aria-hidden": "true",
|
|
185
|
-
className: "size-3.5"
|
|
186
|
-
})
|
|
187
|
-
});
|
|
188
|
-
if (!isIconOnly) return button;
|
|
189
|
-
return /* @__PURE__ */ jsx(TooltipProvider, {
|
|
190
|
-
delay: 0,
|
|
191
|
-
children: /* @__PURE__ */ jsxs(Tooltip, { children: [/* @__PURE__ */ jsx(TooltipTrigger, { render: button }), /* @__PURE__ */ jsx(TooltipContent, {
|
|
192
|
-
side: "left",
|
|
193
|
-
children: label
|
|
194
|
-
})] })
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
function CodeBlockEditorFloatingCopy({ className, ...props }) {
|
|
198
|
-
return /* @__PURE__ */ jsx(CodeBlockEditorCopy, {
|
|
199
|
-
"data-code-block-editor-floating-copy": "true",
|
|
200
|
-
className: cn("absolute top-2 right-2 z-10", className),
|
|
201
|
-
...props
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
function CodeBlockEditorContent({ code, lang, tokens, highlight = "auto", maxHeight, scrollAreaClassName, className, ...props }) {
|
|
205
|
-
const context = useCodeBlockEditorContext();
|
|
206
|
-
const classes = resolveCodeBlockEditorClasses(context);
|
|
207
|
-
const content = /* @__PURE__ */ jsx(CodeBlockEditorCode, {
|
|
208
|
-
code,
|
|
209
|
-
lang,
|
|
210
|
-
tokens,
|
|
211
|
-
highlight,
|
|
212
|
-
maxHeight: maxHeight ?? classes.maxHeight,
|
|
213
|
-
scrollAreaClassName,
|
|
214
|
-
scrollable: classes.scrollable,
|
|
215
|
-
className: cn(classes.codeClassName, className),
|
|
216
|
-
...props
|
|
217
|
-
});
|
|
218
|
-
if (context.hasHeader) return content;
|
|
219
|
-
return /* @__PURE__ */ jsxs("div", {
|
|
220
|
-
"data-control-ui": "code-block-editor",
|
|
221
|
-
"data-control-family": "code-block-editor",
|
|
222
|
-
"data-slot": "floating-frame",
|
|
223
|
-
className: "relative",
|
|
224
|
-
children: [/* @__PURE__ */ jsx(CodeBlockEditorFloatingCopy, { value: code }), content]
|
|
225
|
-
});
|
|
226
|
-
}
|
|
227
|
-
function CodeBlockEditorTextarea({ value, defaultValue = "", onValueChange, onChange, fileName, className, "aria-label": ariaLabel, ...props }) {
|
|
228
|
-
const { editorClassName } = resolveCodeBlockEditorClasses(useCodeBlockEditorContext());
|
|
229
|
-
const [internalValue, setInternalValue] = useState(defaultValue);
|
|
230
|
-
const currentValue = value ?? internalValue;
|
|
231
|
-
function handleChange(event) {
|
|
232
|
-
const nextValue = event.target.value;
|
|
233
|
-
if (value === void 0) setInternalValue(nextValue);
|
|
234
|
-
onValueChange?.(nextValue);
|
|
235
|
-
onChange?.(event);
|
|
236
|
-
}
|
|
237
|
-
return /* @__PURE__ */ jsx("textarea", {
|
|
238
|
-
"data-control-ui": "code-block-editor",
|
|
239
|
-
"data-control-family": "code-block-editor",
|
|
240
|
-
"data-slot": "editor",
|
|
241
|
-
value: currentValue,
|
|
242
|
-
onChange: handleChange,
|
|
243
|
-
"aria-label": ariaLabel ?? (fileName ? `${fileName} code` : "Code editor"),
|
|
244
|
-
spellCheck: false,
|
|
245
|
-
className: cn(editorClassName, "block resize-y", className),
|
|
246
|
-
...props
|
|
247
|
-
});
|
|
248
|
-
}
|
|
249
|
-
//#endregion
|
|
250
|
-
export { CodeBlockEditor, CodeBlockEditorActions, CodeBlockEditorContent, CodeBlockEditorCopy, CodeBlockEditorFloatingCopy, CodeBlockEditorHeader, CodeBlockEditorTextarea, CodeBlockEditorTitle };
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
//#region src/knob-contracts/code-block-editor-knobs.d.ts
|
|
2
|
-
declare const codeBlockEditorKnobs: readonly ["--cui-code-block-editor-radius", "--cui-code-block-editor-background", "--cui-code-block-editor-border-color", "--cui-code-block-editor-shadow", "--cui-code-block-editor-title-foreground", "--cui-code-block-editor-code-background"];
|
|
3
|
-
type CodeBlockEditorKnobStyle = Partial<Record<(typeof codeBlockEditorKnobs)[number], string>>;
|
|
4
|
-
//#endregion
|
|
5
|
-
export { CodeBlockEditorKnobStyle, codeBlockEditorKnobs };
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
//#region src/knob-contracts/code-block-editor-knobs.ts
|
|
2
|
-
const codeBlockEditorKnobs = [
|
|
3
|
-
"--cui-code-block-editor-radius",
|
|
4
|
-
"--cui-code-block-editor-background",
|
|
5
|
-
"--cui-code-block-editor-border-color",
|
|
6
|
-
"--cui-code-block-editor-shadow",
|
|
7
|
-
"--cui-code-block-editor-title-foreground",
|
|
8
|
-
"--cui-code-block-editor-code-background"
|
|
9
|
-
];
|
|
10
|
-
//#endregion
|
|
11
|
-
export { codeBlockEditorKnobs };
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { CodeToken, CodeTokenLines, CodeTokenStyle, highlightToTokens, normalizeLanguage as normalizeLanguage$1 } from "./code-tokens.js";
|
|
2
|
-
//#region src/lib/code-block-shiki.d.ts
|
|
3
|
-
type CodeBlockEditorToken = CodeToken;
|
|
4
|
-
type CodeBlockEditorTokenLines = CodeTokenLines;
|
|
5
|
-
type CodeBlockEditorTokenStyle = CodeTokenStyle;
|
|
6
|
-
declare const highlightCodeToTokens: typeof highlightToTokens;
|
|
7
|
-
declare const normalizeLanguage: typeof normalizeLanguage$1;
|
|
8
|
-
//#endregion
|
|
9
|
-
export { CodeBlockEditorToken, CodeBlockEditorTokenLines, CodeBlockEditorTokenStyle, highlightCodeToTokens, normalizeLanguage };
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { highlightToTokens, normalizeLanguage as normalizeLanguage$1 } from "./code-tokens.js";
|
|
2
|
-
//#region src/lib/code-block-shiki.ts
|
|
3
|
-
const highlightCodeToTokens = highlightToTokens;
|
|
4
|
-
const normalizeLanguage = normalizeLanguage$1;
|
|
5
|
-
//#endregion
|
|
6
|
-
export { highlightCodeToTokens, normalizeLanguage };
|
package/dist/skin.config.d.ts
DELETED
package/dist/skin.config.js
DELETED
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
@layer components {
|
|
2
|
-
:where([data-control-family="code-block-editor"][data-slot="root"]) {
|
|
3
|
-
--cui-code-block-editor-background: var(--background);
|
|
4
|
-
--cui-code-block-editor-border-color: var(--border);
|
|
5
|
-
--cui-code-block-editor-radius: min(var(--radius-panel), calc(0.5rem * var(--nest-corner-ratio)));
|
|
6
|
-
--cui-code-block-editor-shadow: var(--shadow-sm);
|
|
7
|
-
--cui-code-block-editor-code-background: var(--background);
|
|
8
|
-
--cui-code-block-editor-title-foreground: var(--muted-foreground);
|
|
9
|
-
margin-block: calc(var(--spacing) * 4);
|
|
10
|
-
border: 1px solid var(--cui-code-block-editor-border-color);
|
|
11
|
-
border-radius: var(--cui-code-block-editor-radius);
|
|
12
|
-
background: var(--cui-code-block-editor-background);
|
|
13
|
-
box-shadow: var(--cui-code-block-editor-shadow);
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
:where([data-control-family="code-block-editor"][data-slot="root"][data-chrome="embedded"]) {
|
|
17
|
-
margin-block: 0;
|
|
18
|
-
border-width: 0px;
|
|
19
|
-
border-radius: 0px;
|
|
20
|
-
background: transparent;
|
|
21
|
-
box-shadow: none;
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
:where([data-control-family="code-block-editor"][data-slot="header"]) {
|
|
25
|
-
min-block-size: calc(var(--spacing) * 11);
|
|
26
|
-
gap: calc(var(--spacing) * 3);
|
|
27
|
-
padding-inline: calc(var(--spacing) * 3);
|
|
28
|
-
padding-block: calc(var(--spacing) * 2);
|
|
29
|
-
border-bottom: 1px solid var(--border);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
:where([data-control-family="code-block-editor"][data-slot="actions"]) {
|
|
33
|
-
gap: calc(var(--spacing) * 1);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
:where([data-control-family="button"][data-code-block-editor-copy="true"]) {
|
|
37
|
-
inline-size: calc(var(--spacing) * 7);
|
|
38
|
-
block-size: calc(var(--spacing) * 7);
|
|
39
|
-
padding: 0;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
:where([data-control-family="code-block-editor"][data-slot="title"]) {
|
|
43
|
-
color: var(--cui-code-block-editor-title-foreground);
|
|
44
|
-
font-size: var(--text-label);
|
|
45
|
-
font-family: var(--font-mono);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
:where([data-control-family="code-block-editor"]:is([data-slot="content"], [data-slot="editor"])) {
|
|
49
|
-
min-block-size: 160px;
|
|
50
|
-
padding: calc(var(--spacing) * 4);
|
|
51
|
-
background: var(--cui-code-block-editor-code-background);
|
|
52
|
-
color: var(--code-foreground);
|
|
53
|
-
font-size: var(--text-label);
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
:where(
|
|
57
|
-
[data-control-family="code-block-editor"][data-slot="root"][data-chrome="embedded"] :is([data-slot="content"], [data-slot="editor"])
|
|
58
|
-
) {
|
|
59
|
-
background: transparent;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
:where([data-control-family="code-block-editor"][data-slot="editor"]) {
|
|
63
|
-
max-block-size: 520px;
|
|
64
|
-
border-width: 0px;
|
|
65
|
-
outline: none;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
:where(
|
|
69
|
-
[data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"])
|
|
70
|
-
:is([data-slot="content"], [data-slot="editor"])
|
|
71
|
-
) {
|
|
72
|
-
min-block-size: 0;
|
|
73
|
-
padding-inline: calc(var(--spacing) * 3);
|
|
74
|
-
padding-block: calc(var(--spacing) * 2);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
:where(
|
|
78
|
-
[data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"]) [data-slot="editor"]
|
|
79
|
-
) {
|
|
80
|
-
max-block-size: 320px;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
:where([data-control-family="code-block-editor"][data-slot="floating-frame"]) {
|
|
84
|
-
padding-block-start: calc(var(--spacing) * 5);
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
:where(
|
|
88
|
-
[data-control-family="code-block-editor"][data-slot="root"]:is([data-density="compact"], [data-variant="command"])
|
|
89
|
-
[data-slot="floating-frame"]
|
|
90
|
-
) {
|
|
91
|
-
padding-block-start: calc(var(--spacing) * 7);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
:where([data-control-family="button"][data-code-block-editor-floating-copy="true"]) {
|
|
95
|
-
background: oklch(from var(--background) l c h / 0.85);
|
|
96
|
-
box-shadow:
|
|
97
|
-
inset 0 0 0 1px var(--border),
|
|
98
|
-
var(--shadow-sm);
|
|
99
|
-
backdrop-filter: blur(var(--backdrop-blur-popover));
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
@property --cui-code-block-editor-radius {
|
|
104
|
-
syntax: "<length>";
|
|
105
|
-
inherits: true;
|
|
106
|
-
initial-value: 0px;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
@property --cui-code-block-editor-background {
|
|
110
|
-
syntax: "<color>";
|
|
111
|
-
inherits: true;
|
|
112
|
-
initial-value: transparent;
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
@property --cui-code-block-editor-border-color {
|
|
116
|
-
syntax: "<color>";
|
|
117
|
-
inherits: true;
|
|
118
|
-
initial-value: transparent;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
@property --cui-code-block-editor-shadow {
|
|
122
|
-
syntax: "*";
|
|
123
|
-
inherits: true;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
@property --cui-code-block-editor-title-foreground {
|
|
127
|
-
syntax: "<color>";
|
|
128
|
-
inherits: true;
|
|
129
|
-
initial-value: transparent;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
@property --cui-code-block-editor-code-background {
|
|
133
|
-
syntax: "<color>";
|
|
134
|
-
inherits: true;
|
|
135
|
-
initial-value: transparent;
|
|
136
|
-
}
|
|
@@ -1,137 +0,0 @@
|
|
|
1
|
-
[data-skin="refined"][data-skin] {
|
|
2
|
-
/* Geist via next/font (--font-geist-sans); host without it falls to system stack. */
|
|
3
|
-
--font-sans: var(--font-geist-sans, "Geist"), ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
4
|
-
--font-mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, "Liberation Mono", monospace;
|
|
5
|
-
|
|
6
|
-
--text-label: 0.75rem; /* 12px — form labels + small chrome (nav item, tooltip, shortcut) */
|
|
7
|
-
|
|
8
|
-
/* Headings run medium, not bold, and pull tight — Geist at -0.03em is the whole voice. */
|
|
9
|
-
--text-heading-4--font-weight: 500;
|
|
10
|
-
--text-heading-3--font-weight: 500;
|
|
11
|
-
--text-heading-2--font-weight: 500;
|
|
12
|
-
--text-heading-1--font-weight: 500;
|
|
13
|
-
--text-heading-1--letter-spacing: -0.03em;
|
|
14
|
-
--text-display--font-weight: 500;
|
|
15
|
-
--text-display--letter-spacing: -0.03em;
|
|
16
|
-
|
|
17
|
-
/* shadcn base names, full colors, authored in oklch (wider gamut, matches Tailwind/shadcn v4); any format still works.
|
|
18
|
-
Refined brand = four warm-paper neutrals (#FFF / #F5F4F3 / #F4F2F0 / #EEECEA) under a cool ink (#060612), so the
|
|
19
|
-
page reads as pressed paper and every edge comes from light, not from a line. */
|
|
20
|
-
--background: oklch(0.984 0.0018 68);
|
|
21
|
-
--foreground: oklch(0.1304 0.0277 282);
|
|
22
|
-
--card: oklch(1 0 0);
|
|
23
|
-
--card-foreground: oklch(0.1304 0.0277 282);
|
|
24
|
-
--popover: oklch(1 0 0);
|
|
25
|
-
--popover-foreground: oklch(0.1304 0.0277 282);
|
|
26
|
-
--primary: oklch(0.1304 0.0277 282);
|
|
27
|
-
--primary-foreground: oklch(1 0 0);
|
|
28
|
-
--muted: oklch(0.9441 0.0034 68);
|
|
29
|
-
--muted-foreground: oklch(0.5202 0.0094 294);
|
|
30
|
-
--secondary: oklch(0.9621 0.0034 68);
|
|
31
|
-
--secondary-foreground: oklch(0.1304 0.0277 282);
|
|
32
|
-
--accent: oklch(0.9441 0.0034 68);
|
|
33
|
-
--accent-foreground: oklch(0.1304 0.0277 282);
|
|
34
|
-
--destructive: oklch(0.568 0.1961 32);
|
|
35
|
-
--destructive-foreground: oklch(1 0 0);
|
|
36
|
-
--border: oklch(0.915 0.004 68 / var(--ring-opacity));
|
|
37
|
-
--input: oklch(0.915 0.004 68);
|
|
38
|
-
/* The brand orange only ever lands on the focus ring: white-on-#FF6321 is 2.98:1, so it can never be a fill
|
|
39
|
-
that carries text. --focus-ring darkens to their button rim (#CF4E17) to clear 3:1 against the paper. */
|
|
40
|
-
--ring: oklch(0.6931 0.2032 40);
|
|
41
|
-
--focus-ring: oklch(0.5911 0.1746 40);
|
|
42
|
-
--primary-text: oklch(0.48 0.16 40); /* links and primary-tone text: the orange darkened until it clears 4.5:1 on paper */
|
|
43
|
-
|
|
44
|
-
/* Page canvas, a level below --background/--card/--popover (all elevated surfaces); GitHub Primer calls this `canvas`.
|
|
45
|
-
Keep it clear of --muted (0.9441): when the two match, every muted surface dropped straight onto the page — a
|
|
46
|
-
standalone Code block, say — reads as nothing but its ring. Light ladder: muted < secondary < canvas < background < card. */
|
|
47
|
-
--canvas: oklch(0.9676 0.0017 68);
|
|
48
|
-
|
|
49
|
-
/* popover/dropdown/select/dialog all read bg-popover, so this pair frosts them together. 1 = solid; <1 + blur = glass. */
|
|
50
|
-
--popover-opacity: 1;
|
|
51
|
-
--backdrop-blur-popover: 0px;
|
|
52
|
-
|
|
53
|
-
/* modal overlay (dialog backdrop) — dim and blur are theme-driven; color derives from foreground/background. */
|
|
54
|
-
--overlay-opacity: 0.2;
|
|
55
|
-
--backdrop-blur-overlay: 1px;
|
|
56
|
-
|
|
57
|
-
/* Edge-fade depth shared by scroll-surface masks. 0 = hard edges. */
|
|
58
|
-
--scroll-fade-size: 2rem;
|
|
59
|
-
|
|
60
|
-
/* elevation controls */
|
|
61
|
-
--shadow-color: oklch(0.1304 0.0277 282); /* hue every shadow tints with — the ink itself, cool near-black */
|
|
62
|
-
/* Top-light stays at the alpha their raised chrome uses (white 0.08): invisible on a white card, a bare catch on ink.
|
|
63
|
-
Recipes scale it by opacity/size knobs too, so --shadow-size:0 extinguishes it with everything else. */
|
|
64
|
-
--shadow-highlight: oklch(1 0 0 / 0.08);
|
|
65
|
-
--shadow-size: 1; /* global geometry multiplier: 1 = default depth, 0 = flat */
|
|
66
|
-
--shadow-opacity: 1; /* global alpha multiplier: 1 = default density, 0 = invisible */
|
|
67
|
-
|
|
68
|
-
/* THE radius knob; @theme surface scale + --radius-control both derive from it — squares (0) or rounds whole UI. */
|
|
69
|
-
--radius: 0.5rem;
|
|
70
|
-
/* Controls sit at THE radius, not a multiple of it: an 8px corner on a 36px button is the rounded rect they use everywhere. */
|
|
71
|
-
--radius-control: var(--radius);
|
|
72
|
-
|
|
73
|
-
/* Progressive enhancement over border-radius; `round` = current look, squircle/superellipse(2)/scoop reshape Control UI surfaces. */
|
|
74
|
-
/* Squircle reads ~half as round as a circular arc at same radius; browsers w/o corner-shape support fall back to
|
|
75
|
-
plain round and look over-rounded. This ratio shrinks the fallback radius (squircle only, see @supports not
|
|
76
|
-
below) to keep cross-browser look close. 1 = no change, 0.5 = halve. */
|
|
77
|
-
|
|
78
|
-
/* Floating-list (select/dropdown) concentric corners: container radius = row radius + padding, so hovered row nests exactly. */
|
|
79
|
-
--popover-padding: 0.25rem; /* gap between container edge and rows (also = p-* on the popup) */
|
|
80
|
-
--radius-popup-item: calc(var(--radius-control) * 0.6); /* select/menu row corner */
|
|
81
|
-
/* Container corner = fitted row radius + padding - 1px: ring-clip nests concentric rows with slack,
|
|
82
|
-
1px tighter hugs snugly (~1.6px clearance); clamp collapses offset to 0 when --radius is 0. */
|
|
83
|
-
|
|
84
|
-
/* content density for the rounded surfaces (bubble / composer field) */
|
|
85
|
-
--padding-x: 1rem;
|
|
86
|
-
--padding-y: 0.625rem;
|
|
87
|
-
|
|
88
|
-
/* One base height; xs/sm/md/lg are computed (proportional ramp), shared by button/select/menu/input.
|
|
89
|
-
--padding-y stays for content-sized surfaces (bubble/composer). */
|
|
90
|
-
--control-h: 2.25rem; /* md — THE base height; ramp derives from it */
|
|
91
|
-
/* round() snaps to whole px: unrounded step ceils scrollHeight past clientHeight, Base UI reads as phantom 1px overflow. */
|
|
92
|
-
|
|
93
|
-
/* motion — curves are raw vars so they can be swapped live */
|
|
94
|
-
--ease-standard: cubic-bezier(0.2, 0, 0, 1);
|
|
95
|
-
--ease-emphasized: cubic-bezier(0.16, 1, 0.3, 1);
|
|
96
|
-
--duration-fast: 150ms;
|
|
97
|
-
--duration-base: 200ms;
|
|
98
|
-
--duration-slow: 300ms;
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/* Semantic rungs re-declared on the skin root so portal-scoped radius changes resolve locally;
|
|
102
|
-
the sm–2xl scale is a derived-tier default in core theme.css. */
|
|
103
|
-
[data-skin="refined"][data-skin] {
|
|
104
|
-
--radius-field: var(--radius); /* user bubble, composer shell */
|
|
105
|
-
/* Kraftbase rounds every content surface the same 8px; only the scene-scale frames go bigger. */
|
|
106
|
-
--radius-panel: var(--radius);
|
|
107
|
-
--radius-scene: calc(var(--radius) * 2); /* scene frame, large media */
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
:where(.dark) [data-skin="refined"][data-skin],
|
|
111
|
-
.dark[data-skin="refined"][data-skin] {
|
|
112
|
-
--background: oklch(0.1852 0.0113 250);
|
|
113
|
-
--foreground: oklch(0.9645 0.0033 250);
|
|
114
|
-
--card: oklch(0.2153 0.0121 250);
|
|
115
|
-
--card-foreground: oklch(0.9645 0.0033 250);
|
|
116
|
-
--popover: oklch(0.2153 0.0121 250);
|
|
117
|
-
--popover-foreground: oklch(0.9645 0.0033 250);
|
|
118
|
-
--primary: oklch(0.9645 0.0033 250);
|
|
119
|
-
--primary-foreground: oklch(0.1852 0.0113 250);
|
|
120
|
-
--muted: oklch(0.2668 0.0128 250);
|
|
121
|
-
--muted-foreground: oklch(0.7405 0.0104 260);
|
|
122
|
-
--secondary: oklch(0.2412 0.0124 250);
|
|
123
|
-
--secondary-foreground: oklch(0.9645 0.0033 250);
|
|
124
|
-
--accent: oklch(0.2864 0.0132 250);
|
|
125
|
-
--accent-foreground: oklch(0.9645 0.0033 250);
|
|
126
|
-
--destructive: oklch(0.551 0.1799 32);
|
|
127
|
-
--destructive-foreground: oklch(0.9645 0.0033 250);
|
|
128
|
-
--border: oklch(0.3082 0.0139 250 / var(--ring-opacity));
|
|
129
|
-
--input: oklch(0.3082 0.0139 250);
|
|
130
|
-
--ring: oklch(0.6931 0.2032 40);
|
|
131
|
-
--focus-ring: oklch(0.72 0.19 42);
|
|
132
|
-
--primary-text: oklch(0.78 0.16 42);
|
|
133
|
-
--canvas: oklch(0.1322 0.0113 250);
|
|
134
|
-
--shadow-color: oklch(0 0 0);
|
|
135
|
-
/* In dark the inner top light is a faint edge catch, not a glow. */
|
|
136
|
-
--shadow-highlight: oklch(1 0 0 / 0.055);
|
|
137
|
-
}
|