winduum 0.1.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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +25 -0
  3. package/dist/main.css +1 -0
  4. package/package.json +52 -0
  5. package/src/App.vue +12 -0
  6. package/src/badge.html +41 -0
  7. package/src/btn.html +101 -0
  8. package/src/common.html +57 -0
  9. package/src/index.html +15 -0
  10. package/src/input.html +169 -0
  11. package/src/scripts/Libraries/Dialog.js +0 -0
  12. package/src/scripts/main.js +0 -0
  13. package/src/scripts/vue.js +6 -0
  14. package/src/styles/Base/config.css +87 -0
  15. package/src/styles/Base/default.css +23 -0
  16. package/src/styles/Base/icons.css +9 -0
  17. package/src/styles/Base/keyframes.css +188 -0
  18. package/src/styles/Base/reset.css +98 -0
  19. package/src/styles/Base/tailwind/base.css +27 -0
  20. package/src/styles/Base/theme/dark.css +9 -0
  21. package/src/styles/Base/theme/default.css +17 -0
  22. package/src/styles/Components/+.css +4 -0
  23. package/src/styles/Components/Dialog.css +5 -0
  24. package/src/styles/Components/Drawer.css +5 -0
  25. package/src/styles/Components/Dropdown.css +5 -0
  26. package/src/styles/Components/Table.css +5 -0
  27. package/src/styles/Libraries/+.css +3 -0
  28. package/src/styles/Libraries/Dialog.css +5 -0
  29. package/src/styles/Libraries/Hint.css +5 -0
  30. package/src/styles/Ui/+.css +14 -0
  31. package/src/styles/Ui/Badge.css +111 -0
  32. package/src/styles/Ui/Btn.css +238 -0
  33. package/src/styles/Ui/Checkbox.css +117 -0
  34. package/src/styles/Ui/Heading.css +23 -0
  35. package/src/styles/Ui/Image.css +17 -0
  36. package/src/styles/Ui/Input.css +271 -0
  37. package/src/styles/Ui/Link.css +44 -0
  38. package/src/styles/Ui/Notice.css +43 -0
  39. package/src/styles/Ui/Progress.css +52 -0
  40. package/src/styles/Ui/Radio.css +6 -0
  41. package/src/styles/Ui/Range.css +0 -0
  42. package/src/styles/Ui/Select.css +29 -0
  43. package/src/styles/Ui/Switch.css +102 -0
  44. package/src/styles/Ui/Text.css +203 -0
  45. package/src/styles/Ui/Title.css +22 -0
  46. package/src/styles/main.css +11 -0
  47. package/src/templates/Btn.vue +11 -0
  48. package/utils/helpers.cjs +67 -0
  49. package/utils/helpers.js +59 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2022 Vituum
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,25 @@
1
+ <p align="center">
2
+ <a href="https://stackblitz.com/github/vituum/winduum/tree/main" target="_blank" rel="noopener noreferrer">
3
+ <img width="180" src="https://raw.githubusercontent.com/vituum/winduum/main/logo.svg" alt="Logo">
4
+ </a>
5
+ </p>
6
+ <p align="center">
7
+ <a href="https://npmjs.com/package/winduum"><img src="https://img.shields.io/npm/v/winduum.svg" alt="npm package"></a>
8
+ <a href="https://nodejs.org/en/about/releases/"><img src="https://img.shields.io/node/v/winduum.svg" alt="node compatility"></a>
9
+ </p>
10
+
11
+ # 🎨 Winduum
12
+
13
+ > Still in very-early development.
14
+
15
+ Modern, modular, lightweight CSS component framework build on top of **Tailwind**
16
+
17
+ - 💡 Modern
18
+ - 📦 Modular
19
+ - 📏 Lightweight
20
+ - ✨️ Progressive
21
+
22
+ It's a mix of words **Tailwind** _(Popular CSS utility framework)_ and **Tuum** _(Estonian word for "core")_.<br>
23
+
24
+ Winduum approach to **Tailwind** is little different. It encourages to write components in CSS or other (pre/post)-processors.
25
+ And to use Tailwind only for utility classes to enhance the components. It also leverages the use of CSS properties as much possible.<br>
package/dist/main.css ADDED
@@ -0,0 +1 @@
1
+ *:where(:not(html,iframe,canvas,img,svg,video,audio,svg *,symbol *)){all:unset;display:revert}*,*:before,*:after{box-sizing:border-box}ol,ul,menu{list-style:none}img{max-width:100%}table{border-collapse:collapse}input,textarea{-webkit-user-select:auto;-moz-user-select:auto;user-select:auto}textarea{white-space:revert}meter{-webkit-appearance:revert;-moz-appearance:revert;appearance:revert}::-moz-placeholder{color:unset}::placeholder{color:unset}:where([contenteditable]:not([contenteditable="false"])){-moz-user-modify:read-write;-webkit-user-modify:read-write;overflow-wrap:break-word;-webkit-line-break:after-white-space;-webkit-user-select:auto;-moz-user-select:auto;user-select:auto}:where([draggable="true"]){-webkit-user-drag:element}:where(html){cursor:default}:where(input,textarea){cursor:text}:where(a[href],button){cursor:pointer}:where(svg,use,path,symbol){all:revert-layer}::-moz-selection{color:rgb(var(--color-light));background-color:rgb(var(--color-accent))}::selection{color:rgb(var(--color-light));background-color:rgb(var(--color-accent))}*{box-sizing:border-box;outline:none;-webkit-tap-highlight-color:rgb(255 255 255 / 0)}:where([hidden]){display:none}:where(svg){stroke-width:1.5}:where(hr){display:block;border-top:1px solid rgb(var(--color-current) / var(--tw-border-opacity, 1))}:root{--font-primary: "Poppins", sans-serif;--font-secondary: "Poppins", sans-serif;--color-google: 49 45 45;--color-linkedin: 40 103 178;--color-youtube: 255 0 0;--color-instagram: 193 53 132;--color-twitter: 29 161 242;--color-facebook: 24 119 242;--color-apple: 0 0 0;--container-width: 80rem;--container-width-sm: 50rem;--container-padding: 5vw;--container-padding-calc: max(calc(50vw - (var(--container-width) / 2) + var(--container-padding)), var(--container-padding));--font-bold: 700;--font-semibold: 600;--font-medium: 500;--font-normal: 400;--font-light: 300;--font-thin: 200;--z-10: 10;--z-20: 20;--z-30: 30;--z-40: 40;--z-50: 50;--rounded: .75rem;--rounded-xs: .5rem;--rounded-sm: .875rem;--rounded-base: 1rem;--rounded-md: 1.125rem;--rounded-lg: 1.5rem;--rounded-xl: 3rem;--rounded-2xl: 6rem;--rounded-3xl: 8rem;--rounded-full: 9999px;--spacing-xs: .5rem;--spacing-sm: .875rem;--spacing-base: 1rem;--spacing-md: 1.125rem;--spacing-lg: 1.5rem;--spacing-xl: 3rem;--spacing-2xl: 6rem;--spacing-3xl: 8rem;--transition-duration: .15s;--transition-color: color var(--transition-duration) ease;--transition-background: background var(--transition-duration) ease;--transition-opacity: opacity var(--transition-duration) ease;--transition-transform: transform var(--transition-duration) ease;--transition-border: border-color var(--transition-duration) ease;--transition-shadow: box-shadow var(--transition-duration) ease}@media (prefers-reduced-motion){:root{--transition-duration: 0}}:root{--icon-check: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5 13l4 4L19 7" /></svg>') no-repeat 50% 50% / contain;--icon-radio: url('data:image/svg+xml, <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path fill="currentColor" d="M256 160c-53.019 0-96 42.981-96 96v0c0 53.019 42.981 96 96 96v0c53.019 0 96-42.981 96-96v0c0-53.019-42.981-96-96-96z"></path></svg>') no-repeat 50% 50% / contain;--icon-chevron-right: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M9 5l7 7-7 7" /></svg>') no-repeat 50% 50% / contain;--icon-chevron-left: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M15 19l-7-7 7-7" /></svg>') no-repeat 50% 50% / contain;--icon-angle-up: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" stroke="currentColor"><path d="M10.998 15.467c.491.71 1.513.71 2.004 0l3.767-5.453c.581-.843 0-2.013-1.002-2.014H8.234C7.232 8 6.65 9.17 7.231 10.014z" style="transform: scaleY(-1) translateY(1px); transform-origin: 50% 50%;" /></svg>') no-repeat 50% 50% / contain;--icon-angle-down: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" stroke="currentColor"><path d="M10.998 15.467c.491.71 1.513.71 2.004 0l3.767-5.453c.581-.843 0-2.013-1.002-2.014H8.234C7.232 8 6.65 9.17 7.231 10.014z" /></svg>') no-repeat 50% 50% / contain;--icon-upload: url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" /></svg>') no-repeat 50% 50% / contain}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@keyframes move-indeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}@keyframes fade-in-left{0%{opacity:0;transform:translate(-5rem)}to{opacity:1;transform:none}}@keyframes fade-in-right{0%{opacity:0;transform:translate(5rem)}to{opacity:1;transform:none}}@keyframes fade-in-up{0%{opacity:0;transform:translateY(2rem)}to{opacity:1;transform:translateY(0)}}@keyframes fade-in-down{0%{opacity:0;transform:translateY(-2rem)}to{opacity:1;transform:translateY(0)}}@keyframes fade-out-left{0%{opacity:1;transform:none}to{opacity:0;transform:translate(-5rem)}}@keyframes fade-out-right{0%{opacity:1;transform:none}to{opacity:0;transform:translate(5rem)}}@keyframes fade-out-up{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(-2rem)}}@keyframes fade-out-down{0%{opacity:1;transform:translateY(0)}to{opacity:0;transform:translateY(2rem)}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}@keyframes fade-out{0%{opacity:1}to{opacity:0}}@keyframes slide-in-down{0%{transform:translateY(-100%)}to{transform:translateY(0)}}@keyframes slide-out-up{0%{transform:translateY(0)}to{transform:translateY(-100%)}}@keyframes slide-in-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}@keyframes slide-out-down{0%{transform:translateY(0)}to{transform:translateY(100%)}}@keyframes ripple{to{transform:scale(2.5);opacity:0}}@keyframes loading-skeleton{to{background-position:250% 0}}:root{--color-accent: var(--color-primary);--color-current: var(--color-default);--color-default: 17 19 21;--color-primary: 3 138 255;--color-secondary: 69 71 72;--color-light: 255 255 255;--color-dark: 17 19 21;--color-success: 33 154 67;--color-error: 254 50 75;--color-warning: 254 179 53;--color-info: 45 168 234;--color-background: 255 255 255;--color-background-100: 249 250 252;--color-background-200: 235 235 235;--color-background-300: 225 225 225}:root.dark{--color-default: 201 209 217;--color-invert: 14 17 22;--color-secondary: 39 41 46;--color-background: 25 26 27;--color-background-100: 14 15 16;--color-background-200: 26 32 38;--color-background-300: 30 36 46}:where(.ui-link){--ui-link-font-size: .875rem;--ui-link-font-weight: var(--font-semibold);--ui-link-hover-color: rgb(var(--color-accent));--ui-link-hover-opacity: .7;--ui-link-underline-width: 1px;--ui-link-underline-opacity: 0;--ui-link-underline-transform: translateY(-.125rem);font-size:var(--ui-link-font-size);font-weight:var(--ui-link-font-weight);transition:var(--transition-opacity);display:flex;align-items:center;position:relative}@media (hover: hover) and (pointer: fine){:where(.ui-link):hover{--ui-link-underline-opacity: 1;--ui-link-underline-transform: none;color:var(--ui-link-hover-color)}}:where(.ui-link):active{opacity:var(--ui-link-hover-opacity)}:where(.ui-link):where(:focus-visible){--ui-link-underline-opacity: 1;--ui-link-underline-transform: none}:where(.ui-link):where(.is-underline):after{content:"";border-bottom:var(--ui-link-underline-width) solid currentColor;opacity:var(--ui-link-underline-opacity);position:absolute;inset:auto 0 0 0;transition:var(--transition-opacity),var(--transition-transform);transform:var(--ui-link-underline-transform)}.ui-switch{--ui-switch-width: 3rem;--ui-switch-height: 1.5rem;--ui-switch-padding: .375rem;--ui-switch-bg-raw: var(--color-dark);--ui-switch-radius: 999px;--ui-switch-validity-font-size: .875rem;--ui-switch-validity-offset: .375rem;--ui-switch-box-shadow: none}.dark .ui-switch{--ui-switch-bg-raw: var(--color-background-300)}.ui-switch{display:flex;align-items:center;flex-wrap:wrap;width:-moz-max-content;width:max-content}.ui-switch em{display:none;width:100%;font-size:var(--ui-switch-validity-font-size);color:rgb(var(--color-error));font-style:normal;margin-top:var(--ui-switch-validity-offset)}.ui-switch.is-sm{--ui-switch-width: 2.5rem;--ui-switch-height: 1.25rem}.ui-switch.is-lg{--ui-switch-width: 4rem;--ui-switch-height: 2rem}.ui-switch input{width:var(--ui-switch-width);height:var(--ui-switch-height);display:block;position:relative;border-radius:var(--ui-switch-radius);background-color:rgb(var(--ui-switch-bg-raw));transition:var(--transition-background),var(--transition-shadow);cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;outline:none;color:inherit;box-shadow:var(--ui-switch-box-shadow)}.ui-switch input:before{width:calc(var(--ui-switch-height) - var(--ui-switch-padding));height:calc(var(--ui-switch-height) - var(--ui-switch-padding));background-color:rgb(var(--color-light));border-radius:var(--ui-switch-radius);position:absolute;left:var(--ui-switch-height);top:50%;content:"";display:block;margin-left:calc((var(--ui-switch-height) - var(--ui-switch-padding) + var(--ui-switch-padding) / 2) * -1);transition:left var(--transition-duration),var(--transition-background);transform:translateY(-50%)}:is(.is-validated :is(.ui-switch input):invalid)~em{display:block}.ui-switch input:disabled{opacity:.8;pointer-events:none}.ui-switch input:focus{--ui-switch-box-shadow: 0 0 0 0 rgb(var(--color-current)), 0 0 0 3px rgb(var(--color-current) / .2), 0 1px 2px 0 rgb(var(--color-current) / .05)}.ui-switch input:checked{background-color:rgb(var(--color-accent))}.ui-switch input:checked:focus{--ui-switch-box-shadow: 0 0 0 0 rgb(var(--color-current)), 0 0 0 3px rgb(var(--color-accent) / .2), 0 1px 2px 0 rgb(var(--color-current) / .05)}.ui-switch input:checked:before{background-color:rgb(var(--color-light));left:100%}*,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.flex{display:flex}.aspect-square{aspect-ratio:1 / 1}.w-full{width:100%}.w-24{width:6rem}.flex-row{flex-direction:row}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.gap-4{gap:1rem}.gap-2{gap:.5rem}.gap-8{gap:2rem}.rounded-full{border-radius:var(--rounded-full)}.rounded{border-radius:var(--rounded)}.bg-blue-100\/10{background-color:#dbeafe1a}.bg-secondary{--tw-bg-opacity: 1;background-color:rgb(var(--color-secondary) / var(--tw-bg-opacity))}.bg-white{--tw-bg-opacity: 1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-accent{--tw-bg-opacity: 1;background-color:rgb(var(--color-accent) / var(--tw-bg-opacity))}.bg-gray-200{--tw-bg-opacity: 1;background-color:rgb(229 231 235 / var(--tw-bg-opacity))}.bg-gradient-to-br{background-image:linear-gradient(to bottom right,var(--tw-gradient-stops))}.from-purple-600{--tw-gradient-from: #9333ea;--tw-gradient-to: rgb(147 51 234 / 0);--tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)}.to-blue-500{--tw-gradient-to: #3b82f6}.p-md{padding:var(--spacing-md)}.p-xs{padding:var(--spacing-xs)}.font-sans{font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji"}.text-lg{font-size:1.125rem;line-height:1.75rem}.font-bold{font-weight:var(--font-bold)}.uppercase{text-transform:uppercase}.text-dark{--tw-text-opacity: 1;color:rgb(var(--color-dark) / var(--tw-text-opacity))}.text-default{--tw-text-opacity: 1;color:rgb(var(--color-default) / var(--tw-text-opacity))}.text-accent{--tw-text-opacity: 1;color:rgb(var(--color-accent) / var(--tw-text-opacity))}.text-primary{--tw-text-opacity: 1;color:rgb(var(--color-primary) / var(--tw-text-opacity))}.text-error{--tw-text-opacity: 1;color:rgb(var(--color-error) / var(--tw-text-opacity))}.accent-dark{--color-accent: var(--color-dark);accent-color:rgb(var(--color-accent))}.accent-secondary{--color-accent: var(--color-secondary);accent-color:rgb(var(--color-accent))}.accent-warning{--color-accent: var(--color-warning);accent-color:rgb(var(--color-accent))}.accent-error{--color-accent: var(--color-error);accent-color:rgb(var(--color-accent))}.accent-info{--color-accent: var(--color-info);accent-color:rgb(var(--color-accent))}.accent-success{--color-accent: var(--color-success);accent-color:rgb(var(--color-accent))}.text-default{--color-current: var(--color-default)}.text-dark{--color-current: var(--color-dark)}.text-primary{--color-current: var(--color-primary)}.text-error{--color-current: var(--color-error)}.text-accent{--color-current: var(--color-accent)}:where(.ui-badge){--color-current: var(--color-light);--ui-badge-width: max-content;--ui-badge-height: 1.5rem;--ui-badge-py: 0;--ui-badge-px: .5rem;--ui-badge-border-radius: var(--rounded-xs);--ui-badge-font-size: .75rem;--ui-badge-font-weight: var(--font-normal);--ui-badge-bg: rgb(var(--color-accent) / var(--ui-badge-bg-opacity));--ui-badge-bg-opacity: var(--tw-bg-opacity, 1);--ui-badge-color: rgb(var(--color-current) / var(--ui-badge-color-opacity));--ui-badge-color-opacity: var(--tw-text-opacity, 1);--ui-badge-outline-width: 1px;--ui-badge-outline-opacity: .75;--ui-badge-icon-font-size: .875rem;--ui-badge-gap: .25rem;--ui-badge-focus-opacity: .3;--ui-badge-hover-opacity: .8;width:var(--ui-badge-width);height:var(--ui-badge-height);padding:var(--ui-badge-py) var(--ui-badge-px);border-radius:var(--ui-badge-border-radius);font-size:var(--ui-badge-font-size);font-weight:var(--ui-badge-font-weight);background-color:var(--ui-badge-bg);color:var(--ui-badge-color);display:inline-flex;align-items:center;text-align:center;justify-content:center;white-space:nowrap;flex-shrink:0;position:relative;z-index:0;gap:var(--ui-badge-gap);transition:var(--transition-opacity)}:where(.ui-badge) :where(svg){width:1em;height:1em;font-size:var(--ui-badge-icon-font-size)}:where(.ui-badge):where(.is-outline){outline:var(--ui-badge-outline-width) solid rgb(var(--color-accent) / var(--ui-badge-outline-opacity));outline-offset:calc(var(--ui-badge-outline-width) * -1)}:where(.ui-badge):where(.is-outline,.is-muted){--color-current: var(--color-accent);--ui-badge-bg: transparent}:where(.ui-badge):where(.is-muted){background-color:rgb(var(--color-current) / .1)}:where(.ui-badge):where(.is-square,.is-circle){--ui-badge-px: var(--ui-badge-py);--ui-badge-width: var(--ui-badge-height)}:where(.ui-badge):where(.is-circle){--ui-badge-border-radius: var(--rounded-full)}:where(.ui-badge):where(.is-sm){--ui-badge-height: 1.25rem;--ui-badge-font-size: .625rem}:where(.ui-badge):where(.is-lg){--ui-badge-height: 1.75rem}@media (hover: hover) and (pointer: fine){:where(.ui-badge):where([href],button):hover{opacity:var(--ui-badge-hover-opacity)}}:where(.ui-badge):where([href],button):focus-visible{z-index:2;box-shadow:0 0 0 0 rgb(var(--color-current)),0 0 0 max(2px,var(--ui-badge-outline-width)) rgb(var(--color-accent) / var(--ui-badge-focus-opacity))}:where(.ui-badge-group){display:flex}:where(.ui-badge-group) :where(.ui-badge):not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:calc(var(--ui-badge-outline-width) * -1)}:where(.ui-badge-group) :where(.ui-badge):not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}:where(.ui-btn){--color-current: var(--color-light);--ui-btn-width: max-content;--ui-btn-height: 2.25rem;--ui-btn-py: .375rem;--ui-btn-px: .75rem;--ui-btn-border-radius: var(--rounded);--ui-btn-font-size: .875rem;--ui-btn-font-weight: var(--font-medium);--ui-btn-bg: rgb(var(--color-accent) / var(--ui-btn-bg-opacity));--ui-btn-bg-opacity: var(--tw-bg-opacity, 1);--ui-btn-color: rgb(var(--color-current) / var(--ui-btn-color-opacity));--ui-btn-color-opacity: var(--tw-text-opacity, 1);--ui-btn-hover-filter: invert(1);--ui-btn-hover-opacity: .2;--ui-btn-focus-opacity: .3;--ui-btn-disabled-opacity: .7;--ui-btn-outline-width: 2px;--ui-btn-outline-opacity: .5;--ui-btn-icon-font-size: 1.25rem;--ui-btn-gap: .375rem;--ui-btn-loading-width: 1rem;--ui-btn-loading-border-width: 2px;width:var(--ui-btn-width);height:var(--ui-btn-height);padding:var(--ui-btn-py) var(--ui-btn-px);border-radius:var(--ui-btn-border-radius);font-size:var(--ui-btn-font-size);font-weight:var(--ui-btn-font-weight);background-color:var(--ui-btn-bg);color:var(--ui-btn-color);-webkit-user-select:none;-moz-user-select:none;user-select:none;overflow:hidden;display:inline-flex;align-items:center;text-align:center;justify-content:center;white-space:nowrap;flex-shrink:0;position:relative;z-index:0;transition:var(--transition-opacity),var(--transition-background),var(--transition-color);gap:var(--ui-btn-gap)}:where(.ui-btn):before{position:absolute;inset:0;width:100%;height:100%;content:"";background-color:rgb(var(--color-current));filter:var(--ui-btn-hover-filter);z-index:-1;opacity:0;transition:var(--transition-opacity)}:where(.ui-btn) :where(svg){width:1em;height:1em;font-size:var(--ui-btn-icon-font-size)}:where(.ui-btn):where(.is-sm){--ui-btn-height: 2rem;--ui-btn-px: 1rem}:where(.ui-btn):where(.is-lg){--ui-btn-height: 3rem;--ui-btn-px: 1.75rem}:where(.ui-btn):where(.is-wide){padding-left:calc(var(--ui-btn-px) * 2);padding-right:calc(var(--ui-btn-px) * 2)}:where(.ui-btn):where(.is-outline,.is-muted,.is-text){--color-current: var(--color-accent);--ui-btn-hover-opacity: .1;--ui-btn-hover-filter: none;background-color:transparent}:where(.ui-btn):where(.is-outline,.is-muted,.is-text):before{background-color:var(--ui-btn-bg)}:where(.ui-btn):where(.is-outline){--ui-btn-focus-opacity: .15;outline:var(--ui-btn-outline-width) solid rgb(var(--color-accent) / var(--ui-btn-outline-opacity));outline-offset:calc(var(--ui-btn-outline-width) * -1)}:where(.ui-btn):where(.is-outline-gradient){--ui-btn-focus-opacity: .15;--color-accent: var(--color-default);--color-current: var(--color-accent)}.is-loading.is-hover-fill:where(.ui-btn):where(.is-outline-gradient){--color-current: var(--color-light)}:where(.ui-btn):where(.is-outline-gradient):not(.is-loading):after{content:"";position:absolute;background-color:rgb(var(--color-background));inset:var(--ui-btn-outline-width);border-radius:calc(var(--ui-btn-border-radius) / 1.25);z-index:-1;transition:var(--transition-opacity)}:where(.ui-btn):where(.is-muted){--ui-btn-hover-opacity: .3}:where(.ui-btn):where(.is-muted):before{opacity:.1}:where(.ui-btn):where(.is-raised){--ui-btn-outline-opacity: .1;outline:var(--ui-btn-outline-width) solid rgb(var(--color-current) / var(--ui-btn-outline-opacity));outline-offset:calc(var(--ui-btn-outline-width) * -1)}:where(.ui-btn):where(.is-hover-fill){--ui-btn-hover-opacity: 1}:where(.ui-btn):where(.is-square,.is-circle){--ui-btn-py: var(--ui-btn-py);--ui-btn-width: var(--ui-btn-height)}:where(.ui-btn):where(.is-circle){--ui-btn-border-radius: var(--rounded-full)}:where(.ui-btn):where(.is-loading){pointer-events:none;color:transparent}:where(.ui-btn):where(.is-loading)>*{opacity:0}:where(.ui-btn):where(.is-loading):after{z-index:1;width:var(--ui-btn-loading-width);height:var(--ui-btn-loading-width);content:"";border:var(--ui-btn-loading-border-width) solid rgb(var(--color-current));border-right-color:transparent;border-radius:50%;animation:spin .45s infinite linear;position:absolute;margin-left:calc(var(--ui-btn-loading-width) / 2 * -1);margin-top:calc(var(--ui-btn-loading-width) / 2 * -1);left:50%;top:50%}@media (hover: hover) and (pointer: fine){:where(.ui-btn):not(:disabled):hover:before{opacity:var(--ui-btn-hover-opacity)}.is-hover-fill:where(.ui-btn):not(:disabled):hover{--color-current: var(--color-light)}.is-outline-gradient:where(.ui-btn):not(:disabled):hover:before,.is-outline-gradient:where(.ui-btn):not(:disabled):hover:after{opacity:0}}:where(.ui-btn):is(:not(:disabled):active,.is-active):before{opacity:var(--ui-btn-hover-opacity)}.is-hover-fill:where(.ui-btn):is(:not(:disabled):active,.is-active){--color-current: var(--color-light)}.is-outline-gradient:where(.ui-btn):is(:not(:disabled):active,.is-active):before,.is-outline-gradient:where(.ui-btn):is(:not(:disabled):active,.is-active):after{opacity:0}:where(.ui-btn):focus-visible{z-index:2;box-shadow:0 0 0 0 rgb(var(--color-current)),0 0 0 max(2px,var(--ui-btn-outline-width)) rgb(var(--color-accent) / var(--ui-btn-focus-opacity))}:where(.ui-btn):disabled{opacity:var(--ui-btn-disabled-opacity);cursor:not-allowed}:where(.ui-btn-group){display:flex}:where(.ui-btn-group) :where(.ui-btn):not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0;margin-left:calc(var(--ui-btn-outline-width) * -1)}:where(.ui-btn-group) :where(.ui-btn):not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}:where(.ui-checkbox,.ui-radio){--ui-checkbox-width: 1.375rem;--ui-checkbox-font-size: .875rem;--ui-checkbox-gap: .625rem;--ui-checkbox-bg-raw: var(--color-background);--ui-checkbox-bg-opacity: .1;--ui-checkbox-border-color-raw: var(--color-current);--ui-checkbox-border-color-opacity: .2;--ui-checkbox-checked-bg-raw: var(--color-accent);--ui-checkbox-radius: .5rem;--ui-checkbox-icon: var(--icon-check);--ui-checkbox-icon-font-size: 1.125rem;--ui-checkbox-validity-font-size: .875rem;--ui-checkbox-validity-offset: .375rem;--ui-checkbox-box-shadow: none;display:flex;align-items:center;gap:0 var(--ui-checkbox-gap);flex-wrap:wrap;width:-moz-max-content;width:max-content;font-size:var(--ui-checkbox-font-size)}:where(.ui-checkbox,.ui-radio) :where(label[for],input){cursor:pointer}:where(.ui-checkbox,.ui-radio) em{display:none;width:100%;font-size:var(--ui-checkbox-validity-font-size);color:rgb(var(--color-error));font-style:normal;margin-top:var(--ui-checkbox-validity-offset)}:where(.ui-checkbox,.ui-radio) a{color:rgb(var(--color-accent));text-decoration:underline}:where(.ui-checkbox,.ui-radio) input{--color-current: var(--color-light);display:flex;width:var(--ui-checkbox-width);height:var(--ui-checkbox-width);background-color:rgb(var(--ui-checkbox-bg-raw) / var(--tw-bg-opacity, var(--ui-checkbox-bg-opacity)));border:1px solid rgb(var(--ui-checkbox-border-color-raw) / var(--tw-border-opacity, var(--ui-checkbox-border-color-opacity)));border-radius:var(--ui-checkbox-radius);-webkit-user-select:none;-moz-user-select:none;user-select:none;outline:none;justify-content:center;align-items:center;transition:var(--transition-border),var(--transition-background),var(--transition-shadow);box-shadow:var(--ui-checkbox-box-shadow);font-size:var(--ui-checkbox-icon-font-size)}:where(.ui-checkbox,.ui-radio) input:before{line-height:var(--ui-checkbox-icon-font-size);text-indent:0;display:block;transition:var(--transition-color),var(--transition-opacity),var(--transition-transform);color:rgb(var(--color-current));content:"";background-color:currentColor;-webkit-mask:var(--ui-checkbox-icon);mask:var(--ui-checkbox-icon);opacity:0;transform:scale(0);will-change:transform;width:1em;height:1em}:where(.ui-checkbox,.ui-radio) input:is(:hover,:focus-visible){--ui-checkbox-bg-raw: var(--ui-checkbox-checked-bg-raw);--ui-checkbox-border-color-raw: var(--ui-checkbox-checked-bg-raw);--tw-border-opacity: .75;--tw-bg-opacity: .1}:is(:where(.ui-checkbox,.ui-radio) input:required)+*:after{color:rgb(var(--color-error));content:" *"}:is(.is-validated :is(:where(.ui-checkbox,.ui-radio) input):invalid)~em{display:block}:where(.ui-checkbox,.ui-radio) input:checked{--tw-border-opacity: 0;background-color:rgb(var(--ui-checkbox-checked-bg-raw))}:where(.ui-checkbox,.ui-radio) input:checked:focus{--ui-checkbox-box-shadow: 0 0 0 0 rgb(var(--color-current)), 0 0 0 3px rgb(var(--ui-checkbox-checked-bg-raw) / .2), 0 1px 2px 0 rgb(var(--color-current) / .05)}:where(.ui-checkbox,.ui-radio) input:checked:before{opacity:1;transform:scale(1)}:where(.ui-heading){--ui-heading-font-family: var(--font-primary);--ui-heading-font-weight: var(--font-semibold);--ui-heading-font-size: 1.25rem;--ui-heading-line-height: calc(var(--ui-heading-font-size) + var(--ui-heading-line-height-ratio));--ui-heading-line-height-ratio: .375rem;font-family:var(--ui-heading-font-family);font-size:var(--ui-heading-font-size);line-height:var(--ui-heading-line-height);font-weight:var(--ui-heading-font-weight)}:where(.ui-heading):where(.is-sm){--ui-heading-font-size: 1.125rem;--ui-heading-line-height-ratio: .125rem}:where(.ui-heading):where(.is-lg){--ui-heading-font-size: 1.875rem}:where(.ui-image){--ui-image-bg: rgb(var(--color-background-200));--ui-image-border-radius: 0;position:relative;display:block;background-color:var(--ui-image-bg);border-radius:var(--ui-image-border-radius)}:where(.ui-image)>*{width:100%;height:100%;border-radius:inherit}:where(.ui-input,.ui-input-group,.ui-input-mask,.ui-select){--ui-input-height: 3rem;--ui-input-height-textarea: 8rem;--ui-input-pt-floating: 1.25rem;--ui-input-pb-floating: .4375rem;--ui-input-py: .875rem;--ui-input-px: 1rem;--ui-input-pl: var(--ui-input-px);--ui-input-pr: var(--ui-input-px);--ui-input-bg: rgb(var(--color-background));--ui-input-color: currentColor;--ui-input-placeholder-color: currentColor;--ui-input-placeholder-opacity: .5;--ui-input-font-size: .875rem;--ui-input-font-weight: var(--font-medium);--ui-input-border-width: 1px;--ui-input-border-color: var(--color-current);--ui-input-border-opacity: .15;--ui-input-border-radius: var(--rounded);--ui-input-box-shadow: none;--ui-input-gap: .5rem;--ui-input-icon-font-size: 1.25rem;--ui-input-icon-count-l: 1;--ui-input-icon-count-r: 1;--ui-input-icon-gap: .375rem;--ui-input-icon-inset-x: calc(var(--ui-input-px) - .25rem);--ui-input-icon-inset-x-gap: .125rem;--ui-input-icon-offset-l: calc(var(--ui-input-icon-inset-x) + var(--ui-input-icon-inset-x-gap) + (var(--ui-input-icon-font-size) + var(--ui-input-icon-gap)) * var(--ui-input-icon-count-l));--ui-input-icon-offset-r: calc(var(--ui-input-icon-inset-x) + var(--ui-input-icon-inset-x-gap) + (var(--ui-input-icon-font-size) + var(--ui-input-icon-gap)) * var(--ui-input-icon-count-r));--ui-input-validity-size: .875rem;--ui-input-validity-offset: .375rem;--ui-input-label-font-size: .875rem;--ui-input-label-font-weight: var(--font-medium);--ui-input-label-focus-transform: translateY(-.75rem) scale(.8);--ui-input-label-focus-opacity: .5}:where(.ui-input,.ui-input-group,.ui-input-mask,.ui-select)>:where(label:not([class^="ui"])){display:block;margin-bottom:var(--ui-input-gap);font-size:var(--ui-input-label-font-size);font-weight:var(--ui-input-label-font-weight)}:where(.ui-input,.ui-input-group,.ui-input-mask,.ui-select) :where(em){grid-area:info;display:none;margin-top:var(--ui-input-validity-offset);font-size:var(--ui-input-validity-size);color:rgb(var(--color-error));font-style:normal}:where(.ui-input,.ui-select){display:grid;grid-template-areas:"label" "input" "info";font-size:var(--ui-input-font-size);position:relative}.js-has-pseudo [csstools-has-1m-3b-2w-2t-36-2t-14-1a-39-2x-19-2x-32-34-39-38-18-w-1a-39-2x-19-37-2t-30-2t-2r-38-15-1m-2w-2p-37-14-1a-2x-2r-33-32-19-30-15]{--ui-input-pl: var(--ui-input-icon-offset-l)}:where(.ui-input,.ui-select):has(.icon-l){--ui-input-pl: var(--ui-input-icon-offset-l)}.js-has-pseudo [csstools-has-1m-3b-2w-2t-36-2t-14-1a-39-2x-19-2x-32-34-39-38-18-w-1a-39-2x-19-37-2t-30-2t-2r-38-15-1m-2w-2p-37-14-1a-2x-2r-33-32-19-36-15]{--ui-input-pr: var(--ui-input-icon-offset-r)}:where(.ui-input,.ui-select):has(.icon-r){--ui-input-pr: var(--ui-input-icon-offset-r)}.js-has-pseudo [csstools-has-1m-3b-2w-2t-36-2t-14-1a-39-2x-19-2x-32-34-39-38-18-w-1a-39-2x-19-37-2t-30-2t-2r-38-15-1m-2w-2p-37-14-1a-2x-2r-33-32-19-30-w-1q-w-16-1m-32-38-2w-19-2r-2w-2x-30-2s-14-1e-15-15]:not(.does-not-exist){--ui-input-icon-count-r: 2}:where(.ui-input,.ui-select):has(.icon-l > *:nth-child(2)){--ui-input-icon-count-r: 2}.js-has-pseudo [csstools-has-1m-3b-2w-2t-36-2t-14-1a-39-2x-19-2x-32-34-39-38-18-w-1a-39-2x-19-37-2t-30-2t-2r-38-15-1m-2w-2p-37-14-1a-2x-2r-33-32-19-36-w-1q-w-16-1m-32-38-2w-19-2r-2w-2x-30-2s-14-1e-15-15]:not(.does-not-exist){--ui-input-icon-count-r: 2}:where(.ui-input,.ui-select):has(.icon-r > *:nth-child(2)){--ui-input-icon-count-r: 2}:where(.ui-input,.ui-select) :where(label){grid-area:label;order:-1}:where(.ui-input,.ui-select) :where(svg){font-size:var(--ui-input-icon-font-size);width:1em;height:var(--ui-input-height)}:where(.ui-input,.ui-select) :where(input,textarea,select){grid-area:input;background-clip:padding-box;background-color:var(--ui-input-bg);padding:var(--ui-input-py) var(--ui-input-pr) var(--ui-input-py) var(--ui-input-pl);transition:var(--transition-border),var(--transition-shadow);box-shadow:var(--ui-input-box-shadow);line-height:normal;font-size:inherit;height:var(--ui-input-height);font-weight:var(--ui-input-font-weight);border-radius:var(--ui-input-border-radius);color:var(--ui-input-color);border:var(--ui-input-border-width) solid rgb(var(--ui-input-border-color) / var(--ui-input-border-opacity))}:is(.is-validated :is(:where(.ui-input,.ui-select) :where(input,textarea,select)):invalid)~em{display:block}:where(.ui-input,.ui-select) :where(input,textarea,select):focus{--ui-input-border-opacity: 1;--ui-input-border-color: var(--color-accent);--ui-input-box-shadow: 0 0 0 0 rgb(var(--color-current)), 0 0 0 3px rgb(var(--color-accent) / .2), 0 1px 2px 0 rgb(var(--color-current) / .05)}:where(.ui-input,.ui-select) :where(input,textarea,select):disabled{cursor:default;background-color:rgb(var(--color-default) / .1)}:is(:where(.ui-input,.ui-select) :where(input,textarea,select):required)~label:after{color:rgb(var(--color-error));content:" *"}:where(.ui-input,.ui-select) :where(input,textarea)::-moz-placeholder{color:var(--ui-input-placeholder-color);opacity:var(--ui-input-placeholder-opacity)}:where(.ui-input,.ui-select) :where(input,textarea)::placeholder{color:var(--ui-input-placeholder-color);opacity:var(--ui-input-placeholder-opacity)}:where(.ui-input,.ui-select) :where(textarea){resize:vertical;overflow:hidden;min-height:var(--ui-input-height-textarea)}:where(.ui-input,.ui-select) :where([class^="icon-"]){grid-area:input;position:relative;transition:var(--transition-opacity);content:"";line-height:1em;display:flex;flex-direction:row;flex-shrink:0;gap:var(--ui-input-icon-gap);align-items:center}:where(.ui-input,.ui-select) .icon-l:where([class^="icon-"]){left:var(--ui-input-icon-inset-x);margin-right:auto}:where(.ui-input,.ui-select) .icon-r:where([class^="icon-"]){right:var(--ui-input-icon-inset-x);margin-left:auto}:where(.ui-input,.ui-select) :where([aria-label]):after{content:attr(aria-label);font-size:var(--ui-input-font-size);min-width:var(--ui-input-icon-font-size);text-align:center;line-height:var(--ui-input-icon-font-size);display:block}:where(.ui-input,.ui-select) :where([class*="lib-hint"]):after{white-space:normal;line-height:1.5;word-wrap:normal;width:10rem;font-weight:var(--font-normal);font-size:.75rem}:where(.ui-input,.ui-select):where(.is-floating){--ui-input-placeholder-color: transparent}:where(.ui-input,.ui-select):where(.is-floating) :where(label){position:absolute;z-index:1;pointer-events:none;transition:transform .4s cubic-bezier(.25,.8,.25,1),var(--transition-color),var(--transition-opacity);transform-origin:0 50%;white-space:nowrap;text-overflow:ellipsis;overflow:hidden;transform:perspective(100px);will-change:transform;font-weight:var(--ui-input-font-weight);left:var(--ui-input-pl);right:var(--ui-input-pr);top:calc(var(--ui-input-height) / 2);line-height:var(--ui-input-font-size);margin-top:calc(var(--ui-input-font-size) / 2 * -1)}:where(.ui-input,.ui-select):where(.is-floating) :where(input,textarea,select){padding-top:calc(var(--ui-input-pt-floating));padding-bottom:calc(var(--ui-input-pb-floating))}:is(:where(.ui-input,.ui-select):where(.is-floating) :where(input,textarea,select)):is(:focus,:not(:-moz-placeholder-shown))~label{transform:var(--ui-input-label-focus-transform);opacity:var(--ui-input-label-focus-opacity)}:is(:where(.ui-input,.ui-select):where(.is-floating) :where(input,textarea,select)):is(:focus,:not(:placeholder-shown))~label{transform:var(--ui-input-label-focus-transform);opacity:var(--ui-input-label-focus-opacity)}.is-invalid:where(.ui-input,.ui-select),.is-validated :where(.ui-input,.ui-select) :where(input,textarea,select):invalid{--ui-input-bg: rgb(var(--color-error) / .1);--ui-input-border-opacity: 1;--ui-input-border-color: var(--color-error);--ui-input-color: rgb(var(--color-error))}:where(.ui-input-group){display:flex;align-items:flex-end;flex-wrap:wrap}:where(.ui-input-group) .ui-btn{--ui-btn-outline-width: 1px;--ui-btn-height: var(--ui-input-height)}:where(.ui-input-group) :where(em,label){display:block;width:100%}:where(.ui-input-group)>*:not(:first-child,label + *){margin-left:calc(var(--ui-input-border-width) * -1)}:where(.ui-input-group)>*:not(:first-child,label + *),:where(.ui-input-group)>*:not(:first-child,label + *) :where(input,select){border-top-left-radius:0;border-bottom-left-radius:0}.js-has-pseudo :where(.ui-input-group)>*:not(:last-child,[csstools-has-w-1m-2w-2p-37-14-17-w-2t-31-15]:not(does-not-exist)),.js-has-pseudo :where(.ui-input-group)>*:not(:last-child,[csstools-has-w-1m-2w-2p-37-14-17-w-2t-31-15]:not(does-not-exist)) :where(input,select){border-top-right-radius:0;border-bottom-right-radius:0}:where(.ui-input-group)>*:not(:last-child,:has(+ em)),:where(.ui-input-group)>*:not(:last-child,:has(+ em)) :where(input,select){border-top-right-radius:0;border-bottom-right-radius:0}:where(.ui-input-mask) :where([class^="ui-"]){min-height:var(--ui-input-height)}:where(.ui-notice){--color-current: var(--color-accent);--ui-notice-bg: rgb(var(--color-accent));--ui-notice-py: 1.25rem;--ui-notice-px: 1.5rem;--ui-notice-font-size: .875rem;--ui-notice-border-radius: var(--rounded);--ui-notice-outline-opacity: .1;--ui-notice-gap: 1rem;position:relative;display:flex;flex-direction:column;padding:var(--ui-notice-py) var(--ui-notice-px);font-size:var(--ui-notice-font-size);border-radius:var(--ui-notice-border-radius);color:rgb(var(--color-current));gap:var(--ui-notice-gap)}:where(.ui-notice) :where(hr){--tw-border-opacity: .2}:where(.ui-notice):before,:where(.ui-notice):after{position:absolute;inset:0;border-radius:var(--ui-notice-border-radius);z-index:-1;content:""}:where(.ui-notice):before{background-color:var(--ui-notice-bg);opacity:var(--ui-notice-outline-opacity)}:where(.ui-notice):after{box-shadow:inset 0 0 0 1px var(--ui-notice-bg);opacity:var(--ui-notice-outline-opacity)}:where(.ui-progress){--ui-progress-height: 1rem;--ui-progress-border-radius: var(--rounded-full);--ui-progress-bg: var(--color-background-200);--ui-progress-bg-opacity: 1;-webkit-appearance:none;-moz-appearance:none;appearance:none;box-shadow:none;border:0;height:var(--ui-progress-height);border-radius:var(--ui-progress-border-radius);background-color:rgb(var(--ui-progress-bg) / var(--ui-progress-bg-opacity));color:rgb(var(--color-accent));width:100%}.is-sm:where(.ui-progress){--ui-progress-height: .5rem}.is-lg:where(.ui-progress){--ui-progress-height: 1.5rem}:where(.ui-progress)::-webkit-progress-bar{background-color:transparent}:where(.ui-progress)::-webkit-progress-value{background-color:currentColor;border-radius:var(--ui-progress-border-radius)}:where(.ui-progress)::-moz-progress-bar{background-color:currentColor;border-radius:var(--ui-progress-border-radius)}:where(.ui-progress):indeterminate{animation:1.5s linear 0s forwards infinite move-indeterminate;background-image:linear-gradient(to right,currentColor 30%,rgb(var(--ui-progress-bg) / var(--ui-progress-bg-opacity)) 30%);background-position:top left;background-repeat:no-repeat;background-size:150% 150%;border-radius:var(--ui-progress-border-radius)}:where(.ui-progress):indeterminate::-moz-progress-bar{background-color:transparent}:where(.ui-radio){--ui-checkbox-icon: var(--icon-radio);--ui-checkbox-radius: 50%}:where(.ui-select){--ui-input-icon-select-icon-font-size: 1.5rem;--ui-input-icon-count-r: 2;--ui-input-pr: var(--ui-input-icon-offset-r)}:where(.ui-select) :where([class^="icon-"]){margin-right:calc(var(--ui-input-icon-font-size) + var(--ui-input-icon-gap))}:where(.ui-select):after{width:1em;height:1em;background-color:currentColor;content:"";position:absolute;z-index:1;font-size:var(--ui-input-icon-select-icon-font-size);right:calc(var(--ui-input-height) / 4);top:calc(var(--ui-input-height) / 2);margin-top:calc(var(--ui-input-icon-select-icon-font-size) / 2 * -1);will-change:transform;transition:transform .2s;-webkit-mask:var(--icon-angle-down);mask:var(--icon-angle-down);pointer-events:none;grid-area:input}:where(.ui-text){--ui-text-size: .875rem;--ui-text-size-line: .75rem;--ui-text-weight: var(--font-normal);--ui-text-weight-bold: var(--font-semibold);font-weight:var(--ui-text-weight);font-size:var(--ui-text-size);line-height:calc(var(--ui-text-size) + var(--ui-text-size-line))}:where(.ui-text):where(.is-lg){--ui-text-size: 1.125rem}:where(.ui-text) :where(a){text-decoration:underline;transition:var(--transition-color);color:rgb(var(--color-accent))}@media (hover: hover) and (pointer: fine){:where(.ui-text) :where(a):hover{color:rgb(var(--color-accent) / .7)}}:where(.ui-text) :where(a):focus-visible{color:rgb(var(--color-accent) / .7)}:where(.ui-text) :where(b,strong){font-weight:var(--ui-text-weight-bold)}:where(.ui-text) :where(i,em){display:inline;font-style:italic}:where(.ui-text) :where(figure){margin:1rem 0}@media (min-width: 48em){:where(.ui-text) :where(figure){margin:2rem 0}}:where(.ui-text) :where(figure) :where(figcaption){font-size:.875rem;font-weight:var(--font-semibold);margin-top:.875rem}:where(.ui-text) :where(img){height:auto!important}:where(.ui-text) :where(p){line-height:inherit;margin:0 0 .25rem}:where(.ui-text) :where(p):empty{line-height:1rem}:where(.ui-text) :where(p):after{content:"\a0"}:where(.ui-text) :where(hr){margin:1.25rem 0}:where(.ui-text) :where(h1,h2,h3,h4,h5,h6){font-weight:var(--ui-text-weight-bold);font-family:var(--font-secondary);font-size:var(--ui-text-heading-size, 1rem);line-height:calc(var(--ui-text-heading-size) + .5rem);margin:0 0 1.25rem}:where(.ui-text) h1{--ui-text-heading-size: 2.25rem}:where(.ui-text) h2{--ui-text-heading-size: 1.75rem}:where(.ui-text) :where(h3,h4){--ui-text-heading-size: 1.25rem}:where(.ui-text) :where(table){border:0;min-width:100%}:where(.ui-text) :where(table) :where(td,th){padding:1rem 1.125rem;text-align:left}:where(.ui-text) :where(table) :where(thead){font-weight:var(--ui-text-weight-bold);border-bottom:1px solid rgb(var(--color-current) / .075)}:where(.ui-text) :where(table) :where(tbody tr):nth-of-type(even){background-color:rgb(var(--color-current) / .05)}:where(.ui-text) :where(iframe){max-width:100%}:where(.ui-text) :where(blockquote){background-color:rgb(var(--color-current) / .075);border-left:.3125rem solid rgb(var(--color-accent) / 1);padding:1.25em 1.5em;margin:0;font-size:inherit}:where(.ui-text) :where(code){margin:0;border-radius:var(--rounded-xs);padding:.25rem .5rem;font-size:.85em;color:#476582;font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace;background-color:#1b1f230d}.dark :is(:where(.ui-text) :where(code)){background-color:rgb(var(--color-background-100));color:rgb(var(--color-primary))}:where(.ui-text) :where(ol){margin:0 0 1.5rem;padding:0 0 0 1rem}:where(.ui-text) :where(ol) :where(li){padding-left:.5rem}:where(.ui-text) :where(ol) :where(li)::marker{color:rgb(var(--color-accent))}:where(.ui-text) :where(ul){list-style-type:none!important;margin:0 0 1.5rem;padding:0}:where(.ui-text) :where(ul) :where(li){position:relative;line-height:inherit;padding-left:1.5rem}:where(.ui-text) :where(ul) :where(li):not(:last-of-type){margin:0 0 .5rem}:where(.ui-text) :where(ul) :where(li):before{width:.25rem;height:.25rem;position:absolute;content:"";border:1px solid rgb(var(--color-accent));background-color:rgb(var(--color-accent));left:0;top:.625rem;text-indent:0;border-radius:50%}:where(.ui-text) [style*=square]:where(ul) li:before{border-radius:0}:where(.ui-text) [style*=circle]:where(ul) li:before{border-radius:50%;background-color:transparent}:where(.ui-title){--ui-title-font-family: var(--font-secondary);--ui-title-font-weight: var(--font-semibold);--ui-title-font-size: .875rem;--ui-title-line-height: calc(var(--ui-heading-font-size) + var(--ui-heading-line-height-ratio));--ui-title-line-height-ratio: .375rem;font-family:var(--ui-title-font-family);font-size:var(--ui-title-font-size);line-height:var(--ui-title-line-height);font-weight:var(--ui-title-font-weight)}:where(.ui-title):where(.is-sm){--ui-title-font-size: .75rem}:where(.ui-title):where(.is-lg){--ui-title-font-size: 1.125rem}:where(.col){display:flex;flex-direction:column}.container.is-sm{--container-width: var(--container-width-sm)}.dark .dark\:bg-dark{--tw-bg-opacity: 1;background-color:rgb(var(--color-dark) / var(--tw-bg-opacity))}.dark .dark\:text-light{--tw-text-opacity: 1;color:rgb(var(--color-light) / var(--tw-text-opacity));--color-current: var(--color-light)}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "winduum",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "main": "index.js",
6
+ "scripts": {
7
+ "dev": "vite --host",
8
+ "build": "vite build",
9
+ "build-prod": "vite build -c vite.config.prod.js",
10
+ "eslint": "eslint '**/*.js' --fix",
11
+ "stylelint": "npx stylelint '**/*.css' --fix",
12
+ "tailwind-helpers": "rollup utils/helpers.js --file utils/helpers.cjs --format cjs"
13
+ },
14
+ "devDependencies": {
15
+ "@vitejs/plugin-vue": "^4.0.0",
16
+ "autoprefixer": "^10.4.13",
17
+ "css-has-pseudo": "^4.0.2",
18
+ "eslint": "^8.30.0",
19
+ "eslint-config-standard": "^17.0.0",
20
+ "postcss": "^8.4.20",
21
+ "postcss-custom-media": "^9.0.1",
22
+ "postcss-custom-properties": "^12.1.11",
23
+ "postcss-custom-selectors": "^7.0.0",
24
+ "postcss-import": "^15.1.0",
25
+ "postcss-nesting": "^10.2.0",
26
+ "stylelint-config-standard": "^29.0.0",
27
+ "tailwindcss": "^3.2.4",
28
+ "fast-glob": "^3.2.12",
29
+ "vite": "^4.0.3",
30
+ "vue": "^3.2.45"
31
+ },
32
+ "files": [
33
+ "index.js",
34
+ "dist",
35
+ "src",
36
+ "utils"
37
+ ],
38
+ "exports": {
39
+ ".": "./index.js",
40
+ "./main.css": "./dist/main.css",
41
+ "./src/*": "./src/*",
42
+ "./utils/*": "./utils/*"
43
+ },
44
+ "engines": {
45
+ "node": ">=16.0.0",
46
+ "npm": ">=8.0.0"
47
+ },
48
+ "repository": {
49
+ "type": "git",
50
+ "url": "git+https://github.com/winduum/winduum.git"
51
+ }
52
+ }
package/src/App.vue ADDED
@@ -0,0 +1,12 @@
1
+ <script setup>
2
+ import Btn from './templates/Btn.vue'
3
+ </script>
4
+
5
+ <template>
6
+ <Btn variant="-wide" size="-lg">Button</Btn>
7
+ </template>
8
+
9
+ <style scoped>
10
+ @import "tailwindcss/utilities";
11
+ @import "styles/Ui/Btn.css";
12
+ </style>
package/src/badge.html ADDED
@@ -0,0 +1,41 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="font-sans">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Winduum UI</title>
6
+ <meta name="viewport" content="width=device-width, user-scalable=0, initial-scale=1, viewport-fit=cover"/>
7
+ <link rel="stylesheet" href="/src/styles/main.css">
8
+ <script src="/src/scripts/main.js" type="module"></script>
9
+ </head>
10
+ <body class="bg-blue-100/10 dark:bg-dark p-md flex flex-col items-start gap-4">
11
+ <div class="ui-badge">Badge</div>
12
+ <div class="ui-badge rounded-full">
13
+ <svg fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
14
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" />
15
+ </svg>
16
+ Badge
17
+ </div>
18
+ <div class="ui-badge is-sm">Badge</div>
19
+ <div class="ui-badge is-outline is-sm">Badge</div>
20
+ <a class="ui-badge is-muted">Badge</a>
21
+ <button class="ui-badge accent-secondary is-circle">
22
+ 9
23
+ </button>
24
+ <div class="ui-badge-group">
25
+ <div class="ui-badge accent-dark">
26
+ <span>npm</span>
27
+ </div>
28
+ <div class="ui-badge accent-success">
29
+ <span>7.1.2</span>
30
+ </div>
31
+ </div>
32
+ <div class="ui-badge-group">
33
+ <div class="ui-badge is-outline accent-dark">
34
+ <span>npm</span>
35
+ </div>
36
+ <div class="ui-badge is-outline accent-info">
37
+ <span>7.1.2</span>
38
+ </div>
39
+ </div>
40
+ </body>
41
+ </html>
package/src/btn.html ADDED
@@ -0,0 +1,101 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="font-sans">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Winduum UI</title>
6
+ <meta name="viewport" content="width=device-width, user-scalable=0, initial-scale=1, viewport-fit=cover"/>
7
+ <link rel="stylesheet" href="/src/styles/main.css">
8
+ <script src="/src/scripts/main.js" type="module"></script>
9
+ <script src="/src/scripts/vue.js" type="module"></script>
10
+ </head>
11
+ <body class="bg-blue-100/10 dark:bg-dark p-md flex flex-col items-start gap-4">
12
+ <button class="ui-btn is-lg w-full is-hover-fill">Button</button>
13
+ <button class="ui-btn is-wide">Button</button>
14
+ <button class="ui-btn bg-gradient-to-br from-purple-600 to-blue-500 is-outline-gradient is-hover-fill">Button</button>
15
+ <button class="ui-btn bg-gradient-to-br from-purple-600 to-blue-500">Button</button>
16
+ <button class="ui-btn accent-secondary is-raised">Button</button>
17
+ <button class="ui-btn text-dark is-raised">Button</button>
18
+ <button class="ui-btn accent-error is-outline">Button</button>
19
+ <button class="ui-btn is-outline is-hover-fill">Button</button>
20
+ <button class="ui-btn text-default is-outline is-hover-fill">Button</button>
21
+ <button class="ui-btn is-text is-hover-fill">Button</button>
22
+ <button class="ui-btn text-default is-text">Button</button>
23
+ <button class="ui-btn is-muted">Button</button>
24
+ <button class="ui-btn is-muted">
25
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
26
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
27
+ </svg>
28
+ Button
29
+ </button>
30
+
31
+ <div class="ui-btn-group">
32
+ <button class="ui-btn is-outline">Button</button>
33
+ <button class="ui-btn is-outline">Button</button>
34
+ <button class="ui-btn is-outline">Button</button>
35
+ </div>
36
+
37
+ <div class="flex gap-2">
38
+ <button class="ui-btn is-square">
39
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
40
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
41
+ </svg>
42
+ </button>
43
+ <button class="ui-btn is-outline is-square">
44
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
45
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
46
+ </svg>
47
+ </button>
48
+ <button class="ui-btn text-default is-text is-circle">
49
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
50
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
51
+ </svg>
52
+ </button>
53
+ </div>
54
+
55
+ <button class="ui-btn bg-secondary is-outline is-sm is-active is-loading">Button</button>
56
+ <button class="ui-btn is-lg">Button</button>
57
+
58
+ <div class="col flex-row gap-2">
59
+ <button class="bg-white p-xs" id="action-btn-disabled">disabled</button>
60
+ <button class="bg-white p-xs" id="action-btn-active">active</button>
61
+ <button class="bg-white p-xs" id="action-btn-loading">loading</button>
62
+ <button class="bg-white p-xs" id="action-btn-dark">dark</button>
63
+ </div>
64
+
65
+ <div id="app"></div>
66
+
67
+ <script>
68
+ document.getElementById('action-btn-active').addEventListener('click', () => {
69
+ if (!document.querySelector('.ui-btn.is-active')) {
70
+ document.querySelectorAll('.ui-btn').forEach(element => element.classList.add('is-active'))
71
+ } else {
72
+ document.querySelectorAll('.ui-btn').forEach(element => element.classList.remove('is-active'))
73
+ }
74
+ })
75
+
76
+ document.getElementById('action-btn-loading').addEventListener('click', () => {
77
+ if (!document.querySelector('.ui-btn.is-loading')) {
78
+ document.querySelectorAll('.ui-btn').forEach(element => element.classList.add('is-loading'))
79
+ } else {
80
+ document.querySelectorAll('.ui-btn').forEach(element => element.classList.remove('is-loading'))
81
+ }
82
+ })
83
+
84
+ document.getElementById('action-btn-disabled').addEventListener('click', () => {
85
+ if (!document.querySelector('.ui-btn:disabled')) {
86
+ document.querySelectorAll('.ui-btn').forEach(element => element.setAttribute('disabled', ''))
87
+ } else {
88
+ document.querySelectorAll('.ui-btn').forEach(element => element.removeAttribute('disabled'))
89
+ }
90
+ })
91
+
92
+ document.getElementById('action-btn-dark').addEventListener('click', () => {
93
+ if (!document.documentElement.classList.contains('dark')) {
94
+ document.documentElement.classList.add('dark')
95
+ } else {
96
+ document.documentElement.classList.remove('dark')
97
+ }
98
+ })
99
+ </script>
100
+ </body>
101
+ </html>
@@ -0,0 +1,57 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="font-sans">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Winduum UI</title>
6
+ <meta name="viewport" content="width=device-width, user-scalable=0, initial-scale=1, viewport-fit=cover"/>
7
+ <link rel="stylesheet" href="/src/styles/main.css">
8
+ <script src="/src/scripts/main.js" type="module"></script>
9
+ </head>
10
+ <body class="bg-blue-100/10 dark:bg-dark dark:text-light p-md flex flex-col items-start gap-4">
11
+ <div class="ui-image aspect-square w-24 rounded">
12
+ <img src="https://via.placeholder.com/128" alt="" loading="lazy">
13
+ </div>
14
+ <h1 class="ui-heading is-lg">Heading H1</h1>
15
+ <h2 class="ui-heading">Heading H2</h2>
16
+ <h3 class="ui-heading is-sm">Heading H3</h3>
17
+ <h1 class="ui-title is-lg">Title H1</h1>
18
+ <h2 class="ui-title">Title H2</h2>
19
+ <h3 class="ui-title uppercase text-accent is-sm">Title H3</h3>
20
+ <a class="ui-link is-underline" href="#">Link</a>
21
+ <progress class="ui-progress accent-error" value="50" max="100">15%</progress>
22
+ <progress class="ui-progress is-sm" max="100">15%</progress>
23
+
24
+ <div class="ui-notice accent-success">
25
+ Success notice
26
+ </div>
27
+
28
+ <div class="ui-notice accent-error">
29
+ <div class="ui-text">
30
+ <h4>Nicely done!</h4>
31
+ <p>Lorem ipsum dolor sit amet, <a href="#">consectetur adipiscing elit</a>. Nullam in elit iaculis, tristique nisi ut, mollis tellus. Nunc venenatis elit vel placerat commodo. Vestibulum odio neque, hendrerit nec venenatis at, tincidunt ut magna. Etiam hendrerit ultrices pharetra.</p>
32
+ </div>
33
+ <button class="ui-btn">
34
+ <span>Button</span>
35
+ </button>
36
+ </div>
37
+
38
+ <div class="ui-text">
39
+ <h4>Nicely done!</h4>
40
+ <p>Lorem ipsum dolor sit amet, <a href="#">consectetur adipiscing elit</a>. Nullam in elit iaculis, tristique nisi ut, mollis tellus. Nunc venenatis elit vel placerat commodo. Vestibulum odio neque, hendrerit nec venenatis at, tincidunt ut magna. Etiam hendrerit ultrices pharetra.</p>
41
+ </div>
42
+
43
+ <div class="col flex-row gap-2">
44
+ <button class="bg-accent p-xs" id="action-btn-dark">dark</button>
45
+ </div>
46
+
47
+ <script>
48
+ document.getElementById('action-btn-dark').addEventListener('click', () => {
49
+ if (!document.documentElement.classList.contains('dark')) {
50
+ document.documentElement.classList.add('dark')
51
+ } else {
52
+ document.documentElement.classList.remove('dark')
53
+ }
54
+ })
55
+ </script>
56
+ </body>
57
+ </html>
package/src/index.html ADDED
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="font-sans">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Winduum UI</title>
6
+ <meta name="viewport" content="width=device-width, user-scalable=0, initial-scale=1, viewport-fit=cover"/>
7
+ <link rel="stylesheet" href="/src/styles/main.css">
8
+ </head>
9
+ <body class="bg-blue-100/10 dark:bg-dark p-md flex flex-col items-start gap-4 text-lg font-bold text-primary">
10
+ <a href="/common.html">ui-heading, ui-title, ui-link, ui-image</a>
11
+ <a href="/badge.html">ui-badge</a>
12
+ <a href="/btn.html">ui-btn</a>
13
+ <a href="/input.html">ui-input</a>
14
+ </body>
15
+ </html>
package/src/input.html ADDED
@@ -0,0 +1,169 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" class="font-sans">
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <title>Winduum UI</title>
6
+ <meta name="viewport" content="width=device-width, user-scalable=0, initial-scale=1, viewport-fit=cover"/>
7
+ <link rel="stylesheet" href="/src/styles/main.css">
8
+ <script src="/src/scripts/main.js" type="module"></script>
9
+ </head>
10
+ <body class="bg-blue-100/10 dark:bg-dark dark:text-light p-md flex flex-col items-start gap-4 accent-warning">
11
+ <div class="col flex-row gap-2">
12
+ <button class="bg-white p-xs" id="action-btn-disabled">disabled</button>
13
+ <button class="bg-white p-xs" id="action-btn-loading">loading</button>
14
+ <button class="bg-white p-xs" id="action-btn-dark">dark</button>
15
+ </div>
16
+
17
+ <div class="ui-input is-floating">
18
+ <input type="text" id="input-label" placeholder=" " required>
19
+ <label for="input-label">Name</label>
20
+ </div>
21
+
22
+ <div class="ui-input">
23
+ <svg class="icon-l" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
24
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
25
+ </svg>
26
+ <div class="icon-r">
27
+ <svg class="text-error" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
28
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" />
29
+ </svg>
30
+ <svg fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
31
+ <path stroke-linecap="round" stroke-linejoin="round" d="M6 13.5V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m12-3V3.75m0 9.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 3.75V16.5m-6-9V3.75m0 3.75a1.5 1.5 0 010 3m0-3a1.5 1.5 0 000 3m0 9.75V10.5" />
32
+ </svg>
33
+ </div>
34
+ <input type="text" id="input" placeholder="Enter a value.." required>
35
+ <label for="input">Name</label>
36
+ <em>Not valid</em>
37
+ </div>
38
+
39
+ <div>
40
+ <div class="ui-input">
41
+ <input type="text" placeholder="Enter a value.." required>
42
+ <label>Price</label>
43
+ <div class="icon-r">
44
+ <svg class="text-error" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
45
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" />
46
+ </svg>
47
+ <span aria-label="Kč"></span>
48
+ </div>
49
+ <em>Not valid</em>
50
+ </div>
51
+ </div>
52
+
53
+ <div class="ui-select">
54
+ <select>
55
+ <option selected="" value="">- select option -</option>
56
+ <option value="1">Option 1</option>
57
+ <option value="2">Option 2</option>
58
+ <option value="3">Option 3</option>
59
+ </select>
60
+ <svg class="icon-r text-error" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor">
61
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 9v3.75m9-.75a9 9 0 11-18 0 9 9 0 0118 0zm-9 3.75h.008v.008H12v-.008z" />
62
+ </svg>
63
+ <label>How are you?</label>
64
+ </div>
65
+
66
+ <div class="ui-input">
67
+ <textarea id="textarea" required></textarea>
68
+ <label for="textarea">Name</label>
69
+ </div>
70
+
71
+ <div class="ui-input is-floating">
72
+ <input type="number" id="number" required placeholder=" ">
73
+ <label for="number">Number</label>
74
+ </div>
75
+
76
+ <div class="ui-input is-floating">
77
+ <input type="datetime-local" id="datetime" required placeholder=" ">
78
+ <label for="datetime">Datetime</label>
79
+ </div>
80
+
81
+ <div class="ui-input is-floating">
82
+ <input type="time" id="time" required placeholder=" ">
83
+ <label for="time">Datetime</label>
84
+ </div>
85
+
86
+ <div class="ui-input">
87
+ <input type="file" id="file" required>
88
+ <label for="file">Datetime</label>
89
+ </div>
90
+
91
+ <div class="ui-input-group">
92
+ <label for="input">Name</label>
93
+ <div class="ui-btn is-square is-raised bg-gray-200 text-dark">@</div>
94
+ <div class="ui-input">
95
+ <input type="tel" id="input" required>
96
+ </div>
97
+ <button class="ui-btn">Button</button>
98
+ <em>Validation</em>
99
+ </div>
100
+
101
+ <div class="flex gap-8">
102
+ <div class="ui-input">
103
+ <input type="text" placeholder=" " required>
104
+ <label>Name</label>
105
+ </div>
106
+ <div class="ui-input-mask">
107
+ <label>Name</label>
108
+ <div class="ui-checkbox">
109
+ <input type="checkbox" id="checkbox" required>
110
+ <label for="checkbox">Name</label>
111
+ <em>Not valid</em>
112
+ </div>
113
+ </div>
114
+ </div>
115
+ <div>
116
+ <div class="ui-input-mask">
117
+ <label>Name</label>
118
+ <div class="ui-switch">
119
+ <input type="checkbox" id="checkbox" required>
120
+ <em>Not valid</em>
121
+ </div>
122
+ </div>
123
+ </div>
124
+
125
+ <label class="ui-checkbox">
126
+ <input type="checkbox" required>
127
+ </label>
128
+
129
+ <label class="ui-radio">
130
+ <input type="checkbox" required>
131
+ <span>Name</span>
132
+ <em>Not valid</em>
133
+ </label>
134
+
135
+ <script>
136
+ document.getElementById('action-btn-active').addEventListener('click', () => {
137
+ if (!document.querySelector('.ui-input.is-active')) {
138
+ document.querySelectorAll('.ui-input').forEach(element => element.classList.add('is-active'))
139
+ } else {
140
+ document.querySelectorAll('.ui-input').forEach(element => element.classList.remove('is-active'))
141
+ }
142
+ })
143
+
144
+ document.getElementById('action-btn-loading').addEventListener('click', () => {
145
+ if (!document.querySelector('.ui-input.is-loading')) {
146
+ document.querySelectorAll('.ui-input').forEach(element => element.classList.add('is-loading'))
147
+ } else {
148
+ document.querySelectorAll('.ui-input').forEach(element => element.classList.remove('is-loading'))
149
+ }
150
+ })
151
+
152
+ document.getElementById('action-btn-disabled').addEventListener('click', () => {
153
+ if (!document.querySelector(':where(.ui-input, .ui-select) :where(input,select,textarea):disabled')) {
154
+ document.querySelectorAll(':where(.ui-input, .ui-select) :where(input,select,textarea)').forEach(element => element.setAttribute('disabled', ''))
155
+ } else {
156
+ document.querySelectorAll(':where(.ui-input, .ui-select) :where(input,select,textarea)').forEach(element => element.removeAttribute('disabled'))
157
+ }
158
+ })
159
+
160
+ document.getElementById('action-btn-dark').addEventListener('click', () => {
161
+ if (!document.documentElement.classList.contains('dark')) {
162
+ document.documentElement.classList.add('dark')
163
+ } else {
164
+ document.documentElement.classList.remove('dark')
165
+ }
166
+ })
167
+ </script>
168
+ </body>
169
+ </html>
File without changes
File without changes
@@ -0,0 +1,6 @@
1
+ import { createApp } from 'vue'
2
+ import App from '../App.vue'
3
+
4
+ const app = createApp(App)
5
+
6
+ app.mount('#app')