@codenhub/styles 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/NOTICE +18 -16
- package/README.es.md +62 -0
- package/README.md +28 -22
- package/README.pt-BR.md +62 -0
- package/dist/aesthetics/chunky-tile.css +1 -1
- package/dist/aesthetics/cyber.css +1 -1
- package/dist/aesthetics/glass.css +1 -1
- package/dist/aesthetics/index.css +2 -2
- package/dist/aesthetics/neobrutalism.css +1 -1
- package/dist/aesthetics/pixel.css +1 -1
- package/dist/aesthetics/sketch.css +1 -1
- package/dist/cli.js +189 -0
- package/dist/components.css +2 -2
- package/dist/index.css +2 -2
- package/dist/index.d.ts +1 -0
- package/dist/native.css +2 -2
- package/dist/palette.css +1 -1
- package/dist/theme.css +2 -2
- package/docs/accessibility.md +108 -60
- package/docs/changelog/0.1.1.md +1 -0
- package/docs/changelog/0.2.0.md +1 -0
- package/docs/changelog/0.3.0.md +1 -0
- package/docs/changelog/0.4.0.md +1 -0
- package/docs/changelog/0.5.0.md +8 -3
- package/docs/changelog/0.6.0.md +2 -1
- package/docs/changelog/0.7.0.md +50 -0
- package/docs/changelog/0.8.0.md +70 -0
- package/docs/changelog/index.md +2 -0
- package/docs/concepts.md +188 -46
- package/docs/es/accessibility.md +169 -0
- package/docs/es/concepts.md +212 -0
- package/docs/es/index.md +105 -0
- package/docs/es/integrating/astro.md +35 -0
- package/docs/es/integrating/index.md +75 -0
- package/docs/es/integrating/nextjs.md +67 -0
- package/docs/es/integrating/svelte.md +45 -0
- package/docs/es/integrating/tailwind.md +148 -0
- package/docs/es/integrating/vue.md +31 -0
- package/docs/es/integrating/without-a-bundler.md +238 -0
- package/docs/es/setup.md +188 -0
- package/docs/es/usage/aesthetics.md +282 -0
- package/docs/es/usage/buttons.md +135 -0
- package/docs/es/usage/composing.md +168 -0
- package/docs/es/usage/content-and-layout.md +219 -0
- package/docs/es/usage/customizing.md +304 -0
- package/docs/es/usage/feedback.md +157 -0
- package/docs/es/usage/forms.md +256 -0
- package/docs/es/usage/index.md +33 -0
- package/docs/es/usage/presets.md +92 -0
- package/docs/es/usage/solo.md +86 -0
- package/docs/es/usage/theming.md +309 -0
- package/docs/es/usage/tooltips.md +127 -0
- package/docs/index.md +86 -26
- package/docs/integrating/astro.md +3 -4
- package/docs/integrating/index.md +46 -13
- package/docs/integrating/nextjs.md +3 -4
- package/docs/integrating/svelte.md +5 -4
- package/docs/integrating/tailwind.md +89 -6
- package/docs/integrating/vue.md +3 -4
- package/docs/integrating/without-a-bundler.md +237 -0
- package/docs/pt-BR/accessibility.md +169 -0
- package/docs/pt-BR/concepts.md +212 -0
- package/docs/pt-BR/index.md +105 -0
- package/docs/pt-BR/integrating/astro.md +35 -0
- package/docs/pt-BR/integrating/index.md +75 -0
- package/docs/pt-BR/integrating/nextjs.md +67 -0
- package/docs/pt-BR/integrating/svelte.md +45 -0
- package/docs/pt-BR/integrating/tailwind.md +148 -0
- package/docs/pt-BR/integrating/vue.md +31 -0
- package/docs/pt-BR/integrating/without-a-bundler.md +238 -0
- package/docs/pt-BR/setup.md +188 -0
- package/docs/pt-BR/usage/aesthetics.md +282 -0
- package/docs/pt-BR/usage/buttons.md +135 -0
- package/docs/pt-BR/usage/composing.md +168 -0
- package/docs/pt-BR/usage/content-and-layout.md +219 -0
- package/docs/pt-BR/usage/customizing.md +304 -0
- package/docs/pt-BR/usage/feedback.md +157 -0
- package/docs/pt-BR/usage/forms.md +256 -0
- package/docs/pt-BR/usage/index.md +33 -0
- package/docs/pt-BR/usage/presets.md +92 -0
- package/docs/pt-BR/usage/solo.md +86 -0
- package/docs/pt-BR/usage/theming.md +309 -0
- package/docs/pt-BR/usage/tooltips.md +127 -0
- package/docs/setup.md +142 -91
- package/docs/usage/aesthetics.md +89 -73
- package/docs/usage/buttons.md +112 -40
- package/docs/usage/composing.md +109 -92
- package/docs/usage/content-and-layout.md +160 -125
- package/docs/usage/customizing.md +117 -41
- package/docs/usage/feedback.md +138 -71
- package/docs/usage/forms.md +201 -107
- package/docs/usage/index.md +22 -14
- package/docs/usage/presets.md +91 -0
- package/docs/usage/solo.md +85 -0
- package/docs/usage/theming.md +273 -118
- package/docs/usage/tooltips.md +90 -49
- package/llms-full.txt +2820 -1298
- package/llms.txt +24 -22
- package/package.json +134 -91
- package/{dist/tw → tw}/aesthetics/chunky-tile.css +107 -29
- package/{dist/tw → tw}/aesthetics/cyber.css +88 -40
- package/{dist/tw → tw}/aesthetics/glass.css +257 -61
- package/{dist/tw → tw}/aesthetics/neobrutalism.css +113 -20
- package/{dist/tw → tw}/aesthetics/pixel.css +93 -8
- package/tw/aesthetics/sketch.css +417 -0
- package/{dist/tw → tw}/box.css +105 -9
- package/tw/components/button.css +11 -0
- package/tw/components/button.rules.css +187 -0
- package/tw/components/feedback.css +11 -0
- package/{dist/tw/components/feedback.css → tw/components/feedback.rules.css} +136 -32
- package/tw/components/form.css +11 -0
- package/{dist/tw/components/form.css → tw/components/form.rules.css} +577 -125
- package/tw/components/index.css +16 -0
- package/tw/components/rules.css +41 -0
- package/tw/components/surface.css +11 -0
- package/tw/components/surface.rules.css +222 -0
- package/tw/components/tooltip.css +11 -0
- package/{dist/tw/components/tooltip.css → tw/components/tooltip.rules.css} +43 -27
- package/{dist/tw → tw}/corner.css +18 -12
- package/{dist/tw → tw}/elevation.css +23 -17
- package/{dist/tw → tw}/index.css +12 -10
- package/tw/index.d.ts +1 -0
- package/tw/intent.css +312 -0
- package/tw/modifiers.css +127 -0
- package/tw/native.css +320 -0
- package/tw/presentation.css +139 -0
- package/tw/reset.css +10 -0
- package/{dist/tw/reset.css → tw/reset.rules.css} +21 -22
- package/tw/size.css +34 -0
- package/tw/surface.css +9 -0
- package/tw/surface.rules.css +212 -0
- package/{dist/tw → tw}/theme.css +121 -45
- package/tw/typography.css +8 -0
- package/{dist/tw/typography.css → tw/typography.rules.css} +0 -3
- package/{dist/tw → tw}/utilities/content.css +212 -50
- package/tw/utilities/index.css +11 -0
- package/tw/utilities/layout.css +208 -0
- package/tw/utilities/rules.css +8 -0
- package/dist/tw/aesthetics/sketch.css +0 -333
- package/dist/tw/components/button.css +0 -139
- package/dist/tw/components/index.css +0 -36
- package/dist/tw/components/loader.css +0 -116
- package/dist/tw/components/surface.css +0 -175
- package/dist/tw/intent.css +0 -228
- package/dist/tw/native.css +0 -203
- package/dist/tw/palette.css +0 -460
- package/dist/tw/presentation.css +0 -68
- package/dist/tw/surface.css +0 -61
- package/dist/tw/utilities/index.css +0 -6
- package/dist/tw/utilities/layout.css +0 -130
- /package/{dist/tw → tw}/aesthetics/index.css +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
@layer theme,base;@layer components{.sketch{--ui-corner:initial;--ui-corner-surface:initial;--ui-corner-tl:initial;--ui-corner-tr:initial;--ui-corner-br:initial;--ui-corner-bl:initial;--ui-radius:var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px);--ui-radius-surface:var(--sketch-radius-surface,80px 4px 75px 5px / 3px 70px 4px 80px);--ui-radius-pill:var(--sketch-radius-pill,20px 22px 21px 19px / 20px 22px 21px 19px);--ui-radius-tight:11px 1px 7px 2px / 2px 7px 1px 11px;--ui-corner-shape:round;--ui-ink:light-dark(var(--color-neutral-950),var(--color-neutral-50));--ui-control-ink:var(--color-control-border);--ui-rule-ink:initial;--ui-border-width:1px;--ui-border-max:100px;--ui-line-style:solid;--ui-rule-style:initial;--ui-shadow-ink:0%;--elevation-color:light-dark(#0f172a14,#0000008c);--ui-shadow-x:2px;--ui-shadow-y:2px;--ui-shadow-blur:0px;--ui-shadow-spread:0px;--ui-shadow-inset: ;--ui-shadow-edge:initial;--ui-halo-blur:initial;--ui-halo-spread:initial;--ui-halo-ink:initial;--ui-focus-inset:initial;--ui-active-shadow-x:initial;--ui-active-shadow-y:initial;--ui-active-transform:scale(.97);--ui-active-translate-x:initial;--ui-active-translate-y:initial;--ui-hover-transform:none;--ui-clip:none;--ui-clip-tight:none;--ui-backdrop:none;--ui-surface-image:initial;--ui-surface-ground:initial;--ui-surface-shadow:initial;--ui-bg-alpha:1;--ui-label-weight:initial;--ui-label-tracking:initial;--ui-label-case:initial;--ui-label-shadow:initial;font-family:var(--font-sketch,cursive)}@media (prefers-reduced-motion:reduce){.sketch{--ui-active-transform:none}}.sketch-rounded{--ui-radius:var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px);--ui-radius-surface:var(--sketch-radius-surface-rounded,38px 16px 36px 17px / 16px 34px 17px 32px);--ui-radius-pill:var(--sketch-radius-pill,24px 16px 23px 17px / 17px 21px 16px 20px);--ui-radius-tight:9px 3px 8px 4px / 4px 8px 3px 7px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+2){--ui-radius:var(--sketch-radius,18px 240px 15px 255px / 240px 15px 255px 18px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+3){--ui-radius:var(--sketch-radius,245px 220px 15px 18px / 18px 15px 245px 235px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n){--ui-radius:var(--sketch-radius,18px 250px 225px 15px / 245px 15px 18px 235px)}.field:nth-child(4n+1) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px)}.field:nth-child(4n+2) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius,18px 240px 15px 255px / 240px 15px 255px 18px)}.field:nth-child(4n+3) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius,245px 220px 15px 18px / 18px 15px 245px 235px)}.field:nth-child(4n) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius,18px 250px 225px 15px / 245px 15px 18px 235px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n+2){--ui-radius-surface:var(--sketch-radius-surface,4px 75px 5px 80px / 75px 3px 80px 4px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n+3){--ui-radius-surface:var(--sketch-radius-surface,75px 70px 4px 5px / 4px 3px 75px 70px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n){--ui-radius-surface:var(--sketch-radius-surface,5px 80px 75px 4px / 75px 4px 5px 70px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+2){--ui-radius-tight:2px 8px 1px 10px / 8px 2px 10px 1px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+3){--ui-radius-tight:8px 2px 10px 1px / 1px 9px 2px 8px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):not(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n){--ui-radius-tight:1px 10px 2px 7px / 9px 1px 8px 2px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+2){--ui-radius:var(--sketch-radius-rounded,11px 25px 12px 24px / 23px 11px 22px 12px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+3){--ui-radius:var(--sketch-radius-rounded,24px 12px 26px 10px / 11px 23px 12px 22px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n){--ui-radius:var(--sketch-radius-rounded,12px 24px 10px 25px / 22px 12px 23px 11px)}.field:nth-child(4n+1) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px)}.field:nth-child(4n+2) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius-rounded,11px 25px 12px 24px / 23px 11px 22px 12px)}.field:nth-child(4n+3) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius-rounded,24px 12px 26px 10px / 11px 23px 12px 22px)}.field:nth-child(4n) :is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.ipt,.textarea,.select,.input-group){--ui-radius:var(--sketch-radius-rounded,12px 24px 10px 25px / 22px 12px 23px 11px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n+2){--ui-radius-surface:var(--sketch-radius-surface-rounded,17px 36px 18px 34px / 33px 16px 32px 17px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n+3){--ui-radius-surface:var(--sketch-radius-surface-rounded,35px 18px 38px 15px / 17px 32px 16px 34px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.card,.panel,.alert,.data-table):nth-child(4n){--ui-radius-surface:var(--sketch-radius-surface-rounded,18px 35px 16px 37px / 31px 17px 34px 16px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+2){--ui-radius-tight:4px 8px 3px 9px / 8px 3px 8px 4px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+3){--ui-radius-tight:8px 4px 9px 3px / 3px 9px 4px 8px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch-rounded,.sketch-rounded *):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n){--ui-radius-tight:3px 9px 4px 8px / 9px 4px 8px 3px}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)).btn.pill{--ui-radius-pill:var(--sketch-radius-pill,24px 16px 23px 17px / 17px 21px 16px 20px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)).btn.pill:nth-child(4n+2){--ui-radius-pill:var(--sketch-radius-pill,17px 23px 16px 24px / 21px 16px 20px 17px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)).btn.pill:nth-child(4n+3){--ui-radius-pill:var(--sketch-radius-pill,23px 17px 24px 16px / 16px 20px 17px 21px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)).btn.pill:nth-child(4n){--ui-radius-pill:var(--sketch-radius-pill,16px 24px 17px 23px / 20px 17px 21px 16px)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.badge,.progress,.switch){--ui-radius-pill:var(--ui-radius-tight)}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.radio,.tooltip-icon){--ui-radius-pill:48% 52% 46% 54% / 53% 46% 54% 47%}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *).checkbox{--ui-line-style:dashed}:is(.sketch,.sketch-rounded,:is(.sketch,.sketch-rounded) :not(:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber),:is(.sketch,.sketch-rounded) :is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber) *)):is(.sketch,.sketch *):is(.divider,.data-table){--ui-rule-style:dashed}}@layer utilities;.sketch-solo{--_sketch-ink:light-dark(var(--color-neutral-950,oklch(14.5% 0 0)),var(--color-neutral-50,oklch(98.5% 0 0)));border:1px solid var(--_sketch-ink);border-radius:var(--sketch-radius-surface,80px 4px 75px 5px / 3px 70px 4px 80px);font-family:var(--font-sketch,cursive);box-shadow:2px 2px light-dark(#0f172a14,#0000008c)}.sketch-solo:is(button,a[href],[role=button],summary,input[type=button],input[type=submit],input[type=reset]){border-radius:var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px)}.sketch-solo.sketch-rounded{border-radius:var(--sketch-radius-surface-rounded,38px 16px 36px 17px / 16px 34px 17px 32px)}.sketch-solo.sketch-rounded:is(button,a[href],[role=button],summary,input[type=button],input[type=submit],input[type=reset]){border-radius:var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px)}@media (forced-colors:active){.sketch-solo{border-style:solid}}
|
|
1
|
+
@layer theme,base;@layer components{.sketch{--ui-corner:initial;--ui-corner-surface:initial;--ui-corner-tl:initial;--ui-corner-tr:initial;--ui-corner-br:initial;--ui-corner-bl:initial;--ui-radius:var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px);--ui-radius-surface:var(--sketch-radius-surface,80px 4px 75px 5px / 3px 70px 4px 80px);--ui-radius-pill:var(--sketch-radius-pill,20px 22px 21px 19px / 20px 22px 21px 19px);--ui-radius-tight:11px 1px 7px 2px / 2px 7px 1px 11px;--ui-corner-shape:round;--ui-ink:light-dark(var(--color-neutral-950),var(--color-neutral-50));--ui-control-ink:var(--color-control-border);--ui-rule-ink:initial;--ui-border-width:1px;--ui-border-max:100px;--ui-line-style:solid;--ui-rule-style:initial;--ui-shadow-ink:0%;--elevation-color:light-dark(#0f172a14,#0000008c);--ui-shadow-x:2px;--ui-shadow-y:2px;--ui-shadow-blur:0px;--ui-shadow-spread:0px;--ui-shadow-inset: ;--ui-shadow-edge:initial;--ui-halo-blur:initial;--ui-halo-spread:initial;--ui-halo-ink:initial;--ui-focus-inset:initial;--ui-active-shadow-x:initial;--ui-active-shadow-y:initial;--ui-active-transform:scale(.97);--ui-active-translate-x:initial;--ui-active-translate-y:initial;--ui-hover-transform:none;--ui-clip:none;--ui-clip-tight:none;--ui-backdrop:none;--ui-surface-image:initial;--ui-surface-ground:initial;--ui-surface-shadow:initial;--ui-bg-alpha:1;--ui-label-weight:initial;--ui-label-tracking:initial;--ui-label-case:initial;--ui-label-shadow:initial;font-family:var(--font-sketch,cursive)}.sketch-rounded:not(.sketch-solo){--ui-radius:var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px);--ui-radius-surface:var(--sketch-radius-surface-rounded,38px 16px 36px 17px / 16px 34px 17px 32px);--ui-radius-pill:var(--sketch-radius-pill,24px 16px 23px 17px / 17px 21px 16px 20px);--ui-radius-tight:9px 3px 8px 4px / 4px 8px 3px 7px}.sketch,.sketch-rounded:not(.sketch-solo){--_sketch-on: ;--_sketch-pass-radius:initial;--_sketch-pass-radius-surface:initial;--_sketch-pass-radius-tight:initial;--_sketch-pass-radius-pill:initial;--_sketch-pass-line-style:initial;--_sketch-pass-rule-style:initial}.sketch{--_sketch-pointed: }.sketch-rounded:not(.sketch-solo){--_sketch-rounded: }:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber){--_sketch-on:initial;--_sketch-pointed:initial;--_sketch-rounded:initial;--_sketch-pass-radius:var(--ui-radius);--_sketch-pass-radius-surface:var(--ui-radius-surface);--_sketch-pass-radius-tight:var(--ui-radius-tight);--_sketch-pass-radius-pill:var(--ui-radius-pill);--_sketch-pass-line-style:var(--ui-line-style);--_sketch-pass-rule-style:var(--ui-rule-style)}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+2){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,18px 240px 15px 255px / 240px 15px 255px 18px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,11px 25px 12px 24px / 23px 11px 22px 12px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n+3){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,245px 220px 15px 18px / 18px 15px 245px 235px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,24px 12px 26px 10px / 11px 23px 12px 22px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.btn,.ipt,.textarea,.select,.input-group,.pre,.tooltip-bubble):nth-child(4n){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,18px 250px 225px 15px / 245px 15px 18px 235px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,12px 24px 10px 25px / 22px 12px 23px 11px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}.field:nth-child(4n+1) :is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.ipt,.textarea,.select,.input-group){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}.field:nth-child(4n+2) :is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.ipt,.textarea,.select,.input-group){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,18px 240px 15px 255px / 240px 15px 255px 18px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,11px 25px 12px 24px / 23px 11px 22px 12px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}.field:nth-child(4n+3) :is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.ipt,.textarea,.select,.input-group){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,245px 220px 15px 18px / 18px 15px 245px 235px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,24px 12px 26px 10px / 11px 23px 12px 22px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}.field:nth-child(4n) :is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.ipt,.textarea,.select,.input-group){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius,18px 250px 225px 15px / 245px 15px 18px 235px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-rounded,12px 24px 10px 25px / 22px 12px 23px 11px);--ui-radius:var(--_sketch-pass-radius,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.card,.panel,.alert,.data-table):nth-child(4n+2){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius-surface,4px 75px 5px 80px / 75px 3px 80px 4px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-surface-rounded,17px 36px 18px 34px / 33px 16px 32px 17px);--ui-radius-surface:var(--_sketch-pass-radius-surface,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.card,.panel,.alert,.data-table):nth-child(4n+3){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius-surface,75px 70px 4px 5px / 4px 3px 75px 70px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-surface-rounded,35px 18px 38px 15px / 17px 32px 16px 34px);--ui-radius-surface:var(--_sketch-pass-radius-surface,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.card,.panel,.alert,.data-table):nth-child(4n){--_sketch-p:var(--_sketch-pointed) var(--sketch-radius-surface,5px 80px 75px 4px / 75px 4px 5px 70px);--_sketch-r:var(--_sketch-rounded) var(--sketch-radius-surface-rounded,18px 35px 16px 37px / 31px 17px 34px 16px);--ui-radius-surface:var(--_sketch-pass-radius-surface,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+2){--_sketch-p:var(--_sketch-pointed) 2px 8px 1px 10px / 8px 2px 10px 1px;--_sketch-r:var(--_sketch-rounded) 4px 8px 3px 9px / 8px 3px 8px 4px;--ui-radius-tight:var(--_sketch-pass-radius-tight,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n+3){--_sketch-p:var(--_sketch-pointed) 8px 2px 10px 1px / 1px 9px 2px 8px;--_sketch-r:var(--_sketch-rounded) 8px 4px 9px 3px / 3px 9px 4px 8px;--ui-radius-tight:var(--_sketch-pass-radius-tight,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.badge,.kbd,.code,.checkbox,.switch,.progress):nth-child(4n){--_sketch-p:var(--_sketch-pointed) 1px 10px 2px 7px / 9px 1px 8px 2px;--_sketch-r:var(--_sketch-rounded) 3px 9px 4px 8px / 9px 4px 8px 3px;--ui-radius-tight:var(--_sketch-pass-radius-tight,var(--_sketch-r,var(--_sketch-p)))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)).btn.pill{--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) var(--sketch-radius-pill,24px 16px 23px 17px / 17px 21px 16px 20px))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)).btn.pill:nth-child(4n+2){--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) var(--sketch-radius-pill,17px 23px 16px 24px / 21px 16px 20px 17px))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)).btn.pill:nth-child(4n+3){--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) var(--sketch-radius-pill,23px 17px 24px 16px / 16px 20px 17px 21px))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)).btn.pill:nth-child(4n){--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) var(--sketch-radius-pill,16px 24px 17px 23px / 20px 17px 21px 16px))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.badge,.progress,.switch){--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) var(--ui-radius-tight))}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.radio,.tooltip-icon){--ui-radius-pill:var(--_sketch-pass-radius-pill,var(--_sketch-on) 48% 52% 46% 54% / 53% 46% 54% 47%)}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.checkbox,:where(input[type=checkbox]:not(.switch,.radio))){--ui-line-style:var(--_sketch-pass-line-style,var(--_sketch-pointed) dashed)}:is(.sketch,.sketch-rounded:not(.sketch-solo),:is(.sketch,.sketch-rounded:not(.sketch-solo)) *):not(:is(.neobrutalism,.glass,.pixel,.chunky-tile,.cyber)):is(.divider,.data-table,:where(hr,table)){--ui-rule-style:var(--_sketch-pass-rule-style,var(--_sketch-pointed) dashed)}}@layer utilities;.sketch-solo{--_solo-intent-color:initial;--_solo-intent-contrast:initial;--_solo-intent-strong:initial;--_solo-intent-border:initial;--_solo-intent-fill-max:initial;--_solo-color:var(--_solo-intent-color,var(--color-text,light-dark(oklch(14.5% 0 0),oklch(98.5% 0 0))));--_solo-contrast:var(--_solo-intent-contrast,var(--color-text-contrast,light-dark(oklch(98.5% 0 0),oklch(14.5% 0 0))));--_solo-strong:var(--_solo-intent-strong,var(--color-text-strong,light-dark(oklch(20.5% 0 0),oklch(97% 0 0))));--_solo-capped:min(var(--ui-fill,0%), var(--_solo-intent-fill-max,20%));--_solo-fill:color-mix(in oklab, var(--_solo-color) var(--_solo-capped), transparent);--_solo-on-fill:min(var(--ui-fg-on-fill,0%), max(0%, calc(var(--_solo-capped) * 2 - 100%)));--_solo-fg:color-mix(in oklab, var(--_solo-contrast) var(--_solo-on-fill), var(--_solo-strong));--_solo-ink:var(--_solo-intent-border,light-dark(var(--color-neutral-950,oklch(14.5% 0 0)),var(--color-neutral-50,oklch(98.5% 0 0))));--_solo-edge:color-mix(in oklab, var(--_solo-ink) var(--ui-border,100%), var(--_solo-fill));--_solo-depth:calc(2px * var(--ui-elevation,1));border:1px solid var(--_solo-edge);border-radius:var(--sketch-radius-surface,80px 4px 75px 5px / 3px 70px 4px 80px);box-shadow:var(--_solo-depth) var(--_solo-depth) 0 0 light-dark(#0f172a14,#0000008c), inset 0 0 0 100vmax var(--_solo-fill);font-family:var(--font-sketch,cursive)}.sketch-solo:is(.primary,.secondary,.success,.warning,.destructive,.info){--_solo-intent-color:var(--intent-color);--_solo-intent-contrast:var(--intent-contrast);--_solo-intent-strong:var(--intent-strong);--_solo-intent-border:var(--intent-border);--_solo-intent-fill-max:var(--intent-fill-max)}.sketch-solo:is(.solid,.soft,.ghost,.primary,.secondary,.success,.warning,.destructive,.info,:is(.solid,.soft,.ghost) *){color:var(--_solo-fg)}.sketch-solo:is(button,a[href],[role=button],summary,input[type=button],input[type=submit],input[type=reset]){border-radius:var(--sketch-radius,255px 15px 225px 15px / 15px 225px 15px 255px)}.sketch-solo.sketch-rounded{border-radius:var(--sketch-radius-surface-rounded,38px 16px 36px 17px / 16px 34px 17px 32px)}.sketch-solo.sketch-rounded:is(button,a[href],[role=button],summary,input[type=button],input[type=submit],input[type=reset]){border-radius:var(--sketch-radius-rounded,26px 10px 24px 11px / 12px 23px 11px 20px)}@media (forced-colors:active){.sketch-solo{border-style:solid}}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
4
|
+
import * as fs from "node:fs/promises";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { fileURLToPath, pathToFileURL } from "node:url";
|
|
7
|
+
import { parseArgs } from "node:util";
|
|
8
|
+
// src/cli/run.ts
|
|
9
|
+
const BIN = "codenhub-styles";
|
|
10
|
+
const MIN_NODE_MAJOR = 24;
|
|
11
|
+
const TAILWIND_PACKAGES = ["@tailwindcss/cli", "tailwindcss"];
|
|
12
|
+
const TW_AESTHETIC_EXPORT = /^\.\/tw\/aesthetics\/([^/]+)$/;
|
|
13
|
+
const USAGE = `Usage: ${BIN} build --content <glob> [--content <glob> ...] --output <file> [options]
|
|
14
|
+
|
|
15
|
+
Builds a StyleKit stylesheet holding only the classes your templates use.
|
|
16
|
+
|
|
17
|
+
Options:
|
|
18
|
+
-c, --content <glob> Files to scan for class names, relative to the current
|
|
19
|
+
directory. Repeat for more globs. Quote each glob.
|
|
20
|
+
-o, --output <file> Stylesheet to write. Parent directories are created.
|
|
21
|
+
--aesthetic <name> Add an aesthetic: {names}. Repeatable.
|
|
22
|
+
--no-minify Write readable CSS instead of minified CSS.
|
|
23
|
+
--help Show this help.
|
|
24
|
+
--version Show the version.`;
|
|
25
|
+
const POLYFILLS_NONE = 0;
|
|
26
|
+
async function run(argv, io) {
|
|
27
|
+
try {
|
|
28
|
+
const parsed = parseCommandLine(argv);
|
|
29
|
+
if (parsed === "help") io.stdout(USAGE.replace("{names}", readAestheticNames().join(", ")));
|
|
30
|
+
else if (parsed === "version") io.stdout(readManifest().version);
|
|
31
|
+
else {
|
|
32
|
+
const output = await build(parsed, io);
|
|
33
|
+
const { size } = await fs.stat(output);
|
|
34
|
+
io.stdout(`${output} ${size} bytes`);
|
|
35
|
+
}
|
|
36
|
+
return 0;
|
|
37
|
+
} catch (error) {
|
|
38
|
+
io.stderr(`${BIN}: ${error instanceof Error ? error.message : String(error)}`);
|
|
39
|
+
return 1;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function parseCommandLine(argv) {
|
|
43
|
+
const { values, positionals } = parseFlags(argv);
|
|
44
|
+
if (values.help) return "help";
|
|
45
|
+
if (values.version) return "version";
|
|
46
|
+
const [command, ...extra] = positionals;
|
|
47
|
+
if (command === void 0) throw new Error(`missing command; run "${BIN} build --content <glob> --output <file>".`);
|
|
48
|
+
if (command !== "build") throw new Error(`unknown command "${command}"; the only command is "build".`);
|
|
49
|
+
if (extra.length > 0) throw new Error(`unexpected argument "${extra[0]}"; quote each --content glob so the shell does not expand it, as in --content "app/views/**/*.erb".`);
|
|
50
|
+
if (!values.content?.length) throw new Error(`missing --content; name the templates to scan, as in --content "app/views/**/*.erb".`);
|
|
51
|
+
const output = values.output?.trim();
|
|
52
|
+
if (!output) throw new Error("missing --output; name the stylesheet to write, as in --output public/app.css.");
|
|
53
|
+
return {
|
|
54
|
+
contentGlobs: values.content,
|
|
55
|
+
output,
|
|
56
|
+
aesthetics: [...new Set(values.aesthetic ?? [])],
|
|
57
|
+
shouldMinify: !values["no-minify"]
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
function parseFlags(argv) {
|
|
61
|
+
try {
|
|
62
|
+
return parseArgs({
|
|
63
|
+
args: [...argv],
|
|
64
|
+
allowPositionals: true,
|
|
65
|
+
options: {
|
|
66
|
+
content: {
|
|
67
|
+
type: "string",
|
|
68
|
+
short: "c",
|
|
69
|
+
multiple: true
|
|
70
|
+
},
|
|
71
|
+
output: {
|
|
72
|
+
type: "string",
|
|
73
|
+
short: "o"
|
|
74
|
+
},
|
|
75
|
+
aesthetic: {
|
|
76
|
+
type: "string",
|
|
77
|
+
multiple: true
|
|
78
|
+
},
|
|
79
|
+
"no-minify": { type: "boolean" },
|
|
80
|
+
help: { type: "boolean" },
|
|
81
|
+
version: { type: "boolean" }
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
} catch (error) {
|
|
85
|
+
const flag = error instanceof Error ? /'([^']+)'/.exec(error.message)?.[1] : void 0;
|
|
86
|
+
if (flag === void 0) throw error;
|
|
87
|
+
const code = error.code;
|
|
88
|
+
throw new Error(code === "ERR_PARSE_ARGS_UNKNOWN_OPTION" ? `unknown option "${flag}"; run "${BIN} --help" for the options.` : `option "${/--[\w-]+/.exec(flag)?.[0] ?? flag}" is missing its value or does not take one; run "${BIN} --help" for the options.`);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
async function build(options, io) {
|
|
92
|
+
assertNodeVersion(io.nodeVersion);
|
|
93
|
+
const tailwind = loadTailwind(io);
|
|
94
|
+
const validAesthetics = readAestheticNames();
|
|
95
|
+
const unknown = options.aesthetics.find((name) => !validAesthetics.includes(name));
|
|
96
|
+
if (unknown !== void 0) throw new Error(`unknown aesthetic "${unknown}"; choose from ${validAesthetics.join(", ")}.`);
|
|
97
|
+
await Promise.all(options.contentGlobs.map((pattern) => assertMatches(pattern, io.cwd)));
|
|
98
|
+
const output = path.resolve(io.cwd, options.output);
|
|
99
|
+
const input = [
|
|
100
|
+
`@import ${cssString(resolveExport("./tw"))};`,
|
|
101
|
+
...options.aesthetics.map((name) => `@import ${cssString(resolveExport(`./tw/aesthetics/${name}`))};`),
|
|
102
|
+
...options.contentGlobs.map((pattern) => `@source ${cssString(toCssPath(path.resolve(io.cwd, pattern)))};`)
|
|
103
|
+
].join("\n");
|
|
104
|
+
try {
|
|
105
|
+
const css = await compileStylesheet(tailwind, input, io.cwd, options.shouldMinify);
|
|
106
|
+
await fs.mkdir(path.dirname(output), { recursive: true });
|
|
107
|
+
await fs.writeFile(output, css);
|
|
108
|
+
} catch (error) {
|
|
109
|
+
throw new Error(`Tailwind failed to build the stylesheet: ${error instanceof Error ? error.message : String(error)}`);
|
|
110
|
+
}
|
|
111
|
+
return output;
|
|
112
|
+
}
|
|
113
|
+
async function assertMatches(pattern, cwd) {
|
|
114
|
+
for await (const entry of fs.glob(pattern, {
|
|
115
|
+
cwd,
|
|
116
|
+
withFileTypes: true
|
|
117
|
+
})) if (entry.isFile()) return;
|
|
118
|
+
throw new Error(`--content "${pattern}" matches no file in ${cwd}; check the path, or run from the project root.`);
|
|
119
|
+
}
|
|
120
|
+
async function compileStylesheet(tailwind, input, cwd, shouldMinify) {
|
|
121
|
+
const compiler = await tailwind.compile(input, {
|
|
122
|
+
base: cwd,
|
|
123
|
+
from: path.join(cwd, "codenhub-styles.css"),
|
|
124
|
+
polyfills: POLYFILLS_NONE,
|
|
125
|
+
onDependency() {}
|
|
126
|
+
});
|
|
127
|
+
const scanner = new tailwind.Scanner({ sources: compiler.sources });
|
|
128
|
+
const css = compiler.build(scanner.scan());
|
|
129
|
+
return shouldMinify ? tailwind.optimize(css, { minify: true }).code : css;
|
|
130
|
+
}
|
|
131
|
+
function readAestheticNames() {
|
|
132
|
+
const { exports } = readManifest();
|
|
133
|
+
return Object.keys(exports).map((subpath) => TW_AESTHETIC_EXPORT.exec(subpath)?.[1]).filter((name) => name !== void 0).sort();
|
|
134
|
+
}
|
|
135
|
+
/** Returns the nearest folder at or above `from` that holds a `package.json`. */
|
|
136
|
+
function findPackageRoot(from) {
|
|
137
|
+
for (let dir = from;; dir = path.dirname(dir)) {
|
|
138
|
+
if (existsSync(path.join(dir, "package.json"))) return dir;
|
|
139
|
+
if (path.dirname(dir) === dir) throw new Error(`cannot find the package.json of @codenhub/styles above ${from}.`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
const packageRoot = findPackageRoot(path.dirname(fileURLToPath(import.meta.url)));
|
|
143
|
+
function readManifest() {
|
|
144
|
+
return JSON.parse(readFileSync(path.join(packageRoot, "package.json"), "utf8"));
|
|
145
|
+
}
|
|
146
|
+
function resolveExport(subpath) {
|
|
147
|
+
const target = readManifest().exports[subpath].import;
|
|
148
|
+
return pathToFileURL(path.resolve(packageRoot, target)).href;
|
|
149
|
+
}
|
|
150
|
+
function assertNodeVersion(nodeVersion) {
|
|
151
|
+
if (Number.parseInt(nodeVersion, 10) < MIN_NODE_MAJOR) throw new Error(`this command needs Node.js ${MIN_NODE_MAJOR} or newer; this is Node.js ${nodeVersion}.`);
|
|
152
|
+
}
|
|
153
|
+
/** Loads Tailwind's compiler from where `@tailwindcss/cli` is installed, after checking both Tailwind packages are. */
|
|
154
|
+
function loadTailwind(io) {
|
|
155
|
+
const manifests = TAILWIND_PACKAGES.map((name) => resolveManifest(name, io));
|
|
156
|
+
const missing = TAILWIND_PACKAGES.filter((_, index) => manifests[index] === void 0);
|
|
157
|
+
if (missing.length > 0) throw new Error(`this command needs ${missing.join(" and ")}, which ${missing.length > 1 ? "are" : "is"} not installed. Run: npm install --save-dev ${missing.join(" ")}`);
|
|
158
|
+
const requireFromCli = createRequire(manifests[0]);
|
|
159
|
+
const { compile, optimize } = requireFromCli("@tailwindcss/node");
|
|
160
|
+
const { Scanner } = requireFromCli("@tailwindcss/oxide");
|
|
161
|
+
return {
|
|
162
|
+
compile,
|
|
163
|
+
optimize,
|
|
164
|
+
Scanner
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
function resolveManifest(name, io) {
|
|
168
|
+
try {
|
|
169
|
+
return io.resolvePackage(`${name}/package.json`);
|
|
170
|
+
} catch (error) {
|
|
171
|
+
if (error.code === "MODULE_NOT_FOUND") return;
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
function toCssPath(filePath) {
|
|
176
|
+
return filePath.split(path.sep).join("/");
|
|
177
|
+
}
|
|
178
|
+
function cssString(value) {
|
|
179
|
+
return `"${value.replace(/["\\]/g, "\\$&")}"`;
|
|
180
|
+
}
|
|
181
|
+
// src/cli/cli.ts
|
|
182
|
+
process.exitCode = await run(process.argv.slice(2), {
|
|
183
|
+
cwd: process.cwd(),
|
|
184
|
+
nodeVersion: process.versions.node,
|
|
185
|
+
resolvePackage: createRequire(import.meta.url).resolve,
|
|
186
|
+
stdout: (line) => process.stdout.write(`${line}\n`),
|
|
187
|
+
stderr: (line) => process.stderr.write(`${line}\n`)
|
|
188
|
+
});
|
|
189
|
+
export {};
|