poetry-ui 0.0.2
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.
- checksums.yaml +7 -0
- data/.gitattributes +6 -0
- data/CHANGELOG.md +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +87 -0
- data/THIRD_PARTY_NOTICES.md +201 -0
- data/app/components/poetry/ui/accordion/component.html.erb +3 -0
- data/app/components/poetry/ui/accordion/component.rb +197 -0
- data/app/components/poetry/ui/accordion/preview.rb +39 -0
- data/app/components/poetry/ui/accordion/style.rb +37 -0
- data/app/components/poetry/ui/alert/component.html.erb +6 -0
- data/app/components/poetry/ui/alert/component.rb +61 -0
- data/app/components/poetry/ui/alert/preview.rb +35 -0
- data/app/components/poetry/ui/alert/style.rb +24 -0
- data/app/components/poetry/ui/alert_dialog/component.html.erb +17 -0
- data/app/components/poetry/ui/alert_dialog/component.rb +208 -0
- data/app/components/poetry/ui/alert_dialog/preview.rb +48 -0
- data/app/components/poetry/ui/alert_dialog/style.rb +46 -0
- data/app/components/poetry/ui/aspect_ratio/component.rb +63 -0
- data/app/components/poetry/ui/aspect_ratio/preview.rb +29 -0
- data/app/components/poetry/ui/aspect_ratio/style.rb +13 -0
- data/app/components/poetry/ui/attachment/component.html.erb +13 -0
- data/app/components/poetry/ui/attachment/component.rb +139 -0
- data/app/components/poetry/ui/attachment/preview.rb +83 -0
- data/app/components/poetry/ui/attachment/style.rb +59 -0
- data/app/components/poetry/ui/autocomplete/component.html.erb +16 -0
- data/app/components/poetry/ui/autocomplete/component.rb +193 -0
- data/app/components/poetry/ui/autocomplete/preview.rb +39 -0
- data/app/components/poetry/ui/autocomplete/style.rb +18 -0
- data/app/components/poetry/ui/avatar/component.rb +103 -0
- data/app/components/poetry/ui/avatar/group_preview.html.erb +11 -0
- data/app/components/poetry/ui/avatar/preview.rb +50 -0
- data/app/components/poetry/ui/avatar/style.rb +34 -0
- data/app/components/poetry/ui/badge/component.rb +73 -0
- data/app/components/poetry/ui/badge/preview.rb +54 -0
- data/app/components/poetry/ui/badge/style.rb +35 -0
- data/app/components/poetry/ui/breadcrumb/component.html.erb +32 -0
- data/app/components/poetry/ui/breadcrumb/component.rb +102 -0
- data/app/components/poetry/ui/breadcrumb/dropdown_crumb_preview.html.erb +21 -0
- data/app/components/poetry/ui/breadcrumb/preview.rb +45 -0
- data/app/components/poetry/ui/breadcrumb/style.rb +25 -0
- data/app/components/poetry/ui/bubble/component.html.erb +4 -0
- data/app/components/poetry/ui/bubble/component.rb +106 -0
- data/app/components/poetry/ui/bubble/preview.rb +62 -0
- data/app/components/poetry/ui/bubble/style.rb +47 -0
- data/app/components/poetry/ui/button/component.html.erb +14 -0
- data/app/components/poetry/ui/button/component.rb +168 -0
- data/app/components/poetry/ui/button/preview.rb +94 -0
- data/app/components/poetry/ui/button/style.rb +41 -0
- data/app/components/poetry/ui/button_group/component.rb +70 -0
- data/app/components/poetry/ui/button_group/popup_triggers_preview.html.erb +21 -0
- data/app/components/poetry/ui/button_group/preview.rb +46 -0
- data/app/components/poetry/ui/button_group/style.rb +27 -0
- data/app/components/poetry/ui/button_group/text_prefix_preview.html.erb +7 -0
- data/app/components/poetry/ui/calendar/component.html.erb +72 -0
- data/app/components/poetry/ui/calendar/component.rb +366 -0
- data/app/components/poetry/ui/calendar/preview.rb +55 -0
- data/app/components/poetry/ui/calendar/style.rb +55 -0
- data/app/components/poetry/ui/card/component.html.erb +11 -0
- data/app/components/poetry/ui/card/component.rb +90 -0
- data/app/components/poetry/ui/card/preview.rb +29 -0
- data/app/components/poetry/ui/card/style.rb +23 -0
- data/app/components/poetry/ui/carousel/component.html.erb +17 -0
- data/app/components/poetry/ui/carousel/component.rb +179 -0
- data/app/components/poetry/ui/carousel/preview.rb +67 -0
- data/app/components/poetry/ui/carousel/style.rb +39 -0
- data/app/components/poetry/ui/checkbox/component.html.erb +22 -0
- data/app/components/poetry/ui/checkbox/component.rb +179 -0
- data/app/components/poetry/ui/checkbox/preview.rb +68 -0
- data/app/components/poetry/ui/checkbox/style.rb +28 -0
- data/app/components/poetry/ui/clipboard_text/component.html.erb +15 -0
- data/app/components/poetry/ui/clipboard_text/component.rb +154 -0
- data/app/components/poetry/ui/clipboard_text/preview.rb +24 -0
- data/app/components/poetry/ui/clipboard_text/style.rb +23 -0
- data/app/components/poetry/ui/code_block/component.html.erb +13 -0
- data/app/components/poetry/ui/code_block/component.rb +141 -0
- data/app/components/poetry/ui/code_block/preview.rb +40 -0
- data/app/components/poetry/ui/code_block/style.rb +38 -0
- data/app/components/poetry/ui/collapsible/component.html.erb +4 -0
- data/app/components/poetry/ui/collapsible/component.rb +134 -0
- data/app/components/poetry/ui/collapsible/preview.rb +24 -0
- data/app/components/poetry/ui/combobox/component.html.erb +49 -0
- data/app/components/poetry/ui/combobox/component.rb +1086 -0
- data/app/components/poetry/ui/combobox/preview.rb +164 -0
- data/app/components/poetry/ui/combobox/style.rb +148 -0
- data/app/components/poetry/ui/command/component.html.erb +20 -0
- data/app/components/poetry/ui/command/component.rb +526 -0
- data/app/components/poetry/ui/command/dialog_component.html.erb +14 -0
- data/app/components/poetry/ui/command/dialog_component.rb +206 -0
- data/app/components/poetry/ui/command/dialog_preview.rb +39 -0
- data/app/components/poetry/ui/command/preview.rb +121 -0
- data/app/components/poetry/ui/command/style.rb +78 -0
- data/app/components/poetry/ui/composable_trigger.rb +63 -0
- data/app/components/poetry/ui/context_menu/component.html.erb +6 -0
- data/app/components/poetry/ui/context_menu/component.rb +358 -0
- data/app/components/poetry/ui/context_menu/preview.rb +111 -0
- data/app/components/poetry/ui/context_menu/style.rb +59 -0
- data/app/components/poetry/ui/data_table/component.html.erb +78 -0
- data/app/components/poetry/ui/data_table/component.rb +277 -0
- data/app/components/poetry/ui/data_table/preview.rb +68 -0
- data/app/components/poetry/ui/data_table/state.rb +115 -0
- data/app/components/poetry/ui/data_table/style.rb +42 -0
- data/app/components/poetry/ui/date_field/component.html.erb +7 -0
- data/app/components/poetry/ui/date_field/component.rb +209 -0
- data/app/components/poetry/ui/date_field/preview.rb +42 -0
- data/app/components/poetry/ui/date_field/style.rb +35 -0
- data/app/components/poetry/ui/date_picker/component.html.erb +23 -0
- data/app/components/poetry/ui/date_picker/component.rb +242 -0
- data/app/components/poetry/ui/date_picker/preview.rb +31 -0
- data/app/components/poetry/ui/date_picker/style.rb +25 -0
- data/app/components/poetry/ui/deferred/component.html.erb +16 -0
- data/app/components/poetry/ui/deferred/component.rb +90 -0
- data/app/components/poetry/ui/deferred/preview.rb +24 -0
- data/app/components/poetry/ui/dialog/component.html.erb +21 -0
- data/app/components/poetry/ui/dialog/component.rb +194 -0
- data/app/components/poetry/ui/dialog/preview.rb +33 -0
- data/app/components/poetry/ui/dialog/style.rb +30 -0
- data/app/components/poetry/ui/drawer/component.html.erb +16 -0
- data/app/components/poetry/ui/drawer/component.rb +207 -0
- data/app/components/poetry/ui/drawer/preview.rb +69 -0
- data/app/components/poetry/ui/drawer/style.rb +105 -0
- data/app/components/poetry/ui/dropdown_menu/component.html.erb +6 -0
- data/app/components/poetry/ui/dropdown_menu/component.rb +350 -0
- data/app/components/poetry/ui/dropdown_menu/preview.rb +101 -0
- data/app/components/poetry/ui/dropdown_menu/style.rb +60 -0
- data/app/components/poetry/ui/empty/component.html.erb +10 -0
- data/app/components/poetry/ui/empty/component.rb +79 -0
- data/app/components/poetry/ui/empty/preview.rb +27 -0
- data/app/components/poetry/ui/empty/style.rb +27 -0
- data/app/components/poetry/ui/family_identity.rb +52 -0
- data/app/components/poetry/ui/field/component.html.erb +19 -0
- data/app/components/poetry/ui/field/component.rb +183 -0
- data/app/components/poetry/ui/field/preview.html.erb +30 -0
- data/app/components/poetry/ui/field/preview.rb +72 -0
- data/app/components/poetry/ui/field/style.rb +68 -0
- data/app/components/poetry/ui/field_group/component.rb +61 -0
- data/app/components/poetry/ui/field_group/preview.html.erb +30 -0
- data/app/components/poetry/ui/field_group/preview.rb +20 -0
- data/app/components/poetry/ui/field_group/style.rb +25 -0
- data/app/components/poetry/ui/field_separator/component.rb +70 -0
- data/app/components/poetry/ui/field_separator/preview.rb +18 -0
- data/app/components/poetry/ui/field_separator/style.rb +20 -0
- data/app/components/poetry/ui/fieldset/component.rb +90 -0
- data/app/components/poetry/ui/fieldset/preview.html.erb +22 -0
- data/app/components/poetry/ui/fieldset/preview.rb +25 -0
- data/app/components/poetry/ui/fieldset/style.rb +18 -0
- data/app/components/poetry/ui/file_input/component.html.erb +14 -0
- data/app/components/poetry/ui/file_input/component.rb +188 -0
- data/app/components/poetry/ui/file_input/preview.rb +30 -0
- data/app/components/poetry/ui/file_input/style.rb +35 -0
- data/app/components/poetry/ui/hover_card/component.html.erb +6 -0
- data/app/components/poetry/ui/hover_card/component.rb +201 -0
- data/app/components/poetry/ui/hover_card/preview.rb +60 -0
- data/app/components/poetry/ui/hover_card/style.rb +17 -0
- data/app/components/poetry/ui/icon/component.rb +127 -0
- data/app/components/poetry/ui/icon/preview.rb +21 -0
- data/app/components/poetry/ui/input/component.rb +80 -0
- data/app/components/poetry/ui/input/preview.rb +35 -0
- data/app/components/poetry/ui/input/style.rb +18 -0
- data/app/components/poetry/ui/input_group/button_preview.html.erb +12 -0
- data/app/components/poetry/ui/input_group/component.rb +69 -0
- data/app/components/poetry/ui/input_group/preview.rb +23 -0
- data/app/components/poetry/ui/input_group/search_preview.html.erb +13 -0
- data/app/components/poetry/ui/input_group/style.rb +40 -0
- data/app/components/poetry/ui/input_group/textarea_preview.html.erb +10 -0
- data/app/components/poetry/ui/input_group_field.rb +61 -0
- data/app/components/poetry/ui/input_otp/component.html.erb +25 -0
- data/app/components/poetry/ui/input_otp/component.rb +250 -0
- data/app/components/poetry/ui/input_otp/preview.rb +91 -0
- data/app/components/poetry/ui/input_otp/style.rb +36 -0
- data/app/components/poetry/ui/item/component.html.erb +13 -0
- data/app/components/poetry/ui/item/component.rb +99 -0
- data/app/components/poetry/ui/item/group_preview.html.erb +15 -0
- data/app/components/poetry/ui/item/preview.rb +52 -0
- data/app/components/poetry/ui/item/style.rb +45 -0
- data/app/components/poetry/ui/kbd/component.rb +47 -0
- data/app/components/poetry/ui/kbd/group_preview.html.erb +4 -0
- data/app/components/poetry/ui/kbd/preview.rb +23 -0
- data/app/components/poetry/ui/kbd/style.rb +13 -0
- data/app/components/poetry/ui/label/component.rb +46 -0
- data/app/components/poetry/ui/label/preview.html.erb +5 -0
- data/app/components/poetry/ui/label/preview.rb +16 -0
- data/app/components/poetry/ui/label/style.rb +13 -0
- data/app/components/poetry/ui/link/component.rb +62 -0
- data/app/components/poetry/ui/link/preview.rb +31 -0
- data/app/components/poetry/ui/link/style.rb +20 -0
- data/app/components/poetry/ui/marker/component.html.erb +4 -0
- data/app/components/poetry/ui/marker/component.rb +81 -0
- data/app/components/poetry/ui/marker/preview.rb +43 -0
- data/app/components/poetry/ui/marker/style.rb +24 -0
- data/app/components/poetry/ui/menubar/component.html.erb +3 -0
- data/app/components/poetry/ui/menubar/component.rb +493 -0
- data/app/components/poetry/ui/menubar/preview.rb +164 -0
- data/app/components/poetry/ui/menubar/style.rb +71 -0
- data/app/components/poetry/ui/menus.rb +386 -0
- data/app/components/poetry/ui/message/component.html.erb +8 -0
- data/app/components/poetry/ui/message/component.rb +64 -0
- data/app/components/poetry/ui/message/preview.rb +33 -0
- data/app/components/poetry/ui/message/style.rb +29 -0
- data/app/components/poetry/ui/message_scroller/component.html.erb +15 -0
- data/app/components/poetry/ui/message_scroller/component.rb +163 -0
- data/app/components/poetry/ui/message_scroller/preview.rb +33 -0
- data/app/components/poetry/ui/message_scroller/style.rb +39 -0
- data/app/components/poetry/ui/metadata_list/component.rb +88 -0
- data/app/components/poetry/ui/metadata_list/preview.rb +55 -0
- data/app/components/poetry/ui/metadata_list/style.rb +35 -0
- data/app/components/poetry/ui/meter/component.rb +117 -0
- data/app/components/poetry/ui/meter/preview.rb +28 -0
- data/app/components/poetry/ui/meter/style.rb +16 -0
- data/app/components/poetry/ui/native_select/component.rb +124 -0
- data/app/components/poetry/ui/native_select/labelled_preview.html.erb +7 -0
- data/app/components/poetry/ui/native_select/preview.rb +20 -0
- data/app/components/poetry/ui/native_select/style.rb +22 -0
- data/app/components/poetry/ui/navigation_menu/bar_preview.html.erb +14 -0
- data/app/components/poetry/ui/navigation_menu/component.html.erb +25 -0
- data/app/components/poetry/ui/navigation_menu/component.rb +254 -0
- data/app/components/poetry/ui/navigation_menu/preview.rb +20 -0
- data/app/components/poetry/ui/navigation_menu/style.rb +73 -0
- data/app/components/poetry/ui/navigation_menu/viewport_preview.html.erb +23 -0
- data/app/components/poetry/ui/number_field/component.html.erb +19 -0
- data/app/components/poetry/ui/number_field/component.rb +263 -0
- data/app/components/poetry/ui/number_field/preview.rb +66 -0
- data/app/components/poetry/ui/number_field/style.rb +14 -0
- data/app/components/poetry/ui/pagination/component.html.erb +40 -0
- data/app/components/poetry/ui/pagination/component.rb +182 -0
- data/app/components/poetry/ui/pagination/preview.rb +47 -0
- data/app/components/poetry/ui/pagination/style.rb +27 -0
- data/app/components/poetry/ui/popover/component.html.erb +17 -0
- data/app/components/poetry/ui/popover/component.rb +203 -0
- data/app/components/poetry/ui/popover/preview.html.erb +29 -0
- data/app/components/poetry/ui/popover/preview.rb +66 -0
- data/app/components/poetry/ui/popover/style.rb +26 -0
- data/app/components/poetry/ui/popper_consumer.rb +69 -0
- data/app/components/poetry/ui/progress/component.rb +95 -0
- data/app/components/poetry/ui/progress/preview.rb +22 -0
- data/app/components/poetry/ui/progress/style.rb +19 -0
- data/app/components/poetry/ui/questionnaire/component.html.erb +80 -0
- data/app/components/poetry/ui/questionnaire/component.rb +396 -0
- data/app/components/poetry/ui/questionnaire/preview.rb +99 -0
- data/app/components/poetry/ui/questionnaire/style.rb +53 -0
- data/app/components/poetry/ui/radio_group/component.html.erb +4 -0
- data/app/components/poetry/ui/radio_group/component.rb +323 -0
- data/app/components/poetry/ui/radio_group/preview.rb +109 -0
- data/app/components/poetry/ui/radio_group/style.rb +53 -0
- data/app/components/poetry/ui/resizable/component.html.erb +10 -0
- data/app/components/poetry/ui/resizable/component.rb +178 -0
- data/app/components/poetry/ui/resizable/preview.rb +42 -0
- data/app/components/poetry/ui/resizable/style.rb +30 -0
- data/app/components/poetry/ui/scroll_area/component.rb +76 -0
- data/app/components/poetry/ui/scroll_area/preview.rb +35 -0
- data/app/components/poetry/ui/scroll_area/style.rb +19 -0
- data/app/components/poetry/ui/search_field/component.html.erb +15 -0
- data/app/components/poetry/ui/search_field/component.rb +137 -0
- data/app/components/poetry/ui/search_field/preview.rb +23 -0
- data/app/components/poetry/ui/search_field/style.rb +18 -0
- data/app/components/poetry/ui/select/component.html.erb +15 -0
- data/app/components/poetry/ui/select/component.rb +639 -0
- data/app/components/poetry/ui/select/preview.rb +113 -0
- data/app/components/poetry/ui/select/style.rb +58 -0
- data/app/components/poetry/ui/sensitive_input/component.html.erb +29 -0
- data/app/components/poetry/ui/sensitive_input/component.rb +274 -0
- data/app/components/poetry/ui/sensitive_input/preview.rb +40 -0
- data/app/components/poetry/ui/sensitive_input/style.rb +49 -0
- data/app/components/poetry/ui/separator/component.rb +57 -0
- data/app/components/poetry/ui/separator/preview.rb +19 -0
- data/app/components/poetry/ui/separator/style.rb +15 -0
- data/app/components/poetry/ui/sheet/component.html.erb +21 -0
- data/app/components/poetry/ui/sheet/component.rb +97 -0
- data/app/components/poetry/ui/sheet/preview.rb +57 -0
- data/app/components/poetry/ui/sheet/style.rb +47 -0
- data/app/components/poetry/ui/sidebar/component.html.erb +20 -0
- data/app/components/poetry/ui/sidebar/component.rb +249 -0
- data/app/components/poetry/ui/sidebar/preview.rb +21 -0
- data/app/components/poetry/ui/sidebar/shell_preview.html.erb +47 -0
- data/app/components/poetry/ui/sidebar/style.rb +139 -0
- data/app/components/poetry/ui/skeleton/component.rb +39 -0
- data/app/components/poetry/ui/skeleton/preview.rb +22 -0
- data/app/components/poetry/ui/skeleton/style.rb +13 -0
- data/app/components/poetry/ui/slider/component.html.erb +13 -0
- data/app/components/poetry/ui/slider/component.rb +360 -0
- data/app/components/poetry/ui/slider/preview.rb +73 -0
- data/app/components/poetry/ui/slider/style.rb +55 -0
- data/app/components/poetry/ui/spinner/component.rb +58 -0
- data/app/components/poetry/ui/spinner/preview.rb +22 -0
- data/app/components/poetry/ui/spinner/style.rb +12 -0
- data/app/components/poetry/ui/stat/component.html.erb +13 -0
- data/app/components/poetry/ui/stat/component.rb +102 -0
- data/app/components/poetry/ui/stat/preview.rb +47 -0
- data/app/components/poetry/ui/stat/style.rb +29 -0
- data/app/components/poetry/ui/switch/component.html.erb +15 -0
- data/app/components/poetry/ui/switch/component.rb +136 -0
- data/app/components/poetry/ui/switch/preview.rb +66 -0
- data/app/components/poetry/ui/switch/style.rb +22 -0
- data/app/components/poetry/ui/table/component.html.erb +3 -0
- data/app/components/poetry/ui/table/component.rb +93 -0
- data/app/components/poetry/ui/table/preview.rb +96 -0
- data/app/components/poetry/ui/table/style.rb +26 -0
- data/app/components/poetry/ui/tabs/component.html.erb +10 -0
- data/app/components/poetry/ui/tabs/component.rb +253 -0
- data/app/components/poetry/ui/tabs/preview.rb +43 -0
- data/app/components/poetry/ui/tabs/style.rb +49 -0
- data/app/components/poetry/ui/tag_group/component.html.erb +8 -0
- data/app/components/poetry/ui/tag_group/component.rb +203 -0
- data/app/components/poetry/ui/tag_group/preview.rb +43 -0
- data/app/components/poetry/ui/tag_group/style.rb +29 -0
- data/app/components/poetry/ui/textarea/component.rb +64 -0
- data/app/components/poetry/ui/textarea/preview.rb +75 -0
- data/app/components/poetry/ui/textarea/style.rb +18 -0
- data/app/components/poetry/ui/time_field/component.html.erb +6 -0
- data/app/components/poetry/ui/time_field/component.rb +85 -0
- data/app/components/poetry/ui/time_field/preview.rb +40 -0
- data/app/components/poetry/ui/time_field/style.rb +30 -0
- data/app/components/poetry/ui/timeline/component.rb +134 -0
- data/app/components/poetry/ui/timeline/preview.rb +61 -0
- data/app/components/poetry/ui/timeline/style.rb +54 -0
- data/app/components/poetry/ui/toast/component.html.erb +24 -0
- data/app/components/poetry/ui/toast/component.rb +178 -0
- data/app/components/poetry/ui/toast/preview.rb +69 -0
- data/app/components/poetry/ui/toast/style.rb +33 -0
- data/app/components/poetry/ui/toast_trigger/addressed_preview.html.erb +12 -0
- data/app/components/poetry/ui/toast_trigger/component.html.erb +3 -0
- data/app/components/poetry/ui/toast_trigger/component.rb +82 -0
- data/app/components/poetry/ui/toast_trigger/default_preview.html.erb +11 -0
- data/app/components/poetry/ui/toast_trigger/preview.rb +19 -0
- data/app/components/poetry/ui/toaster/component.html.erb +1 -0
- data/app/components/poetry/ui/toaster/component.rb +99 -0
- data/app/components/poetry/ui/toaster/positions_preview.html.erb +24 -0
- data/app/components/poetry/ui/toaster/preview.rb +46 -0
- data/app/components/poetry/ui/toaster/stamp_preview.html.erb +15 -0
- data/app/components/poetry/ui/toaster/style.rb +26 -0
- data/app/components/poetry/ui/toggle/component.rb +120 -0
- data/app/components/poetry/ui/toggle/preview.rb +79 -0
- data/app/components/poetry/ui/toggle/style.rb +33 -0
- data/app/components/poetry/ui/toggle_group/component.html.erb +4 -0
- data/app/components/poetry/ui/toggle_group/component.rb +252 -0
- data/app/components/poetry/ui/toggle_group/preview.rb +143 -0
- data/app/components/poetry/ui/toggle_group/style.rb +33 -0
- data/app/components/poetry/ui/toolbar/component.rb +125 -0
- data/app/components/poetry/ui/toolbar/preview.rb +41 -0
- data/app/components/poetry/ui/toolbar/style.rb +20 -0
- data/app/components/poetry/ui/tooltip/component.html.erb +20 -0
- data/app/components/poetry/ui/tooltip/component.rb +185 -0
- data/app/components/poetry/ui/tooltip/preview.rb +74 -0
- data/app/components/poetry/ui/tooltip/previews/provider_row.html.erb +25 -0
- data/app/components/poetry/ui/tooltip/style.rb +24 -0
- data/app/components/poetry/ui/tree/component.html.erb +32 -0
- data/app/components/poetry/ui/tree/component.rb +233 -0
- data/app/components/poetry/ui/tree/preview.rb +55 -0
- data/app/components/poetry/ui/tree/style.rb +29 -0
- data/app/components/poetry/ui/typeset/component.rb +73 -0
- data/app/components/poetry/ui/typeset/preview.rb +45 -0
- data/app/components/poetry/ui/typeset/style.rb +15 -0
- data/app/controllers/poetry/ui/llms_controller.rb +28 -0
- data/app/helpers/poetry/ui/components_helper.rb +1794 -0
- data/app/helpers/poetry/ui/form_builder/type_inference.rb +117 -0
- data/app/helpers/poetry/ui/form_builder.rb +916 -0
- data/app/helpers/poetry/ui/optimistic_form_builder.rb +55 -0
- data/app/helpers/poetry/ui/toast_stream_actions.rb +27 -0
- data/config/component_descriptions.yml +96 -0
- data/config/component_registry.yml +12257 -0
- data/config/locales/en.yml +93 -0
- data/config/routes.rb +8 -0
- data/config/template_classes.txt +113 -0
- data/lib/generators/poetry/add/add_generator.rb +218 -0
- data/lib/generators/poetry/agent_rules/agent_rules_generator.rb +91 -0
- data/lib/generators/poetry/agents/agents_generator.rb +24 -0
- data/lib/generators/poetry/agents_section.rb +148 -0
- data/lib/generators/poetry/block/block_generator.rb +67 -0
- data/lib/generators/poetry/block/templates/action_bar.html.erb +45 -0
- data/lib/generators/poetry/block/templates/app_shell.html.erb +139 -0
- data/lib/generators/poetry/block/templates/data_index.html.erb +85 -0
- data/lib/generators/poetry/block/templates/destructive_panel.html.erb +26 -0
- data/lib/generators/poetry/block/templates/page_header.html.erb +25 -0
- data/lib/generators/poetry/block/templates/section_card.html.erb +42 -0
- data/lib/generators/poetry/block/templates/stepper.html.erb +79 -0
- data/lib/generators/poetry/block/templates/top_nav.html.erb +44 -0
- data/lib/generators/poetry/diff/diff_generator.rb +135 -0
- data/lib/generators/poetry/editor/editor_generator.rb +344 -0
- data/lib/generators/poetry/editor/templates/poetry-check-hook +81 -0
- data/lib/generators/poetry/install/install_generator.rb +364 -0
- data/lib/generators/poetry/pagination/pagination_generator.rb +76 -0
- data/lib/generators/poetry/pagination/templates/kaminari_paginator.html.erb +29 -0
- data/lib/generators/poetry/pagination/templates/poetry_link_renderer.rb +34 -0
- data/lib/generators/poetry/pagination/templates/poetry_pagy_helper.rb +28 -0
- data/lib/generators/poetry/recipes/agent_embed/app/javascript/controllers/agent_demo_controller.js +131 -0
- data/lib/generators/poetry/recipes/screen_data_index/app/controllers/orders_controller.rb +15 -0
- data/lib/generators/poetry/recipes/screen_data_index/app/views/orders/index.html.erb +7 -0
- data/lib/generators/poetry/recipes/screen_data_index/test/system/orders_index_test.rb +16 -0
- data/lib/generators/poetry/recipes/screen_settings/app/controllers/settings_controller.rb +14 -0
- data/lib/generators/poetry/recipes/screen_settings/app/views/settings/show.html.erb +9 -0
- data/lib/generators/poetry/recipes/screen_settings/test/system/settings_show_test.rb +16 -0
- data/lib/generators/poetry/scaffold_templates/scaffold_templates_generator.rb +60 -0
- data/lib/generators/poetry/scaffold_templates/templates/_form.html.erb.tt +77 -0
- data/lib/generators/poetry/scaffold_templates/templates/controller.rb.tt +78 -0
- data/lib/generators/poetry/scaffold_templates/templates/edit.html.erb.tt +14 -0
- data/lib/generators/poetry/scaffold_templates/templates/index.html.erb.tt +24 -0
- data/lib/generators/poetry/scaffold_templates/templates/new.html.erb.tt +11 -0
- data/lib/generators/poetry/scaffold_templates/templates/partial.html.erb.tt +13 -0
- data/lib/generators/poetry/scaffold_templates/templates/show.html.erb.tt +18 -0
- data/lib/generators/poetry/skill/skill_generator.rb +34 -0
- data/lib/generators/poetry/skill/templates/poetry-component/SKILL.md +58 -0
- data/lib/generators/poetry/skill/templates/poetry-component/references/anatomy.md +152 -0
- data/lib/generators/poetry/skill/templates/poetry-component/references/checklist.md +67 -0
- data/lib/generators/poetry/skill/templates/poetry-component/references/documentation.md +137 -0
- data/lib/generators/poetry/skill/templates/poetry-design/SKILL.md +56 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/audit.md +123 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/compose.md +73 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/figma.md +68 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/paper.md +56 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/study.md +47 -0
- data/lib/generators/poetry/skill/templates/poetry-design/references/theme.md +70 -0
- data/lib/generators/poetry/skills_section.rb +58 -0
- data/lib/poetry/ui/chat.rb +283 -0
- data/lib/poetry/ui/code_block_highlighter.rb +60 -0
- data/lib/poetry/ui/engine.rb +55 -0
- data/lib/poetry/ui/recipes.rb +157 -0
- data/lib/poetry/ui/testing/combobox.rb +167 -0
- data/lib/poetry/ui/testing/dialog.rb +73 -0
- data/lib/poetry/ui/testing/menu.rb +127 -0
- data/lib/poetry/ui/testing/registration.rb +58 -0
- data/lib/poetry/ui/testing/select.rb +147 -0
- data/lib/poetry/ui/testing/tester.rb +130 -0
- data/lib/poetry/ui/testing.rb +130 -0
- data/lib/poetry/ui/themes.rb +109 -0
- data/lib/poetry/ui/version.rb +8 -0
- data/lib/poetry/ui/webmcp.rb +91 -0
- data/lib/poetry/ui.rb +285 -0
- data/lib/poetry-ui.rb +5 -0
- data/lib/tasks/poetry/check.rake +73 -0
- data/lib/tasks/poetry/design.rake +293 -0
- data/lib/tasks/poetry/verify.rake +36 -0
- data/themes/default.css +1793 -0
- data/themes/luma.css +1764 -0
- data/themes/lyra.css +1768 -0
- data/themes/maia.css +1768 -0
- data/themes/mira.css +1760 -0
- data/themes/nova.css +1755 -0
- data/themes/rhea.css +1771 -0
- data/themes/sera.css +1757 -0
- data/themes/vega.css +1775 -0
- data/typeset/typeset.css +499 -0
- metadata +502 -0
data/themes/default.css
ADDED
|
@@ -0,0 +1,1793 @@
|
|
|
1
|
+
/* poetry default theme — the cn-* named-class layer.
|
|
2
|
+
*
|
|
3
|
+
* The visual half of every Style dictionary lives HERE: dictionaries emit
|
|
4
|
+
* stable `cn-*` names plus structural/behavioral utilities; these rules
|
|
5
|
+
* carry the design. The file is imported with `layer(base)` (rakelib/css.rake
|
|
6
|
+
* compile entry + the install generator), which means:
|
|
7
|
+
*
|
|
8
|
+
* - caller `class:` utilities ALWAYS win — the utilities layer beats the
|
|
9
|
+
* base layer by cascade-layer order, with no tailwind_merge knowledge
|
|
10
|
+
* of a cn class's contents;
|
|
11
|
+
* - rule order inside this file resolves intra-dictionary conflicts and
|
|
12
|
+
* mirrors the resolver's merge order per component:
|
|
13
|
+
* base < elements < variants < compounds.
|
|
14
|
+
*
|
|
15
|
+
* The look is new-york-v4 re-expressed (the pixel-neutral gate: all
|
|
16
|
+
* visual baselines held). Restyling = override `.cn-*` rules or swap this
|
|
17
|
+
* file — never edit component source. Upstream nests theme rules under a
|
|
18
|
+
* `.style-<name>` wrapper; poetry ships bare selectors while exactly one
|
|
19
|
+
* theme exists (the wrapper arrives with a second theme).
|
|
20
|
+
*
|
|
21
|
+
* Components with no upstream cn hook stay utility-only by the
|
|
22
|
+
* upstream-faithful rule (their whole surface is structural/behavioral):
|
|
23
|
+
* AspectRatio, Separator, Spinner — plus core's legacy X. A cn name is
|
|
24
|
+
* emitted only when this file has content for it — empty rules are
|
|
25
|
+
* dropped by the compiler and would redden css:verify_compiled (upstream
|
|
26
|
+
* hook names whose whole poetry surface is structural, e.g. cn-breadcrumb
|
|
27
|
+
* or cn-card-action, return WITH content in a future theme; data-slot
|
|
28
|
+
* selectors remain the always-on restyle hook).
|
|
29
|
+
*
|
|
30
|
+
* Drift gates: css:verify_compiled (every dictionary cn name must exist in
|
|
31
|
+
* a real compiled build) + css:verify_theme (bidirectional name coverage:
|
|
32
|
+
* dictionary cn names <-> theme rules).
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
/* MARK: Alert */
|
|
36
|
+
.cn-alert {
|
|
37
|
+
@apply grid grid-cols-[0_1fr] items-start gap-y-0.5 rounded-lg border px-4 py-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.cn-alert-action {
|
|
41
|
+
@apply absolute top-2 right-2;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.cn-alert-title {
|
|
45
|
+
@apply col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.cn-alert-description {
|
|
49
|
+
@apply col-start-2 grid justify-items-start gap-1 text-sm text-muted-foreground [&_p]:leading-relaxed;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.cn-alert-variant-default {
|
|
53
|
+
@apply bg-card text-card-foreground;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.cn-alert-variant-destructive {
|
|
57
|
+
@apply bg-card text-destructive [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
/* MARK: Accordion */
|
|
61
|
+
/* Root hook: boxed-root themes (mira/rhea, later luma/maia)
|
|
62
|
+
* style this; every fragment must give the name content (the compile
|
|
63
|
+
* gate), so default carries the upstream demo idiom. */
|
|
64
|
+
.cn-accordion {
|
|
65
|
+
@apply w-full;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.cn-accordion-item {
|
|
69
|
+
@apply border-b last:border-b-0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
.cn-accordion-trigger {
|
|
73
|
+
@apply gap-4 rounded-md py-4 text-left text-sm font-medium hover:underline focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
.cn-accordion-trigger-icon {
|
|
77
|
+
@apply size-4 translate-y-0.5 text-muted-foreground;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
.cn-accordion-content {
|
|
81
|
+
@apply text-sm data-closed:animate-accordion-up data-open:animate-accordion-down;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
.cn-accordion-content-inner {
|
|
85
|
+
@apply pt-0 pb-4;
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/* MARK: AlertDialog */
|
|
89
|
+
.cn-alert-dialog-content {
|
|
90
|
+
@apply w-full max-w-[calc(100%-2rem)] gap-4 rounded-lg border bg-background p-6 text-foreground shadow-lg data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg backdrop:bg-black/50 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
.cn-alert-dialog-header {
|
|
94
|
+
@apply gap-1.5 has-data-[slot=alert-dialog-media]:gap-x-6;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
.cn-alert-dialog-media {
|
|
98
|
+
@apply mb-2 size-16 rounded-md bg-muted *:[svg:not([class*='size-'])]:size-8;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
.cn-alert-dialog-title {
|
|
102
|
+
@apply text-lg font-semibold;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
.cn-alert-dialog-description {
|
|
106
|
+
@apply text-sm text-muted-foreground;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/* Footer hook: nova bands it; gap-2 moved here from the inline
|
|
110
|
+
* set with the name (direction/justify stay inline - the sm-size grid
|
|
111
|
+
* branch replaces them consumer-side). */
|
|
112
|
+
.cn-alert-dialog-footer {
|
|
113
|
+
@apply gap-2;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/* MARK: Attachment */
|
|
117
|
+
/* w-fit lives here so the vertical orientation's w-24 beats it in-layer
|
|
118
|
+
* (split-side rule). */
|
|
119
|
+
.cn-attachment {
|
|
120
|
+
@apply w-fit rounded-xl focus-within:ring-1 focus-within:ring-ring/50;
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
.cn-attachment-actions {
|
|
124
|
+
@apply group-data-[orientation=vertical]/attachment:absolute group-data-[orientation=vertical]/attachment:top-3 group-data-[orientation=vertical]/attachment:right-3 relative z-20 group-data-[orientation=vertical]/attachment:gap-1;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
.cn-attachment-trigger {
|
|
128
|
+
@apply absolute inset-0 z-10 outline-none;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.cn-attachment-media-variant-image {
|
|
132
|
+
@apply opacity-60 group-data-[state=idle]/attachment:opacity-100 group-data-[state=done]/attachment:opacity-100;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
.cn-attachment-size-default {
|
|
136
|
+
@apply gap-2 text-sm has-data-[slot=attachment-content]:px-2.5 has-data-[slot=attachment-content]:py-2 has-data-[slot=attachment-media]:p-2;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.cn-attachment-size-sm {
|
|
140
|
+
@apply gap-2.5 text-xs has-data-[slot=attachment-content]:px-2 has-data-[slot=attachment-content]:py-1.5 has-data-[slot=attachment-media]:p-1.5;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
.cn-attachment-size-xs {
|
|
144
|
+
@apply gap-1.5 rounded-lg text-xs has-data-[slot=attachment-content]:px-1.5 has-data-[slot=attachment-content]:py-1 has-data-[slot=attachment-media]:p-1;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
.cn-attachment-orientation-horizontal {
|
|
148
|
+
@apply min-w-40;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
.cn-attachment-orientation-vertical {
|
|
152
|
+
@apply w-24 has-data-[slot=attachment-content]:w-30;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
.cn-attachment-media {
|
|
156
|
+
@apply w-10 rounded-lg bg-muted text-foreground group-data-[orientation=vertical]/attachment:w-full group-data-[size=sm]/attachment:w-8 group-data-[size=xs]/attachment:w-7 group-data-[size=xs]/attachment:rounded-md [&_svg:not([class*='size-'])]:size-4 group-data-[orientation=vertical]/attachment:[&_svg:not([class*='size-'])]:size-6 group-data-[size=xs]/attachment:[&_svg:not([class*='size-'])]:size-3.5;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
.cn-attachment-content {
|
|
160
|
+
@apply leading-tight group-data-[orientation=vertical]/attachment:px-1;
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
.cn-attachment-title {
|
|
164
|
+
@apply font-medium;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
.cn-attachment-description {
|
|
168
|
+
@apply mt-0.5 text-xs text-muted-foreground;
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
.cn-attachment-group {
|
|
172
|
+
@apply gap-3 py-1 scroll-px-1;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
/* MARK: Avatar */
|
|
176
|
+
.cn-avatar {
|
|
177
|
+
@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
.cn-avatar-image {
|
|
181
|
+
@apply rounded-full;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
.cn-avatar-fallback {
|
|
185
|
+
@apply rounded-full bg-muted text-muted-foreground;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
.cn-avatar-badge {
|
|
189
|
+
@apply bg-primary text-primary-foreground ring-background group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2 group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
.cn-avatar-group-count {
|
|
193
|
+
@apply size-8 rounded-full bg-muted text-sm text-muted-foreground group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
/* MARK: Badge */
|
|
197
|
+
/* The focus/invalid ring chain lives HERE (upstream keeps it inline): the
|
|
198
|
+
* destructive variant re-colors focus-visible:ring-* and can only beat
|
|
199
|
+
* the base treatment from the same layer. */
|
|
200
|
+
.cn-badge {
|
|
201
|
+
@apply gap-1 rounded-md border px-2 py-0.5 text-xs font-medium transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&>svg]:size-3;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
.cn-badge-variant-ghost {
|
|
205
|
+
@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
.cn-badge-variant-link {
|
|
209
|
+
@apply text-primary underline-offset-4 hover:underline;
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
.cn-badge-variant-default {
|
|
213
|
+
@apply border-transparent bg-primary text-primary-foreground [a&]:hover:bg-primary/90;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
.cn-badge-variant-secondary {
|
|
217
|
+
@apply border-transparent bg-secondary text-secondary-foreground [a&]:hover:bg-secondary/90;
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
.cn-badge-variant-destructive {
|
|
221
|
+
@apply border-transparent bg-destructive text-white [a&]:hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60;
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
.cn-badge-variant-outline {
|
|
225
|
+
@apply text-foreground [a&]:hover:bg-accent [a&]:hover:text-accent-foreground;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
.cn-badge-variant-success {
|
|
229
|
+
@apply border-transparent bg-success/10 text-[oklch(from_var(--success)_calc(l*0.85)_c_h)] dark:text-success dark:bg-success/20 [a&]:hover:bg-success/20;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
.cn-badge-variant-warning {
|
|
233
|
+
@apply border-transparent bg-warning/10 text-[oklch(from_var(--warning)_calc(l*0.85)_c_h)] dark:text-warning dark:bg-warning/20 [a&]:hover:bg-warning/20;
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
.cn-badge-variant-info {
|
|
237
|
+
@apply border-transparent bg-info/10 text-[oklch(from_var(--info)_calc(l*0.85)_c_h)] dark:text-info dark:bg-info/20 [a&]:hover:bg-info/20;
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/* MARK: Breadcrumb */
|
|
241
|
+
.cn-breadcrumb-list {
|
|
242
|
+
@apply gap-1.5 text-sm text-muted-foreground sm:gap-2.5;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
.cn-breadcrumb-item {
|
|
246
|
+
@apply gap-1.5;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
.cn-breadcrumb-link {
|
|
250
|
+
@apply transition-colors hover:text-foreground;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
.cn-breadcrumb-page {
|
|
254
|
+
@apply font-normal text-foreground;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
.cn-breadcrumb-separator {
|
|
258
|
+
@apply [&>svg]:size-3.5;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
.cn-breadcrumb-ellipsis {
|
|
262
|
+
@apply size-5 [&>svg]:size-4;
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
/* MARK: Bubble */
|
|
266
|
+
.cn-bubble {
|
|
267
|
+
@apply gap-1 max-w-[80%] data-[variant=ghost]:max-w-full;
|
|
268
|
+
}
|
|
269
|
+
|
|
270
|
+
.cn-bubble-group {
|
|
271
|
+
@apply gap-2;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
.cn-bubble-variant-default {
|
|
275
|
+
@apply *:data-[slot=bubble-content]:bg-primary *:data-[slot=bubble-content]:text-primary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-primary/80;
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
.cn-bubble-variant-secondary {
|
|
279
|
+
@apply *:data-[slot=bubble-content]:bg-secondary *:data-[slot=bubble-content]:text-secondary-foreground [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--secondary),var(--foreground)_5%)];
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
.cn-bubble-variant-muted {
|
|
283
|
+
@apply *:data-[slot=bubble-content]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[color-mix(in_oklch,var(--muted),var(--foreground)_5%)];
|
|
284
|
+
}
|
|
285
|
+
|
|
286
|
+
.cn-bubble-variant-tinted {
|
|
287
|
+
@apply *:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.93_calc(c*0.4)_h)] *:data-[slot=bubble-content]:text-foreground dark:*:data-[slot=bubble-content]:bg-[oklch(from_var(--primary)_0.3_calc(c*0.4)_h)] [&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.88_calc(c*0.5)_h)] dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-[oklch(from_var(--primary)_0.35_calc(c*0.5)_h)];
|
|
288
|
+
}
|
|
289
|
+
|
|
290
|
+
.cn-bubble-variant-outline {
|
|
291
|
+
@apply *:data-[slot=bubble-content]:border-border *:data-[slot=bubble-content]:bg-background [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-input/30;
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
.cn-bubble-variant-ghost {
|
|
295
|
+
@apply border-none *:data-[slot=bubble-content]:rounded-none *:data-[slot=bubble-content]:bg-transparent *:data-[slot=bubble-content]:p-0 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted [&>[data-slot=bubble-content]:is(button,a):hover]:text-foreground dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-muted/50;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
.cn-bubble-variant-destructive {
|
|
299
|
+
@apply *:data-[slot=bubble-content]:bg-destructive/10 *:data-[slot=bubble-content]:text-destructive dark:*:data-[slot=bubble-content]:bg-destructive/20 [&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/20 dark:[&>[data-slot=bubble-content]:is(button,a):hover]:bg-destructive/30;
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
.cn-bubble-content {
|
|
303
|
+
@apply rounded-xl border border-transparent px-3 py-2 text-sm leading-relaxed [button,a]:focus-visible:border-ring [button,a]:focus-visible:ring-3 [button,a]:focus-visible:ring-ring/50;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
.cn-bubble-reactions {
|
|
307
|
+
@apply gap-1 rounded-full bg-muted px-1.5 py-0.5 text-sm ring-3 ring-card has-[button]:p-0;
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
/* MARK: Button */
|
|
311
|
+
.cn-button {
|
|
312
|
+
@apply gap-2 rounded-md text-sm font-medium focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
.cn-button-variant-default {
|
|
316
|
+
@apply bg-primary text-primary-foreground shadow-xs hover:bg-primary/90;
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
.cn-button-variant-destructive {
|
|
320
|
+
@apply bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60;
|
|
321
|
+
}
|
|
322
|
+
|
|
323
|
+
.cn-button-variant-outline {
|
|
324
|
+
@apply border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50;
|
|
325
|
+
}
|
|
326
|
+
|
|
327
|
+
.cn-button-variant-secondary {
|
|
328
|
+
@apply bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
.cn-button-variant-ghost {
|
|
332
|
+
@apply hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50;
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
.cn-button-variant-link {
|
|
336
|
+
@apply text-primary underline-offset-4 hover:underline;
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
.cn-button-size-default {
|
|
340
|
+
@apply h-9 px-4 py-2 has-[>svg]:px-3;
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
.cn-button-size-xs {
|
|
344
|
+
@apply h-6 gap-1 px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3;
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
.cn-button-size-sm {
|
|
348
|
+
@apply h-8 gap-1.5 px-3 has-[>svg]:px-2.5;
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
.cn-button-size-lg {
|
|
352
|
+
@apply h-10 px-6 has-[>svg]:px-4;
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
.cn-button-size-icon {
|
|
356
|
+
@apply size-9;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
.cn-button-size-icon-xs {
|
|
360
|
+
@apply size-6 [&_svg:not([class*='size-'])]:size-3;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
.cn-button-size-icon-sm {
|
|
364
|
+
@apply size-8;
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
.cn-button-size-icon-lg {
|
|
368
|
+
@apply size-10;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
/* MARK: ButtonGroup */
|
|
372
|
+
.cn-button-group {
|
|
373
|
+
@apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
.cn-button-group-orientation-horizontal {
|
|
377
|
+
@apply *:data-slot:rounded-r-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md! [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0 [&>:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover]):has(~[data-slot])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-r-none [&>:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover]):not(:has(~[data-slot]))_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-r-md! [&>[data-slot]~:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-l-none [&>[data-slot]~:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:border-l-0;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
.cn-button-group-orientation-vertical {
|
|
381
|
+
@apply flex-col *:data-slot:rounded-b-none [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md! [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0 [&>:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover]):has(~[data-slot])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-b-none [&>:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover]):not(:has(~[data-slot]))_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-b-md! [&>[data-slot]~:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:rounded-t-none [&>[data-slot]~:is([data-slot=select],[data-slot=dropdown-menu],[data-slot=popover])_:is([data-slot=select-trigger],[data-slot=dropdown-menu-trigger],[data-slot=popover-trigger])]:border-t-0;
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
.cn-button-group-text {
|
|
385
|
+
@apply gap-2 rounded-md border bg-muted px-2.5 text-sm font-medium shadow-xs [&_svg:not([class*='size-'])]:size-4;
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
.cn-button-group-separator {
|
|
389
|
+
@apply bg-input!;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
/* MARK: Calendar */
|
|
393
|
+
.cn-calendar {
|
|
394
|
+
@apply p-3;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
.cn-calendar-caption {
|
|
398
|
+
@apply text-sm font-medium;
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
.cn-calendar-weekday {
|
|
402
|
+
@apply rounded-md text-[0.8rem] font-normal text-muted-foreground;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
.cn-calendar-day-button {
|
|
406
|
+
@apply rounded-md text-sm leading-none font-normal hover:bg-accent hover:text-accent-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:text-muted-foreground disabled:opacity-50 data-today:bg-muted data-today:text-foreground data-outside:text-muted-foreground data-selected:bg-primary data-selected:text-primary-foreground data-selected:hover:bg-primary data-selected:hover:text-primary-foreground data-range-start:rounded-l-md data-range-start:bg-primary data-range-start:text-primary-foreground data-range-middle:rounded-none data-range-middle:bg-muted data-range-middle:text-foreground data-range-end:rounded-r-md data-range-end:bg-primary data-range-end:text-primary-foreground;
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
/* MARK: Card */
|
|
410
|
+
.cn-card {
|
|
411
|
+
@apply gap-6 rounded-xl border bg-card py-6 text-card-foreground shadow-sm;
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
.cn-card-header {
|
|
415
|
+
@apply gap-1.5 px-6;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
.cn-card-title {
|
|
419
|
+
@apply font-semibold leading-none;
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
.cn-card-description {
|
|
423
|
+
@apply text-sm text-muted-foreground;
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
.cn-card-content {
|
|
427
|
+
@apply px-6;
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
.cn-card-footer {
|
|
431
|
+
@apply px-6 [.border-t]:pt-6;
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
/* MARK: Checkbox */
|
|
435
|
+
.cn-checkbox {
|
|
436
|
+
@apply size-4 rounded-[4px] border border-input shadow-xs transition-shadow focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-checked:border-primary data-checked:bg-primary data-checked:text-primary-foreground dark:bg-input/30 dark:aria-invalid:ring-destructive/40 dark:data-checked:bg-primary;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
.cn-checkbox-indicator {
|
|
440
|
+
@apply [&>svg]:size-3.5;
|
|
441
|
+
}
|
|
442
|
+
|
|
443
|
+
/* MARK: CodeBlock */
|
|
444
|
+
/* The syntax palette: seven vars the dictionary's token map reads
|
|
445
|
+
* (GitHub light/dark is the shared v1 baseline - a theme restyles code by
|
|
446
|
+
* redefining the vars); .hll is highlight_lines:, .line::before the CSS
|
|
447
|
+
* counters (out of copied text by construction). */
|
|
448
|
+
.cn-code-block {
|
|
449
|
+
@apply bg-muted/30 rounded-lg border text-foreground [--syntax-keyword:#a40e26] [--syntax-constant:#0550ae] [--syntax-string:#0a3069] [--syntax-entity:#7f3400] [--syntax-markup:#116329] [--syntax-function:#6639ba] [--syntax-comment:#57606a] dark:[--syntax-keyword:#ff7b72] dark:[--syntax-constant:#79c0ff] dark:[--syntax-string:#a5d6ff] dark:[--syntax-entity:#ffa657] dark:[--syntax-markup:#7ee787] dark:[--syntax-function:#d2a8ff] dark:[--syntax-comment:#8b949e];
|
|
450
|
+
}
|
|
451
|
+
.cn-code-block .hll {
|
|
452
|
+
@apply bg-primary/10 -mx-4 w-[calc(100%+2rem)] px-4;
|
|
453
|
+
}
|
|
454
|
+
.cn-code-block[data-line-numbers] .line::before {
|
|
455
|
+
@apply text-muted-foreground me-4 inline-block w-6 text-right content-[counter(line)] [counter-increment:line];
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/* MARK: Command */
|
|
459
|
+
.cn-command {
|
|
460
|
+
@apply rounded-md bg-popover text-popover-foreground;
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
.cn-input-otp-group {
|
|
464
|
+
@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-lg has-aria-invalid:ring-3;
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
.cn-input-otp-separator {
|
|
468
|
+
@apply [&_svg:not([class*='size-'])]:size-4;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
.cn-command-input-icon {
|
|
472
|
+
@apply size-4 shrink-0 opacity-50;
|
|
473
|
+
}
|
|
474
|
+
|
|
475
|
+
.cn-command-input-wrapper {
|
|
476
|
+
@apply h-9 gap-2 border-b px-3;
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
.cn-command-input {
|
|
480
|
+
@apply h-10 rounded-md bg-transparent py-3 text-sm placeholder:text-muted-foreground;
|
|
481
|
+
}
|
|
482
|
+
|
|
483
|
+
/* Loose items (direct children, no group): the source's palette never
|
|
484
|
+
* renders them, so the list carries the inset itself and its groups drop
|
|
485
|
+
* their horizontal padding - every row aligns; group-only lists keep the
|
|
486
|
+
* cmdk geometry. */
|
|
487
|
+
.cn-command-list {
|
|
488
|
+
@apply max-h-[300px] scroll-py-1 has-[>[data-slot=command-item]]:p-1 has-[>[data-slot=command-item]]:*:data-[slot=command-group]:px-0;
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
.cn-command-empty {
|
|
492
|
+
@apply py-6 text-center text-sm;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.cn-command-group {
|
|
496
|
+
@apply p-1 text-foreground;
|
|
497
|
+
}
|
|
498
|
+
|
|
499
|
+
.cn-command-group-heading {
|
|
500
|
+
@apply px-2 py-1.5 text-xs font-medium text-muted-foreground;
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
.cn-command-item {
|
|
504
|
+
@apply gap-2 rounded-sm px-2 py-1.5 text-sm data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
.cn-command-shortcut {
|
|
508
|
+
@apply ms-auto text-xs tracking-widest text-muted-foreground;
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
.cn-command-separator {
|
|
512
|
+
@apply -mx-1 h-px bg-border;
|
|
513
|
+
}
|
|
514
|
+
|
|
515
|
+
/* MARK: Combobox */
|
|
516
|
+
.cn-combobox-trigger {
|
|
517
|
+
@apply h-9 w-[200px] gap-2 rounded-md border bg-background px-4 py-2 text-sm font-normal shadow-xs hover:bg-accent hover:text-accent-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground dark:aria-invalid:ring-destructive/40 dark:border-input dark:bg-input/30 dark:hover:bg-input/50 has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-4;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
.cn-combobox-content {
|
|
521
|
+
@apply rounded-md border bg-popover p-0 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
/* The popup's list and group label per the source's combobox
|
|
525
|
+
* (combobox.tsx): the inset rides the LIST (p-1, none when empty) and
|
|
526
|
+
* the group stays unpadded, so ungrouped options sit where grouped ones
|
|
527
|
+
* do. The label's pointer-coarse retunes are dropped like the rest of
|
|
528
|
+
* this port. */
|
|
529
|
+
.cn-combobox-label {
|
|
530
|
+
@apply px-2 py-1.5 text-xs text-muted-foreground;
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
.cn-combobox-list {
|
|
534
|
+
@apply max-h-[min(calc(--spacing(96)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
.cn-combobox-item-indicator {
|
|
538
|
+
@apply size-4;
|
|
539
|
+
}
|
|
540
|
+
|
|
541
|
+
/* The chips FIELD (multiple:) - the input frame per the shadcn source
|
|
542
|
+
* (combobox.tsx): chip padding tighten via has-data, chip = the muted
|
|
543
|
+
* mini-badge; the chip focus ring is poetry's a11y addition (Base UI
|
|
544
|
+
* styles chip highlight as real :focus-visible). */
|
|
545
|
+
.cn-combobox-chips {
|
|
546
|
+
@apply min-h-9 gap-1.5 rounded-md border border-input px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:border-ring focus-within:ring-[3px] focus-within:ring-ring/50 has-data-[slot=combobox-chip]:px-1.5 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 has-aria-invalid:ring-[3px] has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40;
|
|
547
|
+
}
|
|
548
|
+
|
|
549
|
+
.cn-combobox-chip {
|
|
550
|
+
@apply h-5.5 gap-1 rounded-sm bg-muted px-1.5 text-xs font-medium focus-visible:ring-[3px] focus-visible:ring-ring/50;
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
.cn-combobox-chip-remove {
|
|
554
|
+
@apply -ml-1 rounded-sm opacity-50 hover:opacity-100 focus-visible:opacity-100;
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
.cn-combobox-chip-input {
|
|
558
|
+
@apply min-w-16 placeholder:text-muted-foreground;
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/* MARK: ContextMenu */
|
|
562
|
+
.cn-context-menu-content {
|
|
563
|
+
@apply min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
.cn-context-menu-item {
|
|
567
|
+
@apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!;
|
|
568
|
+
}
|
|
569
|
+
|
|
570
|
+
.cn-context-menu-checkbox-item {
|
|
571
|
+
@apply gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
.cn-context-menu-radio-item {
|
|
575
|
+
@apply gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
.cn-context-menu-label {
|
|
579
|
+
@apply px-2 py-1.5 text-sm font-medium text-foreground data-[inset]:pl-8;
|
|
580
|
+
}
|
|
581
|
+
|
|
582
|
+
.cn-context-menu-separator {
|
|
583
|
+
@apply -mx-1 my-1 h-px bg-border;
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
.cn-context-menu-shortcut {
|
|
587
|
+
@apply ml-auto text-xs tracking-widest text-muted-foreground;
|
|
588
|
+
}
|
|
589
|
+
|
|
590
|
+
.cn-context-menu-sub-trigger {
|
|
591
|
+
@apply rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
|
|
592
|
+
}
|
|
593
|
+
|
|
594
|
+
.cn-context-menu-sub-content {
|
|
595
|
+
@apply min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
.cn-context-menu-item-indicator {
|
|
599
|
+
@apply left-2 size-3.5;
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
/* MARK: DataTable */
|
|
603
|
+
.cn-data-table-toolbar {
|
|
604
|
+
@apply py-4;
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
.cn-data-table-container {
|
|
608
|
+
@apply rounded-md border;
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
.cn-data-table-footer {
|
|
612
|
+
@apply py-4;
|
|
613
|
+
}
|
|
614
|
+
|
|
615
|
+
.cn-data-table-empty {
|
|
616
|
+
@apply h-24 text-center;
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
/* MARK: Dialog */
|
|
620
|
+
.cn-dialog-content {
|
|
621
|
+
@apply w-full max-w-[calc(100%-2rem)] gap-4 rounded-lg border bg-background p-6 text-foreground shadow-lg sm:max-w-lg backdrop:bg-black/50 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95;
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
.cn-dialog-header {
|
|
625
|
+
@apply gap-2 text-center sm:text-left;
|
|
626
|
+
}
|
|
627
|
+
|
|
628
|
+
.cn-dialog-title {
|
|
629
|
+
@apply text-lg font-semibold leading-none;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
.cn-dialog-description {
|
|
633
|
+
@apply text-sm text-muted-foreground;
|
|
634
|
+
}
|
|
635
|
+
|
|
636
|
+
/* poetry-authored: upstream ships no footer rule for this theme; gap-2
|
|
637
|
+
mirrors the component's own inline utilities so the hook compiles
|
|
638
|
+
without a visual delta (css:verify_compiled). */
|
|
639
|
+
.cn-dialog-footer {
|
|
640
|
+
@apply gap-2;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
.cn-dialog-close {
|
|
644
|
+
@apply absolute top-4 right-4;
|
|
645
|
+
}
|
|
646
|
+
|
|
647
|
+
/* MARK: Drawer */
|
|
648
|
+
.cn-drawer-content {
|
|
649
|
+
/* Flush drawer - the explicit stance for the dictionary's
|
|
650
|
+
var(--drawer-inset) read (floating themes ship --spacing(2)). */
|
|
651
|
+
@apply bg-popover text-sm text-popover-foreground shadow-lg backdrop:bg-black/10 supports-backdrop-filter:backdrop:backdrop-blur-xs [--drawer-inset:0px];
|
|
652
|
+
}
|
|
653
|
+
|
|
654
|
+
.cn-drawer-direction-down {
|
|
655
|
+
@apply rounded-t-xl border-t;
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
.cn-drawer-direction-up {
|
|
659
|
+
@apply rounded-b-xl border-b;
|
|
660
|
+
}
|
|
661
|
+
|
|
662
|
+
.cn-drawer-direction-left {
|
|
663
|
+
@apply rounded-r-xl border-r;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
.cn-drawer-direction-right {
|
|
667
|
+
@apply rounded-l-xl border-l;
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
.cn-drawer-swipe-handle {
|
|
671
|
+
@apply after:h-1.5 after:w-[100px] after:rounded-full after:bg-muted;
|
|
672
|
+
}
|
|
673
|
+
|
|
674
|
+
.cn-drawer-header {
|
|
675
|
+
@apply gap-0.5 p-4 pb-0 text-center md:gap-1.5 md:text-left;
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
.cn-drawer-footer {
|
|
679
|
+
@apply gap-2 p-4 pt-0;
|
|
680
|
+
}
|
|
681
|
+
|
|
682
|
+
.cn-drawer-title {
|
|
683
|
+
@apply font-medium text-foreground;
|
|
684
|
+
}
|
|
685
|
+
|
|
686
|
+
.cn-drawer-description {
|
|
687
|
+
@apply text-sm text-balance text-muted-foreground;
|
|
688
|
+
}
|
|
689
|
+
|
|
690
|
+
.cn-drawer-body {
|
|
691
|
+
@apply p-4;
|
|
692
|
+
}
|
|
693
|
+
|
|
694
|
+
/* MARK: DropdownMenu */
|
|
695
|
+
.cn-dropdown-menu-content {
|
|
696
|
+
@apply min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
697
|
+
}
|
|
698
|
+
|
|
699
|
+
.cn-dropdown-menu-item {
|
|
700
|
+
@apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!;
|
|
701
|
+
}
|
|
702
|
+
|
|
703
|
+
.cn-dropdown-menu-checkbox-item {
|
|
704
|
+
@apply gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
705
|
+
}
|
|
706
|
+
|
|
707
|
+
.cn-dropdown-menu-radio-item {
|
|
708
|
+
@apply gap-2 rounded-sm py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
.cn-dropdown-menu-label {
|
|
712
|
+
@apply px-2 py-1.5 text-sm font-medium data-[inset]:pl-8;
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
.cn-dropdown-menu-separator {
|
|
716
|
+
@apply -mx-1 my-1 h-px bg-border;
|
|
717
|
+
}
|
|
718
|
+
|
|
719
|
+
.cn-dropdown-menu-shortcut {
|
|
720
|
+
@apply ml-auto text-xs tracking-widest text-muted-foreground;
|
|
721
|
+
}
|
|
722
|
+
|
|
723
|
+
.cn-dropdown-menu-sub-trigger {
|
|
724
|
+
@apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
|
|
725
|
+
}
|
|
726
|
+
|
|
727
|
+
.cn-dropdown-menu-sub-content {
|
|
728
|
+
@apply min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
.cn-dropdown-menu-item-indicator {
|
|
732
|
+
@apply left-2 size-3.5;
|
|
733
|
+
}
|
|
734
|
+
|
|
735
|
+
/* MARK: Empty */
|
|
736
|
+
.cn-empty {
|
|
737
|
+
@apply gap-4 rounded-lg border-dashed p-12;
|
|
738
|
+
}
|
|
739
|
+
|
|
740
|
+
.cn-empty-header {
|
|
741
|
+
@apply gap-2;
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
.cn-empty-media {
|
|
745
|
+
@apply mb-2;
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
.cn-empty-media-default {
|
|
749
|
+
@apply bg-transparent;
|
|
750
|
+
}
|
|
751
|
+
|
|
752
|
+
.cn-empty-media-icon {
|
|
753
|
+
@apply flex size-10 shrink-0 items-center justify-center rounded-lg bg-muted text-foreground [&_svg:not([class*='size-'])]:size-6;
|
|
754
|
+
}
|
|
755
|
+
|
|
756
|
+
.cn-empty-title {
|
|
757
|
+
@apply text-lg font-medium tracking-tight;
|
|
758
|
+
}
|
|
759
|
+
|
|
760
|
+
.cn-empty-description {
|
|
761
|
+
@apply text-sm/relaxed;
|
|
762
|
+
}
|
|
763
|
+
|
|
764
|
+
.cn-empty-content {
|
|
765
|
+
@apply gap-4 text-sm;
|
|
766
|
+
}
|
|
767
|
+
|
|
768
|
+
/* MARK: Field */
|
|
769
|
+
.cn-field {
|
|
770
|
+
@apply gap-2 data-[invalid=true]:text-destructive;
|
|
771
|
+
}
|
|
772
|
+
|
|
773
|
+
.cn-field-description {
|
|
774
|
+
@apply text-sm text-muted-foreground [[data-variant=legend]+&]:-mt-1.5;
|
|
775
|
+
}
|
|
776
|
+
|
|
777
|
+
.cn-field-error {
|
|
778
|
+
@apply text-sm font-medium text-destructive;
|
|
779
|
+
}
|
|
780
|
+
|
|
781
|
+
.cn-field-orientation-horizontal {
|
|
782
|
+
@apply gap-x-3;
|
|
783
|
+
}
|
|
784
|
+
|
|
785
|
+
/* Row layout: the label + hint pair packs at the theme's
|
|
786
|
+
cn-field-content rhythm; the field gap keeps the column axis. */
|
|
787
|
+
.cn-field-orientation-responsive {
|
|
788
|
+
@apply @md/field-group:gap-y-1.5;
|
|
789
|
+
}
|
|
790
|
+
|
|
791
|
+
.cn-field-set {
|
|
792
|
+
@apply gap-6 has-[>.cn-field-group-choices]:gap-3 has-[>[data-slot=radio-group]]:gap-3;
|
|
793
|
+
}
|
|
794
|
+
|
|
795
|
+
.cn-field-legend {
|
|
796
|
+
@apply mb-3 font-medium data-[variant=legend]:text-base data-[variant=label]:text-sm;
|
|
797
|
+
}
|
|
798
|
+
|
|
799
|
+
.cn-field-group {
|
|
800
|
+
@apply gap-7 *:data-[slot=field-group]:gap-4;
|
|
801
|
+
}
|
|
802
|
+
|
|
803
|
+
.cn-field-group-choices {
|
|
804
|
+
@apply gap-3;
|
|
805
|
+
}
|
|
806
|
+
|
|
807
|
+
.cn-field-content {
|
|
808
|
+
@apply gap-1.5;
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
.cn-field-label {
|
|
812
|
+
@apply gap-2 leading-snug;
|
|
813
|
+
}
|
|
814
|
+
|
|
815
|
+
.cn-field-label-card {
|
|
816
|
+
@apply rounded-md border p-4 has-data-checked:border-primary has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10;
|
|
817
|
+
}
|
|
818
|
+
|
|
819
|
+
/* Tinted-surface AA compensation: on the checked card's primary/5 tint,
|
|
820
|
+
plain muted-foreground reads 4.46:1 (sub-AA, upstream ships it) - the
|
|
821
|
+
description inside choice cards rides a darker mix instead. */
|
|
822
|
+
.cn-field-label-card .cn-field-description {
|
|
823
|
+
@apply text-foreground/70;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
.cn-field-title {
|
|
827
|
+
@apply gap-2 text-sm leading-snug font-medium;
|
|
828
|
+
}
|
|
829
|
+
|
|
830
|
+
.cn-field-separator {
|
|
831
|
+
@apply -my-2 h-5 text-sm;
|
|
832
|
+
}
|
|
833
|
+
|
|
834
|
+
.cn-field-separator-content {
|
|
835
|
+
@apply px-2 text-muted-foreground;
|
|
836
|
+
}
|
|
837
|
+
|
|
838
|
+
/* MARK: HoverCard */
|
|
839
|
+
.cn-hover-card-content {
|
|
840
|
+
/* text-sm is poetry's: NYv4 sizes the card in demo markup instead, but
|
|
841
|
+
the other eight themes all carry the size here - type scale is
|
|
842
|
+
theme-owned, so examples never force a size the theme should pick. */
|
|
843
|
+
@apply w-64 rounded-md border bg-popover p-4 text-sm text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
844
|
+
}
|
|
845
|
+
|
|
846
|
+
/* MARK: Input */
|
|
847
|
+
.cn-input {
|
|
848
|
+
@apply flex h-9 rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium md:text-sm placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:bg-input/30;
|
|
849
|
+
}
|
|
850
|
+
|
|
851
|
+
/* MARK: InputGroup */
|
|
852
|
+
.cn-input-group {
|
|
853
|
+
@apply h-9 rounded-md border border-input shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
.cn-input-group-addon {
|
|
857
|
+
@apply h-auto gap-2 py-1.5 text-sm font-medium text-muted-foreground group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4;
|
|
858
|
+
}
|
|
859
|
+
|
|
860
|
+
.cn-input-group-addon-align-inline-start {
|
|
861
|
+
@apply pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem];
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
.cn-input-group-addon-align-inline-end {
|
|
865
|
+
@apply pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem];
|
|
866
|
+
}
|
|
867
|
+
|
|
868
|
+
.cn-input-group-addon-align-block-start {
|
|
869
|
+
@apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
.cn-input-group-addon-align-block-end {
|
|
873
|
+
@apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;
|
|
874
|
+
}
|
|
875
|
+
|
|
876
|
+
.cn-input-group-text {
|
|
877
|
+
@apply gap-2 text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/* MARK: InputOTP */
|
|
881
|
+
.cn-input-otp {
|
|
882
|
+
@apply gap-2;
|
|
883
|
+
}
|
|
884
|
+
|
|
885
|
+
.cn-input-otp-slot {
|
|
886
|
+
@apply h-9 w-9 border-y border-r border-input text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md aria-invalid:border-destructive data-[active=true]:border-ring data-[active=true]:ring-[3px] data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:border-destructive data-[active=true]:aria-invalid:ring-destructive/20 dark:bg-input/30 dark:data-[active=true]:aria-invalid:ring-destructive/40;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
.cn-input-otp-caret-line {
|
|
890
|
+
@apply h-4 w-px bg-foreground;
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
/* MARK: Item */
|
|
894
|
+
.cn-item {
|
|
895
|
+
@apply rounded-md border text-sm [a]:hover:bg-muted;
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
.cn-item-media {
|
|
899
|
+
@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;
|
|
900
|
+
}
|
|
901
|
+
|
|
902
|
+
.cn-item-media-variant-default {
|
|
903
|
+
@apply bg-transparent;
|
|
904
|
+
}
|
|
905
|
+
|
|
906
|
+
.cn-item-media-variant-icon {
|
|
907
|
+
@apply [&_svg:not([class*='size-'])]:size-4;
|
|
908
|
+
}
|
|
909
|
+
|
|
910
|
+
.cn-item-media-variant-image {
|
|
911
|
+
@apply size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;
|
|
912
|
+
}
|
|
913
|
+
|
|
914
|
+
.cn-item-content {
|
|
915
|
+
@apply gap-1 group-data-[size=xs]/item:gap-0;
|
|
916
|
+
}
|
|
917
|
+
|
|
918
|
+
.cn-item-title {
|
|
919
|
+
@apply gap-2 text-sm leading-snug font-medium underline-offset-4;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
.cn-item-description {
|
|
923
|
+
@apply text-left text-sm leading-normal text-muted-foreground group-data-[size=xs]/item:text-xs;
|
|
924
|
+
}
|
|
925
|
+
|
|
926
|
+
.cn-item-actions {
|
|
927
|
+
@apply gap-2;
|
|
928
|
+
}
|
|
929
|
+
|
|
930
|
+
.cn-item-header {
|
|
931
|
+
@apply gap-2;
|
|
932
|
+
}
|
|
933
|
+
|
|
934
|
+
.cn-item-footer {
|
|
935
|
+
@apply gap-2;
|
|
936
|
+
}
|
|
937
|
+
|
|
938
|
+
.cn-item-group {
|
|
939
|
+
@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;
|
|
940
|
+
}
|
|
941
|
+
|
|
942
|
+
.cn-item-separator {
|
|
943
|
+
@apply my-2;
|
|
944
|
+
}
|
|
945
|
+
|
|
946
|
+
.cn-item-variant-default {
|
|
947
|
+
@apply border-transparent;
|
|
948
|
+
}
|
|
949
|
+
|
|
950
|
+
.cn-item-variant-outline {
|
|
951
|
+
@apply border-border;
|
|
952
|
+
}
|
|
953
|
+
|
|
954
|
+
.cn-item-variant-muted {
|
|
955
|
+
@apply border-transparent bg-muted/50;
|
|
956
|
+
}
|
|
957
|
+
|
|
958
|
+
.cn-item-size-default {
|
|
959
|
+
@apply gap-3.5 px-4 py-3.5;
|
|
960
|
+
}
|
|
961
|
+
|
|
962
|
+
.cn-item-size-sm {
|
|
963
|
+
@apply gap-2.5 px-3 py-2.5;
|
|
964
|
+
}
|
|
965
|
+
|
|
966
|
+
.cn-item-size-xs {
|
|
967
|
+
@apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;
|
|
968
|
+
}
|
|
969
|
+
|
|
970
|
+
/* MARK: Kbd */
|
|
971
|
+
.cn-kbd {
|
|
972
|
+
@apply h-5 w-fit min-w-5 gap-1 rounded-sm bg-muted px-1 font-sans text-xs font-medium text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 [&_svg:not([class*='size-'])]:size-3;
|
|
973
|
+
}
|
|
974
|
+
|
|
975
|
+
.cn-kbd-group {
|
|
976
|
+
@apply gap-1;
|
|
977
|
+
}
|
|
978
|
+
|
|
979
|
+
/* MARK: Label */
|
|
980
|
+
.cn-label {
|
|
981
|
+
@apply gap-2 text-sm font-medium leading-none peer-disabled:opacity-50;
|
|
982
|
+
}
|
|
983
|
+
|
|
984
|
+
/* MARK: Link */
|
|
985
|
+
.cn-link {
|
|
986
|
+
@apply gap-1 rounded-sm text-primary underline-offset-4 focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50;
|
|
987
|
+
}
|
|
988
|
+
|
|
989
|
+
.cn-link-underline-hover {
|
|
990
|
+
@apply no-underline hover:underline;
|
|
991
|
+
}
|
|
992
|
+
|
|
993
|
+
.cn-link-underline-always {
|
|
994
|
+
@apply underline;
|
|
995
|
+
}
|
|
996
|
+
|
|
997
|
+
.cn-link-underline-none {
|
|
998
|
+
@apply no-underline;
|
|
999
|
+
}
|
|
1000
|
+
|
|
1001
|
+
/* MARK: Marker */
|
|
1002
|
+
.cn-marker {
|
|
1003
|
+
@apply min-h-4 gap-2 text-left text-sm text-muted-foreground [&_svg:not([class*='size-'])]:size-4 [a]:underline [a]:underline-offset-3 [a]:hover:text-foreground;
|
|
1004
|
+
}
|
|
1005
|
+
|
|
1006
|
+
.cn-marker-variant-separator {
|
|
1007
|
+
@apply before:mr-1 before:h-px before:min-w-0 before:flex-1 before:bg-border after:ml-1 after:h-px after:min-w-0 after:flex-1 after:bg-border;
|
|
1008
|
+
}
|
|
1009
|
+
|
|
1010
|
+
.cn-marker-variant-border {
|
|
1011
|
+
@apply border-b border-border pb-2;
|
|
1012
|
+
}
|
|
1013
|
+
|
|
1014
|
+
.cn-marker-icon {
|
|
1015
|
+
@apply size-4 [&_svg:not([class*='size-'])]:size-4;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
.cn-marker-content {
|
|
1019
|
+
@apply group-data-[variant=separator]/marker:flex-none group-data-[variant=separator]/marker:text-center *:[a]:underline *:[a]:underline-offset-3 *:[a]:hover:text-foreground;
|
|
1020
|
+
}
|
|
1021
|
+
|
|
1022
|
+
/* MARK: Menubar */
|
|
1023
|
+
.cn-menubar {
|
|
1024
|
+
@apply h-9 gap-1 rounded-md border bg-background p-1 shadow-xs;
|
|
1025
|
+
}
|
|
1026
|
+
|
|
1027
|
+
.cn-menubar-checkbox-item-indicator {
|
|
1028
|
+
@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;
|
|
1029
|
+
}
|
|
1030
|
+
|
|
1031
|
+
.cn-menubar-radio-item-indicator {
|
|
1032
|
+
@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;
|
|
1033
|
+
}
|
|
1034
|
+
|
|
1035
|
+
.cn-navigation-menu {
|
|
1036
|
+
@apply max-w-max;
|
|
1037
|
+
}
|
|
1038
|
+
|
|
1039
|
+
.cn-menubar-trigger {
|
|
1040
|
+
@apply rounded-sm px-2 py-1 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground data-popup-open:bg-accent data-popup-open:text-accent-foreground;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
.cn-menubar-content {
|
|
1044
|
+
@apply min-w-[12rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
1045
|
+
}
|
|
1046
|
+
|
|
1047
|
+
.cn-menubar-item {
|
|
1048
|
+
@apply gap-2 rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 data-[variant=destructive]:focus:text-destructive dark:data-[variant=destructive]:focus:bg-destructive/20 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground data-[variant=destructive]:*:[svg]:text-destructive!;
|
|
1049
|
+
}
|
|
1050
|
+
|
|
1051
|
+
.cn-menubar-checkbox-item {
|
|
1052
|
+
@apply gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
1053
|
+
}
|
|
1054
|
+
|
|
1055
|
+
.cn-menubar-radio-item {
|
|
1056
|
+
@apply gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4;
|
|
1057
|
+
}
|
|
1058
|
+
|
|
1059
|
+
.cn-menubar-label {
|
|
1060
|
+
@apply px-2 py-1.5 text-sm font-medium data-[inset]:pl-8;
|
|
1061
|
+
}
|
|
1062
|
+
|
|
1063
|
+
.cn-menubar-separator {
|
|
1064
|
+
@apply -mx-1 my-1 h-px bg-border;
|
|
1065
|
+
}
|
|
1066
|
+
|
|
1067
|
+
.cn-menubar-shortcut {
|
|
1068
|
+
@apply ml-auto text-xs tracking-widest text-muted-foreground;
|
|
1069
|
+
}
|
|
1070
|
+
|
|
1071
|
+
.cn-menubar-sub-trigger {
|
|
1072
|
+
@apply rounded-sm px-2 py-1.5 text-sm focus:bg-accent focus:text-accent-foreground data-[inset]:pl-8 data-popup-open:bg-accent data-popup-open:text-accent-foreground;
|
|
1073
|
+
}
|
|
1074
|
+
|
|
1075
|
+
.cn-menubar-sub-content {
|
|
1076
|
+
@apply min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
1077
|
+
}
|
|
1078
|
+
|
|
1079
|
+
|
|
1080
|
+
/* MARK: Message */
|
|
1081
|
+
.cn-message {
|
|
1082
|
+
@apply gap-2 text-sm;
|
|
1083
|
+
}
|
|
1084
|
+
|
|
1085
|
+
.cn-message-group {
|
|
1086
|
+
@apply gap-2;
|
|
1087
|
+
}
|
|
1088
|
+
|
|
1089
|
+
.cn-message-avatar {
|
|
1090
|
+
@apply min-w-8;
|
|
1091
|
+
}
|
|
1092
|
+
|
|
1093
|
+
.cn-message-content {
|
|
1094
|
+
@apply gap-2.5;
|
|
1095
|
+
}
|
|
1096
|
+
|
|
1097
|
+
.cn-message-header {
|
|
1098
|
+
@apply px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0;
|
|
1099
|
+
}
|
|
1100
|
+
|
|
1101
|
+
.cn-message-footer {
|
|
1102
|
+
@apply px-3 text-xs font-medium text-muted-foreground group-has-data-[variant=ghost]/message:px-0;
|
|
1103
|
+
}
|
|
1104
|
+
|
|
1105
|
+
/* MARK: MessageScroller */
|
|
1106
|
+
.cn-message-scroller-content {
|
|
1107
|
+
@apply gap-8;
|
|
1108
|
+
}
|
|
1109
|
+
|
|
1110
|
+
/* MARK: NavigationMenu */
|
|
1111
|
+
.cn-navigation-menu-list {
|
|
1112
|
+
@apply gap-0;
|
|
1113
|
+
}
|
|
1114
|
+
|
|
1115
|
+
.cn-navigation-menu-trigger {
|
|
1116
|
+
@apply rounded-md px-4 py-2 text-sm font-medium transition-all hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted data-open:bg-muted/50 data-open:hover:bg-muted data-open:focus:bg-muted;
|
|
1117
|
+
}
|
|
1118
|
+
|
|
1119
|
+
.cn-navigation-menu-trigger-icon {
|
|
1120
|
+
@apply ml-1 size-3;
|
|
1121
|
+
}
|
|
1122
|
+
|
|
1123
|
+
.cn-navigation-menu-content {
|
|
1124
|
+
@apply p-2 pr-2.5 group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:ring-foreground/10 group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95;
|
|
1125
|
+
}
|
|
1126
|
+
|
|
1127
|
+
.cn-navigation-menu-popup {
|
|
1128
|
+
@apply rounded-md bg-popover text-popover-foreground shadow ring-1 ring-foreground/10;
|
|
1129
|
+
}
|
|
1130
|
+
|
|
1131
|
+
.cn-navigation-menu-link {
|
|
1132
|
+
@apply gap-1.5 rounded-md p-2 text-sm transition-all hover:bg-muted focus:bg-muted focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-sm data-[active=true]:bg-muted/50 data-[active=true]:hover:bg-muted data-[active=true]:focus:bg-muted [&_svg:not([class*='size-'])]:size-4;
|
|
1133
|
+
}
|
|
1134
|
+
|
|
1135
|
+
/* MARK: NativeSelect */
|
|
1136
|
+
.cn-native-select {
|
|
1137
|
+
@apply h-9 w-full min-w-0 rounded-md border border-input bg-transparent py-1 pr-8 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] select-none selection:bg-primary selection:text-primary-foreground placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 data-[size=sm]:h-8 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:border-destructive/50 dark:aria-invalid:ring-destructive/40;
|
|
1138
|
+
}
|
|
1139
|
+
|
|
1140
|
+
.cn-native-select-icon {
|
|
1141
|
+
@apply text-muted-foreground;
|
|
1142
|
+
}
|
|
1143
|
+
|
|
1144
|
+
/* MARK: Pagination */
|
|
1145
|
+
.cn-pagination-content {
|
|
1146
|
+
@apply gap-1;
|
|
1147
|
+
}
|
|
1148
|
+
|
|
1149
|
+
.cn-carousel-previous {
|
|
1150
|
+
@apply rounded-full;
|
|
1151
|
+
}
|
|
1152
|
+
|
|
1153
|
+
.cn-carousel-next {
|
|
1154
|
+
@apply rounded-full;
|
|
1155
|
+
}
|
|
1156
|
+
|
|
1157
|
+
.cn-pagination-previous {
|
|
1158
|
+
@apply pl-1.5!;
|
|
1159
|
+
}
|
|
1160
|
+
|
|
1161
|
+
.cn-pagination-next {
|
|
1162
|
+
@apply pr-1.5!;
|
|
1163
|
+
}
|
|
1164
|
+
|
|
1165
|
+
.cn-pagination-ellipsis {
|
|
1166
|
+
@apply size-9 [&_svg:not([class*='size-'])]:size-4;
|
|
1167
|
+
}
|
|
1168
|
+
|
|
1169
|
+
/* MARK: Popover */
|
|
1170
|
+
.cn-popover-content {
|
|
1171
|
+
@apply grid gap-4 rounded-md border bg-popover p-4 text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95;
|
|
1172
|
+
}
|
|
1173
|
+
|
|
1174
|
+
.cn-popover-header {
|
|
1175
|
+
@apply gap-1 text-sm;
|
|
1176
|
+
}
|
|
1177
|
+
|
|
1178
|
+
.cn-popover-title {
|
|
1179
|
+
@apply font-medium;
|
|
1180
|
+
}
|
|
1181
|
+
|
|
1182
|
+
.cn-popover-description {
|
|
1183
|
+
@apply text-muted-foreground;
|
|
1184
|
+
}
|
|
1185
|
+
|
|
1186
|
+
/* MARK: Progress */
|
|
1187
|
+
.cn-progress-track {
|
|
1188
|
+
@apply h-1.5 rounded-full bg-muted;
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
.cn-progress-indicator {
|
|
1192
|
+
@apply bg-primary;
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
.cn-progress-label {
|
|
1196
|
+
@apply text-sm font-medium;
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1199
|
+
.cn-progress-value {
|
|
1200
|
+
@apply ml-auto text-sm text-muted-foreground tabular-nums;
|
|
1201
|
+
}
|
|
1202
|
+
|
|
1203
|
+
/* MARK: RadioGroup */
|
|
1204
|
+
.cn-radio-group {
|
|
1205
|
+
@apply grid gap-3;
|
|
1206
|
+
}
|
|
1207
|
+
|
|
1208
|
+
.cn-radio-group-item {
|
|
1209
|
+
@apply flex size-4 rounded-full border-input text-primary shadow-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:bg-input/30 dark:aria-invalid:ring-destructive/40;
|
|
1210
|
+
}
|
|
1211
|
+
|
|
1212
|
+
.cn-radio-group-indicator {
|
|
1213
|
+
@apply flex size-4 items-center justify-center;
|
|
1214
|
+
}
|
|
1215
|
+
|
|
1216
|
+
.cn-radio-group-indicator-icon {
|
|
1217
|
+
@apply bg-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;
|
|
1218
|
+
}
|
|
1219
|
+
|
|
1220
|
+
/* MARK: Resizable */
|
|
1221
|
+
.cn-resizable-handle-icon {
|
|
1222
|
+
@apply bg-border h-6 w-1 rounded-lg;
|
|
1223
|
+
}
|
|
1224
|
+
|
|
1225
|
+
/* MARK: Select */
|
|
1226
|
+
.cn-select-trigger {
|
|
1227
|
+
@apply gap-2 rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-xs transition-[color,box-shadow] focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-[placeholder]:text-muted-foreground data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-2 dark:bg-input/30 dark:hover:bg-input/50 dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground;
|
|
1228
|
+
}
|
|
1229
|
+
|
|
1230
|
+
.cn-select-trigger-icon {
|
|
1231
|
+
@apply size-4 opacity-50;
|
|
1232
|
+
}
|
|
1233
|
+
|
|
1234
|
+
.cn-select-content {
|
|
1235
|
+
@apply min-w-[8rem] rounded-md border bg-popover text-popover-foreground shadow-md data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1;
|
|
1236
|
+
}
|
|
1237
|
+
|
|
1238
|
+
.cn-select-group {
|
|
1239
|
+
@apply scroll-my-1 p-1;
|
|
1240
|
+
}
|
|
1241
|
+
|
|
1242
|
+
.cn-select-value {
|
|
1243
|
+
@apply flex flex-1 text-left;
|
|
1244
|
+
}
|
|
1245
|
+
|
|
1246
|
+
.cn-select-item-text {
|
|
1247
|
+
@apply flex flex-1 gap-2;
|
|
1248
|
+
}
|
|
1249
|
+
|
|
1250
|
+
.cn-select-scroll-up-button {
|
|
1251
|
+
@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
|
|
1252
|
+
}
|
|
1253
|
+
|
|
1254
|
+
.cn-select-scroll-down-button {
|
|
1255
|
+
@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;
|
|
1256
|
+
}
|
|
1257
|
+
|
|
1258
|
+
.cn-select-viewport {
|
|
1259
|
+
@apply p-1 scroll-my-1;
|
|
1260
|
+
}
|
|
1261
|
+
|
|
1262
|
+
.cn-select-item {
|
|
1263
|
+
@apply gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm focus:bg-accent focus:text-accent-foreground [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-foreground *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;
|
|
1264
|
+
}
|
|
1265
|
+
|
|
1266
|
+
.cn-select-label {
|
|
1267
|
+
@apply px-2 py-1.5 text-xs text-muted-foreground;
|
|
1268
|
+
}
|
|
1269
|
+
|
|
1270
|
+
.cn-select-separator {
|
|
1271
|
+
@apply -mx-1 my-1 h-px bg-border;
|
|
1272
|
+
}
|
|
1273
|
+
|
|
1274
|
+
.cn-select-item-indicator {
|
|
1275
|
+
@apply right-2 size-3.5;
|
|
1276
|
+
}
|
|
1277
|
+
|
|
1278
|
+
/* MARK: Sheet */
|
|
1279
|
+
/* w-full lives here so the sides' w-3/4 can beat it in-layer (split-side
|
|
1280
|
+
* rule) - a latent full-width regression the visual gate cannot see on a
|
|
1281
|
+
* closed dialog. */
|
|
1282
|
+
.cn-sheet-content {
|
|
1283
|
+
@apply m-0 w-full gap-4 bg-background text-foreground shadow-lg transition ease-in-out data-open:animate-in data-open:duration-500 data-closed:animate-out data-closed:duration-300 backdrop:bg-black/50;
|
|
1284
|
+
}
|
|
1285
|
+
|
|
1286
|
+
.cn-sheet-side-top {
|
|
1287
|
+
@apply bottom-auto mb-auto h-auto w-full max-w-none border-b data-open:slide-in-from-top data-closed:slide-out-to-top;
|
|
1288
|
+
}
|
|
1289
|
+
|
|
1290
|
+
.cn-sheet-side-right {
|
|
1291
|
+
@apply ml-auto h-full max-h-none w-3/4 border-l data-open:slide-in-from-right data-closed:slide-out-to-right sm:max-w-sm;
|
|
1292
|
+
}
|
|
1293
|
+
|
|
1294
|
+
.cn-sheet-side-bottom {
|
|
1295
|
+
@apply top-auto mt-auto h-auto w-full max-w-none border-t data-open:slide-in-from-bottom data-closed:slide-out-to-bottom;
|
|
1296
|
+
}
|
|
1297
|
+
|
|
1298
|
+
.cn-sheet-side-left {
|
|
1299
|
+
@apply mr-auto h-full max-h-none w-3/4 border-r data-open:slide-in-from-left data-closed:slide-out-to-left sm:max-w-sm;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
.cn-sheet-header {
|
|
1303
|
+
@apply gap-1.5 p-4;
|
|
1304
|
+
}
|
|
1305
|
+
|
|
1306
|
+
.cn-sheet-title {
|
|
1307
|
+
@apply font-semibold text-foreground;
|
|
1308
|
+
}
|
|
1309
|
+
|
|
1310
|
+
.cn-sheet-description {
|
|
1311
|
+
@apply text-sm text-muted-foreground;
|
|
1312
|
+
}
|
|
1313
|
+
|
|
1314
|
+
.cn-sheet-footer {
|
|
1315
|
+
@apply gap-2 p-4;
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
.cn-sheet-close {
|
|
1319
|
+
@apply absolute top-4 right-4;
|
|
1320
|
+
}
|
|
1321
|
+
|
|
1322
|
+
/* MARK: SensitiveInput */
|
|
1323
|
+
/* The masked MASK OVERLAY is the focusable reveal button (the
|
|
1324
|
+
* group would trip axe nested-interactive around the inert input) - the
|
|
1325
|
+
* bordered group wears the ring when the mask inside holds focus. */
|
|
1326
|
+
.cn-sensitive-input-group:has([data-slot=sensitive-input-mask]:focus-visible) {
|
|
1327
|
+
@apply outline-none border-ring ring-3 ring-ring/50;
|
|
1328
|
+
}
|
|
1329
|
+
|
|
1330
|
+
/* MARK: Sidebar */
|
|
1331
|
+
.cn-sidebar-mobile {
|
|
1332
|
+
@apply bg-sidebar p-0 text-sidebar-foreground shadow-lg transition ease-in-out data-open:animate-in data-open:duration-500 data-closed:animate-out data-closed:duration-300 backdrop:bg-black/50;
|
|
1333
|
+
}
|
|
1334
|
+
|
|
1335
|
+
.cn-sidebar-mobile-left {
|
|
1336
|
+
@apply border-r data-open:slide-in-from-left data-closed:slide-out-to-left;
|
|
1337
|
+
}
|
|
1338
|
+
|
|
1339
|
+
.cn-sidebar-mobile-right {
|
|
1340
|
+
@apply border-l data-open:slide-in-from-right data-closed:slide-out-to-right;
|
|
1341
|
+
}
|
|
1342
|
+
|
|
1343
|
+
.cn-sidebar-inner {
|
|
1344
|
+
@apply bg-sidebar group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1 group-data-[variant=floating]:ring-sidebar-border;
|
|
1345
|
+
}
|
|
1346
|
+
|
|
1347
|
+
.cn-sidebar-header {
|
|
1348
|
+
@apply gap-2 p-2;
|
|
1349
|
+
}
|
|
1350
|
+
|
|
1351
|
+
.cn-sidebar-footer {
|
|
1352
|
+
@apply gap-2 p-2;
|
|
1353
|
+
}
|
|
1354
|
+
|
|
1355
|
+
.cn-sidebar-separator {
|
|
1356
|
+
@apply mx-2 bg-sidebar-border;
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
.cn-sidebar-content {
|
|
1360
|
+
@apply gap-2;
|
|
1361
|
+
}
|
|
1362
|
+
|
|
1363
|
+
.cn-sidebar-gap {
|
|
1364
|
+
@apply transition-[width] duration-200 ease-linear;
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
.cn-sidebar-rail {
|
|
1368
|
+
@apply hover:after:bg-sidebar-border;
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1371
|
+
.cn-sidebar-inset {
|
|
1372
|
+
@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;
|
|
1373
|
+
}
|
|
1374
|
+
|
|
1375
|
+
.cn-sidebar-group {
|
|
1376
|
+
@apply p-2;
|
|
1377
|
+
}
|
|
1378
|
+
|
|
1379
|
+
.cn-sidebar-group-label {
|
|
1380
|
+
@apply h-8 rounded-md px-2 text-xs font-medium text-sidebar-foreground/70 ring-sidebar-ring focus-visible:ring-2 [&>svg]:size-4;
|
|
1381
|
+
}
|
|
1382
|
+
|
|
1383
|
+
.cn-sidebar-group-content {
|
|
1384
|
+
@apply text-sm;
|
|
1385
|
+
}
|
|
1386
|
+
|
|
1387
|
+
.cn-sidebar-menu {
|
|
1388
|
+
@apply gap-1;
|
|
1389
|
+
}
|
|
1390
|
+
|
|
1391
|
+
.cn-sidebar-menu-button {
|
|
1392
|
+
@apply gap-2 rounded-md p-2 text-sm ring-sidebar-ring group-has-data-[sidebar=menu-action]/menu-item:pr-8 hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:font-medium data-active:text-sidebar-accent-foreground [&_svg]:size-4;
|
|
1393
|
+
}
|
|
1394
|
+
|
|
1395
|
+
.cn-sidebar-input {
|
|
1396
|
+
@apply bg-background h-8 w-full shadow-none;
|
|
1397
|
+
}
|
|
1398
|
+
|
|
1399
|
+
.cn-sidebar-group-action {
|
|
1400
|
+
@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
.cn-sidebar-menu-button-variant-default {
|
|
1404
|
+
@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;
|
|
1405
|
+
}
|
|
1406
|
+
|
|
1407
|
+
.cn-sidebar-menu-button-variant-outline {
|
|
1408
|
+
@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)];
|
|
1409
|
+
}
|
|
1410
|
+
|
|
1411
|
+
.cn-sidebar-menu-skeleton {
|
|
1412
|
+
@apply h-8 gap-2 rounded-md px-2;
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1415
|
+
.cn-sidebar-menu-skeleton-icon {
|
|
1416
|
+
@apply size-4 rounded-md;
|
|
1417
|
+
}
|
|
1418
|
+
|
|
1419
|
+
.cn-sidebar-menu-skeleton-text {
|
|
1420
|
+
@apply h-4;
|
|
1421
|
+
}
|
|
1422
|
+
|
|
1423
|
+
.cn-sidebar-menu-button-size-default {
|
|
1424
|
+
@apply h-8 text-sm;
|
|
1425
|
+
}
|
|
1426
|
+
|
|
1427
|
+
.cn-sidebar-menu-button-size-sm {
|
|
1428
|
+
@apply h-7 text-xs;
|
|
1429
|
+
}
|
|
1430
|
+
|
|
1431
|
+
.cn-sidebar-menu-button-size-lg {
|
|
1432
|
+
@apply h-12 text-sm group-data-[collapsible=icon]:p-0!;
|
|
1433
|
+
}
|
|
1434
|
+
|
|
1435
|
+
.cn-sidebar-menu-action {
|
|
1436
|
+
@apply w-5 rounded-md p-0 text-sidebar-foreground ring-sidebar-ring peer-hover/menu-button:text-sidebar-accent-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 [&>svg]:size-4;
|
|
1437
|
+
}
|
|
1438
|
+
|
|
1439
|
+
.cn-sidebar-menu-badge {
|
|
1440
|
+
@apply h-5 min-w-5 rounded-md px-1 text-xs font-medium text-sidebar-foreground tabular-nums peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground;
|
|
1441
|
+
}
|
|
1442
|
+
|
|
1443
|
+
.cn-sidebar-menu-sub {
|
|
1444
|
+
@apply gap-1 border-l border-sidebar-border px-2.5 py-0.5;
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
.cn-sidebar-menu-sub-button {
|
|
1448
|
+
@apply h-7 gap-2 rounded-md px-2 text-sm text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground [&>svg]:size-4;
|
|
1449
|
+
}
|
|
1450
|
+
|
|
1451
|
+
/* MARK: Skeleton */
|
|
1452
|
+
.cn-skeleton {
|
|
1453
|
+
@apply rounded-md bg-muted;
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1456
|
+
/* MARK: Slider */
|
|
1457
|
+
.cn-slider {
|
|
1458
|
+
@apply data-[orientation=vertical]:min-h-44;
|
|
1459
|
+
}
|
|
1460
|
+
|
|
1461
|
+
.cn-slider-track {
|
|
1462
|
+
@apply rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5;
|
|
1463
|
+
}
|
|
1464
|
+
|
|
1465
|
+
.cn-slider-range {
|
|
1466
|
+
@apply bg-primary;
|
|
1467
|
+
}
|
|
1468
|
+
|
|
1469
|
+
.cn-slider-thumb {
|
|
1470
|
+
@apply size-4 rounded-full border border-primary bg-white shadow-sm ring-ring/50 transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;
|
|
1471
|
+
}
|
|
1472
|
+
|
|
1473
|
+
/* MARK: Switch */
|
|
1474
|
+
.cn-switch {
|
|
1475
|
+
@apply shrink-0 rounded-full border border-transparent shadow-xs focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 data-[size=default]:h-[1.15rem] data-[size=default]:w-8 data-[size=sm]:h-3.5 data-[size=sm]:w-6 data-checked:bg-primary data-unchecked:bg-input dark:data-unchecked:bg-input/80;
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
.cn-switch-thumb {
|
|
1479
|
+
@apply rounded-full bg-background group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 data-checked:translate-x-[calc(100%-2px)] data-unchecked:translate-x-0 rtl:data-checked:-translate-x-[calc(100%-2px)] dark:data-checked:bg-primary-foreground dark:data-unchecked:bg-foreground;
|
|
1480
|
+
}
|
|
1481
|
+
|
|
1482
|
+
/* MARK: Table */
|
|
1483
|
+
.cn-table {
|
|
1484
|
+
@apply w-full caption-bottom text-sm;
|
|
1485
|
+
}
|
|
1486
|
+
|
|
1487
|
+
.cn-table-container {
|
|
1488
|
+
@apply relative w-full overflow-x-auto;
|
|
1489
|
+
}
|
|
1490
|
+
|
|
1491
|
+
.cn-table-header {
|
|
1492
|
+
@apply [&_tr]:border-b;
|
|
1493
|
+
}
|
|
1494
|
+
|
|
1495
|
+
.cn-table-body {
|
|
1496
|
+
@apply [&_tr:last-child]:border-0;
|
|
1497
|
+
}
|
|
1498
|
+
|
|
1499
|
+
.cn-table-footer {
|
|
1500
|
+
@apply border-t bg-muted/50 font-medium [&>tr]:last:border-b-0;
|
|
1501
|
+
}
|
|
1502
|
+
|
|
1503
|
+
.cn-table-row {
|
|
1504
|
+
@apply border-b hover:bg-muted/50 has-aria-expanded:bg-muted/50 data-selected:bg-muted;
|
|
1505
|
+
}
|
|
1506
|
+
|
|
1507
|
+
.cn-table-head {
|
|
1508
|
+
@apply h-10 px-2 text-left align-middle font-medium whitespace-nowrap text-foreground [&:has([role=checkbox])]:pr-0;
|
|
1509
|
+
}
|
|
1510
|
+
|
|
1511
|
+
.cn-table-cell {
|
|
1512
|
+
@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;
|
|
1513
|
+
}
|
|
1514
|
+
|
|
1515
|
+
.cn-table-caption {
|
|
1516
|
+
@apply mt-4 text-sm text-muted-foreground;
|
|
1517
|
+
}
|
|
1518
|
+
|
|
1519
|
+
/* MARK: Tabs */
|
|
1520
|
+
.cn-tabs {
|
|
1521
|
+
@apply gap-2;
|
|
1522
|
+
}
|
|
1523
|
+
|
|
1524
|
+
.cn-tabs-list {
|
|
1525
|
+
@apply rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none;
|
|
1526
|
+
}
|
|
1527
|
+
|
|
1528
|
+
.cn-tabs-list-variant-default {
|
|
1529
|
+
@apply bg-muted;
|
|
1530
|
+
}
|
|
1531
|
+
|
|
1532
|
+
.cn-tabs-list-variant-line {
|
|
1533
|
+
@apply gap-1 bg-transparent;
|
|
1534
|
+
}
|
|
1535
|
+
|
|
1536
|
+
/* The whole text-color cluster lives here (split-side rule): the base
|
|
1537
|
+
* dims (text-foreground/60, dark:text-muted-foreground) must lose to the
|
|
1538
|
+
* data-active colors, which they only can in-layer. */
|
|
1539
|
+
.cn-tabs-trigger {
|
|
1540
|
+
@apply gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium text-foreground/60 hover:text-foreground has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 dark:text-muted-foreground dark:hover:text-foreground group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4 group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent data-active:bg-background data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 dark:data-active:text-foreground after:bg-foreground group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100;
|
|
1541
|
+
}
|
|
1542
|
+
|
|
1543
|
+
.cn-tabs-content {
|
|
1544
|
+
@apply text-sm;
|
|
1545
|
+
}
|
|
1546
|
+
|
|
1547
|
+
/* MARK: Textarea */
|
|
1548
|
+
.cn-textarea {
|
|
1549
|
+
@apply rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 md:text-sm dark:bg-input/30 dark:aria-invalid:ring-destructive/40;
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
/* MARK: Toast */
|
|
1553
|
+
.cn-toast {
|
|
1554
|
+
@apply gap-3 rounded-md border bg-popover p-4 text-popover-foreground shadow-lg data-open:animate-in data-open:fade-in-0 data-open:slide-in-from-bottom-2 group-data-[position^=top]/toaster:data-open:slide-in-from-top-2 data-closed:animate-out data-closed:fade-out-80 data-closed:slide-out-to-bottom-2 group-data-[position^=top]/toaster:data-closed:slide-out-to-top-2;
|
|
1555
|
+
}
|
|
1556
|
+
|
|
1557
|
+
.cn-toast-variant-success {
|
|
1558
|
+
@apply [&_[data-slot=toast-icon]]:text-primary;
|
|
1559
|
+
}
|
|
1560
|
+
|
|
1561
|
+
.cn-toast-variant-info {
|
|
1562
|
+
@apply [&_[data-slot=toast-icon]]:text-muted-foreground;
|
|
1563
|
+
}
|
|
1564
|
+
|
|
1565
|
+
.cn-toast-variant-warning {
|
|
1566
|
+
@apply [&_[data-slot=toast-icon]]:text-primary;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.cn-toast-variant-destructive {
|
|
1570
|
+
@apply text-destructive [&_[data-slot=toast-icon]]:text-destructive;
|
|
1571
|
+
}
|
|
1572
|
+
|
|
1573
|
+
.cn-toast-icon {
|
|
1574
|
+
@apply mt-0.5 size-4 [&_svg]:size-4;
|
|
1575
|
+
}
|
|
1576
|
+
|
|
1577
|
+
.cn-toast-body {
|
|
1578
|
+
@apply gap-1;
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
.cn-toast-title {
|
|
1582
|
+
@apply text-sm font-medium;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
.cn-toast-description {
|
|
1586
|
+
@apply text-sm text-muted-foreground;
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
/* MARK: Toaster */
|
|
1590
|
+
/* max-w-full lives here WITH its sm: cap (the split-side rule extends to
|
|
1591
|
+
* responsive pairs: a bare utility would beat the themed breakpoint
|
|
1592
|
+
* override from the utilities layer at every width). */
|
|
1593
|
+
.cn-toaster {
|
|
1594
|
+
@apply max-w-full gap-2 p-4 sm:max-w-[420px];
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1597
|
+
/* MARK: Toggle */
|
|
1598
|
+
/* hover:bg-muted lives HERE (not inline, where upstream keeps it): the
|
|
1599
|
+
* outline variant's hover:bg-accent must beat it, and it only can when
|
|
1600
|
+
* both sides share the base layer (in-layer order = the merger's old
|
|
1601
|
+
* last-wins). An inline utility would win the cascade unconditionally. */
|
|
1602
|
+
.cn-toggle {
|
|
1603
|
+
@apply gap-2 rounded-md text-sm font-medium transition-[color,box-shadow] hover:bg-muted hover:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 data-pressed:bg-accent data-pressed:text-accent-foreground dark:aria-invalid:ring-destructive/40 [&_svg:not([class*='size-'])]:size-4;
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
.cn-toggle-variant-default {
|
|
1607
|
+
@apply bg-transparent;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
.cn-toggle-variant-outline {
|
|
1611
|
+
@apply border border-input bg-transparent shadow-xs hover:bg-accent hover:text-accent-foreground;
|
|
1612
|
+
}
|
|
1613
|
+
|
|
1614
|
+
.cn-toggle-size-default {
|
|
1615
|
+
@apply h-9 min-w-9 px-2;
|
|
1616
|
+
}
|
|
1617
|
+
|
|
1618
|
+
.cn-toggle-size-sm {
|
|
1619
|
+
@apply h-8 min-w-8 px-1.5;
|
|
1620
|
+
}
|
|
1621
|
+
|
|
1622
|
+
.cn-toggle-size-lg {
|
|
1623
|
+
@apply h-10 min-w-10 px-2.5;
|
|
1624
|
+
}
|
|
1625
|
+
|
|
1626
|
+
/* MARK: ToggleGroup */
|
|
1627
|
+
.cn-toggle-group {
|
|
1628
|
+
@apply rounded-md data-[spacing=default]:data-[variant=outline]:shadow-xs;
|
|
1629
|
+
}
|
|
1630
|
+
|
|
1631
|
+
/* Segmented edge radii live theme-side (side-move): each theme
|
|
1632
|
+
* rounds spacing=0 segments in its own radius language. */
|
|
1633
|
+
.cn-toggle-group-item {
|
|
1634
|
+
@apply data-[spacing=0]:px-3 data-[spacing=0]:rounded-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md;
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
/* MARK: Tooltip */
|
|
1638
|
+
.cn-tooltip-content {
|
|
1639
|
+
@apply animate-in rounded-md px-3 py-1.5 text-xs text-balance fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95;
|
|
1640
|
+
}
|
|
1641
|
+
|
|
1642
|
+
.cn-tooltip-arrow {
|
|
1643
|
+
@apply size-2.5 rounded-[2px];
|
|
1644
|
+
}
|
|
1645
|
+
|
|
1646
|
+
/* MARK: Consumer utilities
|
|
1647
|
+
* Standalone cn-* classes templates and consumers apply directly (they
|
|
1648
|
+
* ride the css:verify_theme allowlist - no dictionary emits cn-rtl-flip).
|
|
1649
|
+
* cn-font-heading: upstream globals (@apply font-heading); poetry inlines
|
|
1650
|
+
* the var with a sans fallback so it is a no-op until a theme defines
|
|
1651
|
+
* --font-heading. cn-rtl-flip: upstream ships the NAME with no rule
|
|
1652
|
+
* anywhere (dead in source); poetry authors the intended RTL mirror. */
|
|
1653
|
+
.cn-font-heading {
|
|
1654
|
+
font-family: var(--font-heading, var(--font-sans));
|
|
1655
|
+
}
|
|
1656
|
+
|
|
1657
|
+
.cn-rtl-flip {
|
|
1658
|
+
@apply rtl:-scale-x-100;
|
|
1659
|
+
}
|
|
1660
|
+
|
|
1661
|
+
/* MARK: Cross-component overrides
|
|
1662
|
+
* Rules that restyle ANOTHER component's cn surface must come after every
|
|
1663
|
+
* rule they override - in-layer order is what lets an override win, so
|
|
1664
|
+
* alphabetical placement would silently lose (cn-input-group-textarea vs
|
|
1665
|
+
* the later cn-textarea). Keep every such rule in this closing section. */
|
|
1666
|
+
.cn-input-group-input {
|
|
1667
|
+
@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
|
|
1668
|
+
}
|
|
1669
|
+
|
|
1670
|
+
.cn-input-group-textarea {
|
|
1671
|
+
@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;
|
|
1672
|
+
}
|
|
1673
|
+
|
|
1674
|
+
.cn-input-group-button {
|
|
1675
|
+
@apply gap-2 text-sm;
|
|
1676
|
+
}
|
|
1677
|
+
|
|
1678
|
+
.cn-input-group-button-size-xs {
|
|
1679
|
+
@apply h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5;
|
|
1680
|
+
}
|
|
1681
|
+
|
|
1682
|
+
/* poetry-authored: upstream themes this hook only in lyra/mira (gap-1
|
|
1683
|
+
both); the class must compile in every theme (css:verify_compiled). */
|
|
1684
|
+
.cn-input-group-button-size-sm {
|
|
1685
|
+
@apply gap-1;
|
|
1686
|
+
}
|
|
1687
|
+
|
|
1688
|
+
.cn-input-group-button-size-icon-xs {
|
|
1689
|
+
@apply size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0;
|
|
1690
|
+
}
|
|
1691
|
+
|
|
1692
|
+
.cn-input-group-button-size-icon-sm {
|
|
1693
|
+
@apply size-8 p-0 has-[>svg]:p-0;
|
|
1694
|
+
}
|
|
1695
|
+
|
|
1696
|
+
/* CommandDialog re-tunes the Dialog panel and the palette inside it: the
|
|
1697
|
+
* classic source's h-12 input row, px-2/py-3 rows and 20px icons, rewritten
|
|
1698
|
+
* onto poetry's data-slots (p-0 must beat cn-dialog-content's p-6). THIS
|
|
1699
|
+
* theme's source carries that chain; the styled ports do not, so it lives
|
|
1700
|
+
* here and not in the dictionary. */
|
|
1701
|
+
.cn-command-dialog {
|
|
1702
|
+
@apply overflow-hidden p-0 **:data-[slot=command-input-wrapper]:h-12 [&_[data-slot=command-input]]:h-12 [&_[data-slot=command-group-heading]]:px-2 [&_[data-slot=command-group]]:px-2 [&_[data-slot=command-item]]:px-2 [&_[data-slot=command-item]]:py-3 [&_[data-slot=command-item]_svg]:h-5 [&_[data-slot=command-item]_svg]:w-5;
|
|
1703
|
+
}
|
|
1704
|
+
|
|
1705
|
+
/* MARK: Stat */
|
|
1706
|
+
.cn-stat-delta-positive {
|
|
1707
|
+
@apply text-[oklch(from_var(--success)_calc(l*0.85)_c_h)] dark:text-success;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
/* MARK: Questionnaire */
|
|
1711
|
+
.cn-questionnaire {
|
|
1712
|
+
@apply gap-4;
|
|
1713
|
+
}
|
|
1714
|
+
|
|
1715
|
+
.cn-questionnaire-progress {
|
|
1716
|
+
@apply text-xs;
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
.cn-questionnaire-item {
|
|
1720
|
+
@apply flex flex-col gap-4;
|
|
1721
|
+
}
|
|
1722
|
+
|
|
1723
|
+
.cn-questionnaire-title {
|
|
1724
|
+
@apply text-base leading-snug font-medium [&:not(:has(~[data-slot=questionnaire-description]))]:mb-4;
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
.cn-questionnaire-description {
|
|
1728
|
+
@apply text-muted-foreground text-sm;
|
|
1729
|
+
}
|
|
1730
|
+
|
|
1731
|
+
.cn-questionnaire-choices {
|
|
1732
|
+
@apply gap-2;
|
|
1733
|
+
}
|
|
1734
|
+
|
|
1735
|
+
.cn-questionnaire-choice {
|
|
1736
|
+
@apply border-input dark:bg-input/20 hover:bg-muted/50 data-checked:border-primary/40 data-checked:bg-muted dark:data-checked:bg-muted in-data-invalid:border-destructive has-[>input:focus-visible]:border-ring has-[>input:focus-visible]:ring-ring/50 gap-2.5 rounded-md border bg-transparent px-3 py-2.5 text-sm has-[>input:focus-visible]:ring-[3px];
|
|
1737
|
+
}
|
|
1738
|
+
|
|
1739
|
+
.cn-questionnaire-choice-indicator {
|
|
1740
|
+
@apply border-input dark:bg-input/30 group-data-checked/questionnaire-choice:bg-primary dark:group-data-checked/questionnaire-choice:bg-primary group-data-checked/questionnaire-choice:text-primary-foreground group-data-checked/questionnaire-choice:border-primary size-4 translate-y-[--spacing(0.45)] group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 rounded-[4px];
|
|
1741
|
+
}
|
|
1742
|
+
|
|
1743
|
+
.cn-questionnaire-choice-indicator-dot {
|
|
1744
|
+
@apply bg-primary-foreground size-2;
|
|
1745
|
+
}
|
|
1746
|
+
|
|
1747
|
+
.cn-questionnaire-choice-indicator-check {
|
|
1748
|
+
@apply size-3.5;
|
|
1749
|
+
}
|
|
1750
|
+
|
|
1751
|
+
.cn-questionnaire-choice-content {
|
|
1752
|
+
@apply gap-0.5;
|
|
1753
|
+
}
|
|
1754
|
+
|
|
1755
|
+
.cn-questionnaire-choice-description {
|
|
1756
|
+
@apply text-muted-foreground;
|
|
1757
|
+
}
|
|
1758
|
+
|
|
1759
|
+
.cn-questionnaire-shortcut {
|
|
1760
|
+
@apply border-input bg-background text-muted-foreground size-5 translate-y-[--spacing(0.45)] group-has-data-[slot=questionnaire-choice-description]/questionnaire-choice:translate-y-0.5 items-center justify-center rounded-md border font-mono text-[0.625rem] font-medium leading-none;
|
|
1761
|
+
}
|
|
1762
|
+
|
|
1763
|
+
.cn-questionnaire-input-wrapper {
|
|
1764
|
+
@apply w-full;
|
|
1765
|
+
}
|
|
1766
|
+
|
|
1767
|
+
.cn-questionnaire-input {
|
|
1768
|
+
@apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-md border bg-transparent px-2.5 py-1 text-base focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm;
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
.cn-questionnaire-error {
|
|
1772
|
+
@apply mt-2 text-sm;
|
|
1773
|
+
}
|
|
1774
|
+
|
|
1775
|
+
.cn-questionnaire-actions {
|
|
1776
|
+
@apply gap-2 sm:min-h-8;
|
|
1777
|
+
}
|
|
1778
|
+
|
|
1779
|
+
/* MARK: WebMCP agent focus (declarative tools) - the browser marks the
|
|
1780
|
+
form an agent is filling and its submit; :where() keeps the rule
|
|
1781
|
+
forgiving in browsers that lack the pseudo-classes. */
|
|
1782
|
+
:where(form:tool-form-active) {
|
|
1783
|
+
@apply rounded-lg outline-2 outline-dashed outline-offset-4 outline-ring/60;
|
|
1784
|
+
}
|
|
1785
|
+
|
|
1786
|
+
:where(:tool-submit-active) {
|
|
1787
|
+
@apply border-ring ring-3 ring-ring/50;
|
|
1788
|
+
}
|
|
1789
|
+
|
|
1790
|
+
/* MARK: Menu translucent (shared, LAST - wins the content bg cascade) */
|
|
1791
|
+
.cn-menu-translucent {
|
|
1792
|
+
@apply animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!;
|
|
1793
|
+
}
|