winduum 0.4.0 → 0.5.0-next.10

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 (85) hide show
  1. package/dist/main.css +1 -1
  2. package/dist/tailwind.css +1 -1
  3. package/package.json +19 -19
  4. package/src/base/config/font.css +11 -0
  5. package/src/base/{icons.css → config/mask.css} +4 -4
  6. package/src/base/config/rounded.css +14 -0
  7. package/src/base/config/spacing.css +15 -0
  8. package/src/base/config/text.css +15 -0
  9. package/src/base/config/transition.css +19 -0
  10. package/src/base/config/z.css +7 -0
  11. package/src/base/config.css +7 -81
  12. package/src/base/default.css +5 -1
  13. package/src/base/index.css +0 -3
  14. package/src/base/reset.css +11 -8
  15. package/src/base/tailwind/container.css +28 -0
  16. package/src/base/tailwind/utilities.css +39 -10
  17. package/src/base/theme/dark-rgb.css +3 -0
  18. package/src/base/theme/dark.css +3 -4
  19. package/src/base/theme/default-rgb.css +25 -0
  20. package/src/base/theme/default.css +21 -22
  21. package/src/components/dialog.css +4 -9
  22. package/src/components/field.css +1 -3
  23. package/src/libraries/dialog.css +14 -15
  24. package/src/libraries/dialog.d.ts +2 -0
  25. package/src/libraries/dialog.js +13 -4
  26. package/src/libraries/ripple.css +2 -5
  27. package/src/main-rgb.css +2 -0
  28. package/src/tailwind.css +1 -1
  29. package/src/ui/badge/bordered-rgb.css +1 -1
  30. package/src/ui/badge/bordered.css +9 -8
  31. package/src/ui/badge/circle.css +1 -1
  32. package/src/ui/badge/default.css +9 -13
  33. package/src/ui/badge/lg.css +1 -1
  34. package/src/ui/badge/muted.css +1 -1
  35. package/src/ui/badge/sm.css +1 -1
  36. package/src/ui/badge/square.css +1 -1
  37. package/src/ui/btn/bordered.css +14 -13
  38. package/src/ui/btn/circle.css +1 -1
  39. package/src/ui/btn/default.css +13 -58
  40. package/src/ui/btn/ghosted.css +1 -1
  41. package/src/ui/btn/gradient-bordered-rgb.css +1 -1
  42. package/src/ui/btn/gradient-bordered.css +27 -21
  43. package/src/ui/btn/hover-fill.css +1 -1
  44. package/src/ui/btn/index.css +1 -0
  45. package/src/ui/btn/interactive.css +35 -0
  46. package/src/ui/btn/lg.css +1 -1
  47. package/src/ui/btn/muted.css +1 -1
  48. package/src/ui/btn/raised.css +9 -6
  49. package/src/ui/btn/sm.css +1 -1
  50. package/src/ui/btn/square.css +1 -1
  51. package/src/ui/btn/wide.css +1 -2
  52. package/src/ui/check.css +27 -53
  53. package/src/ui/control/color.css +5 -8
  54. package/src/ui/control/default.css +27 -42
  55. package/src/ui/control/file.css +7 -13
  56. package/src/ui/control/floating-interactive.css +12 -0
  57. package/src/ui/control/floating.css +22 -26
  58. package/src/ui/control/icon.css +4 -5
  59. package/src/ui/control/index.css +1 -1
  60. package/src/ui/control/select.css +4 -4
  61. package/src/ui/heading/default.css +5 -10
  62. package/src/ui/heading/lg.css +2 -2
  63. package/src/ui/heading/sm.css +2 -3
  64. package/src/ui/image.css +8 -19
  65. package/src/ui/index.css +0 -1
  66. package/src/ui/info.css +6 -5
  67. package/src/ui/label.css +6 -5
  68. package/src/ui/notice.css +7 -15
  69. package/src/ui/progress/default.css +4 -8
  70. package/src/ui/progress/lg.css +1 -1
  71. package/src/ui/progress/sm.css +1 -1
  72. package/src/ui/switch.css +28 -41
  73. package/src/ui/text.css +102 -113
  74. package/src/ui/title/default.css +5 -12
  75. package/src/ui/title/lg.css +2 -2
  76. package/src/ui/title/sm.css +2 -2
  77. package/tailwind.config.js +5 -1
  78. package/utils/tailwind.cjs +3 -0
  79. package/utils/tailwind.js +51 -8
  80. package/src/base/tailwind/gutters.css +0 -343
  81. package/src/ui/control/floating-focus.css +0 -12
  82. package/src/ui/link/default.css +0 -39
  83. package/src/ui/link/index.css +0 -2
  84. package/src/ui/link/underlined.css +0 -51
  85. package/src/ui/link.css +0 -1
@@ -1,5 +1,5 @@
1
1
  /***
2
- The new CSS reset - version 1.11.1 (last updated 24.10.2023)
2
+ The new CSS reset - version 1.11.2 (last updated 15.11.2023)
3
3
  GitHub page: https://github.com/elad2412/the-new-css-reset
4
4
  ***/
5
5
 
@@ -36,7 +36,7 @@ html {
36
36
  }
37
37
 
38
38
  /* For images to not be able to exceed their container */
39
- :where(img) {
39
+ :where(img, iframe) {
40
40
  max-inline-size: 100%;
41
41
  max-block-size: 100%;
42
42
  }
@@ -79,12 +79,6 @@ html {
79
79
  content: initial;
80
80
  }
81
81
 
82
- /* fix the feature of 'hidden' attribute.
83
- display:revert; revert to element instead of attribute */
84
- :where([hidden]) {
85
- display: none;
86
- }
87
-
88
82
  /* revert for bug in Chromium browsers
89
83
  - fix for the content editable attribute will work properly.
90
84
  - webkit-user-select: auto; added for Safari in case of using user-select:none on wrapper element */
@@ -101,7 +95,16 @@ html {
101
95
  -webkit-user-drag: element;
102
96
  }
103
97
 
98
+ /* Remove details summary webkit styles */
99
+ ::-webkit-details-marker {
100
+ display: none;
101
+ }
102
+
104
103
  /* fix firefox svg */
105
104
  :where(svg, use, path, symbol) {
106
105
  all: revert-layer;
107
106
  }
107
+
108
+ :where(search) {
109
+ display: block;
110
+ }
@@ -0,0 +1,28 @@
1
+ :root, :host {
2
+ --container: min(100% - (var(--container-padding) * 2), var(--container-width));
3
+ --container-sm: min(100% - (var(--container-padding) * 2), var(--container-sm-width));
4
+ --container-lg: min(100% - (var(--container-padding) * 2), var(--container-lg-width));
5
+ --container-width: 80rem;
6
+ --container-sm-width: 50rem;
7
+ --container-lg-width: 90rem;
8
+ --container-padding: 5vw;
9
+ --container-padding-calc: max(calc(50vw - (var(--container-width) / 2)), var(--container-padding));
10
+ }
11
+
12
+ @layer components {
13
+ .grid-cols-container {
14
+ display: grid;
15
+ grid-template-columns:
16
+ [container-full-start] minmax(var(--container-padding), 1fr)
17
+ [container-lg-start] minmax(0, calc((var(--container-lg-width) - var(--container-width)) / 2))
18
+ [container-start] minmax(0, calc((var(--container-width) - var(--container-sm-width)) / 2))
19
+ [container-sm-start] min(100% - (var(--container-padding) * 2), var(--container-sm-width)) [container-sm-end]
20
+ minmax(0, calc((var(--container-width) - var(--container-sm-width)) / 2)) [container-end]
21
+ minmax(0, calc((var(--container-lg-width) - var(--container-width)) / 2)) [container-lg-end]
22
+ minmax(var(--container-padding), 1fr) [container-full-end];
23
+ }
24
+
25
+ :where(.grid-cols-container > *) {
26
+ grid-column: container;
27
+ }
28
+ }
@@ -1,18 +1,27 @@
1
- @layer utilities {
1
+ @layer components {
2
2
  .animate {
3
- animation-duration: var(--transition-duration);
3
+ animation-duration: var(--duration);
4
4
  animation-fill-mode: both;
5
5
  }
6
6
 
7
- .container {
8
- margin-left: auto;
9
- margin-right: auto;
10
- padding-left: var(--container-padding);
11
- padding-right: var(--container-padding);
12
- max-width: var(--container-width);
7
+ .underline {
8
+ text-underline-position: under;
9
+ text-decoration-thickness: max(1px, 0.0625em);
10
+ text-underline-offset: -0.125rem;
11
+ transition: all var(--duration) var(--ease-in-out);
13
12
 
14
- &:where(.container-sm) {
15
- --container-width: var(--container-width-sm);
13
+ &:where([href], button, .interactive) {
14
+ &:hover {
15
+ @media (hover: hover) and (pointer: fine) {
16
+ text-decoration-color: var(--color-current);
17
+ text-underline-offset: 0;
18
+ }
19
+ }
20
+
21
+ &:focus {
22
+ text-decoration-color: var(--color-current);
23
+ text-underline-offset: 0;
24
+ }
16
25
  }
17
26
  }
18
27
 
@@ -30,4 +39,24 @@
30
39
  opacity: 0.3;
31
40
  transition: opacity 0.3s ease-out;
32
41
  }
42
+
43
+ .flex-col {
44
+ display: flex;
45
+ }
46
+
47
+ .flex-between {
48
+ display: flex;
49
+ justify-content: space-between;
50
+ gap: var(--spacing-sm);
51
+ }
52
+
53
+ .flex-center {
54
+ display: flex;
55
+ align-items: center;
56
+ gap: var(--spacing-sm);
57
+ }
58
+
59
+ [hidden] {
60
+ display: none;
61
+ }
33
62
  }
@@ -1,4 +1,7 @@
1
1
  :root.dark, :host.dark {
2
+ --color-scheme: dark;
3
+ --color-main: rgb(var(--color-main-rgb));
4
+ --color-body: rgb(var(--color-body-rgb));
2
5
  --color-main-rgb: 255 255 255;
3
6
  --color-body-rgb: 25 26 27;
4
7
  }
@@ -1,6 +1,5 @@
1
1
  :root.dark, :host.dark {
2
- --color-main: rgb(var(--color-main-rgb));
3
- --color-body: rgb(var(--color-body-rgb));
4
-
5
- color-scheme: dark;
2
+ --color-scheme: dark;
3
+ --color-main: rgb(255 255 255);
4
+ --color-body: rgb(25 26 27);
6
5
  }
@@ -1,4 +1,29 @@
1
1
  :root, :host {
2
+ --color-scheme: light;
3
+ --color-current: rgb(var(--color-current-rgb));
4
+ --color-current-fg: rgb(var(--color-current-fg-rgb));
5
+ --color-accent: rgb(var(--color-accent-rgb));
6
+ --color-accent-fg: rgb(var(--color-accent-fg-rgb));
7
+ --color-primary: rgb(var(--color-primary-rgb));
8
+ --color-primary-fg: rgb(var(--color-primary-fg-rgb));
9
+ --color-main: var(--color-main-primary);
10
+ --color-main-fg: rgb(var(--color-main-fg-rgb));
11
+ --color-main-primary: rgb(var(--color-main-rgb));
12
+ --color-main-secondary: color-mix(in sRGB, var(--color-main) 75%, var(--color-main-fg));
13
+ --color-main-tertiary: color-mix(in sRGB, var(--color-main) 50%, var(--color-main-fg));
14
+ --color-body: var(--color-body-primary);
15
+ --color-body-fg: rgb(var(--color-body-fg-rgb));
16
+ --color-body-primary: rgb(var(--color-body-rgb));
17
+ --color-body-secondary: color-mix(in sRGB, var(--color-body) 95%, var(--color-body-fg));
18
+ --color-body-tertiary: color-mix(in sRGB, var(--color-body) 90%, var(--color-body-fg));
19
+ --color-light: rgb(var(--color-light-rgb));
20
+ --color-light-fg: rgb(var(--color-light-fg-rgb));
21
+ --color-dark: rgb(var(--color-dark-rgb));
22
+ --color-dark-fg: rgb(var(--color-dark-fg-rgb));
23
+ --color-success: rgb(var(--color-success-rgb));
24
+ --color-error: rgb(var(--color-error-rgb));
25
+ --color-warning: rgb(var(--color-warning-rgb));
26
+ --color-info: rgb(var(--color-info-rgb));
2
27
  --color-current-rgb: var(--color-main-rgb);
3
28
  --color-current-fg-rgb: var(--color-main-fg-rgb);
4
29
  --color-accent-rgb: var(--color-primary-rgb);
@@ -1,28 +1,27 @@
1
1
  :root, :host {
2
- --color-current: rgb(var(--color-current-rgb));
3
- --color-current-fg: rgb(var(--color-current-fg-rgb));
4
- --color-accent: rgb(var(--color-accent-rgb));
5
- --color-accent-fg: rgb(var(--color-accent-fg-rgb));
6
- --color-primary: rgb(var(--color-primary-rgb));
7
- --color-primary-fg: rgb(var(--color-primary-fg-rgb));
8
- --color-main: var(--color-main-primary);
9
- --color-main-fg: rgb(var(--color-main-fg-rgb));
10
- --color-main-primary: rgb(var(--color-main-rgb));
2
+ --color-scheme: light;
3
+ --color-current: var(--color-main);
4
+ --color-current-fg: var(--color-main-fg);
5
+ --color-accent: var(--color-primary);
6
+ --color-accent-fg: var(--color-primary-fg);
7
+ --color-primary: rgb(3 138 255);
8
+ --color-primary-fg: var(--color-light);
9
+ --color-main: rgb(17 19 2);
10
+ --color-main-fg: var(--color-body);
11
+ --color-main-primary: var(--color-main);
11
12
  --color-main-secondary: color-mix(in sRGB, var(--color-main) 75%, var(--color-main-fg));
12
13
  --color-main-tertiary: color-mix(in sRGB, var(--color-main) 50%, var(--color-main-fg));
13
- --color-body: var(--color-body-primary);
14
- --color-body-fg: rgb(var(--color-body-fg-rgb));
15
- --color-body-primary: rgb(var(--color-body-rgb));
14
+ --color-body: rgb(255 255 255);
15
+ --color-body-fg: var(--color-main);
16
+ --color-body-primary: var(--color-body);
16
17
  --color-body-secondary: color-mix(in sRGB, var(--color-body) 95%, var(--color-body-fg));
17
18
  --color-body-tertiary: color-mix(in sRGB, var(--color-body) 90%, var(--color-body-fg));
18
- --color-light: rgb(var(--color-light-rgb));
19
- --color-light-fg: rgb(var(--color-light-fg-rgb));
20
- --color-dark: rgb(var(--color-dark-rgb));
21
- --color-dark-fg: rgb(var(--color-dark-fg-rgb));
22
- --color-success: rgb(var(--color-success-rgb));
23
- --color-error: rgb(var(--color-error-rgb));
24
- --color-warning: rgb(var(--color-warning-rgb));
25
- --color-info: rgb(var(--color-info-rgb));
26
-
27
- color-scheme: light;
19
+ --color-light: rgb(255 255 255);
20
+ --color-light-fg: var(--color-dark);
21
+ --color-dark: rgb(17 19 21);
22
+ --color-dark-fg: var(--color-light);
23
+ --color-success: rgb(33 154 67);
24
+ --color-error: rgb(254 50 75);
25
+ --color-warning: rgb(254 179 53);
26
+ --color-info: rgb(45 168 234);
28
27
  }
@@ -1,20 +1,15 @@
1
1
  .c-dialog {
2
- --c-dialog-py: 1.5rem;
3
- --c-dialog-px: 1.5rem;
4
- --c-dialog-width: 35rem;
5
- --c-dialog-animation-duration: var(--transition-duration);
6
-
7
- animation: var(--c-dialog-animation-duration) ease 0s backwards 1 fade-in-down;
2
+ animation: var(--duration) ease 0s backwards 1 fade-in-down;
8
3
  position: relative;
9
4
  z-index: var(--z-20);
10
5
  margin: auto;
11
6
  background-color: var(--color-body-primary);
12
7
  width: 100%;
13
- max-width: var(--c-dialog-width);
8
+ max-width: var(--c-dialog-width, 35rem);
14
9
  border-radius: var(--rounded-3xl);
15
- padding: var(--c-dialog-py) var(--c-dialog-px);
10
+ padding: var(--c-dialog-py, 1.5rem) var(--c-dialog-px, 1.5rem);
16
11
 
17
12
  :where(dialog:not([open])) & {
18
- animation: var(--c-dialog-animation-duration) ease 0s forwards 1 fade-out-up;
13
+ animation: var(--duration) ease 0s forwards 1 fade-out-up;
19
14
  }
20
15
  }
@@ -1,9 +1,7 @@
1
1
  .c-field {
2
- --c-field-gap: 0.5rem;
3
-
4
2
  display: flex;
5
3
  flex-direction: column;
6
- gap: var(--c-field-gap);
4
+ gap: var(--c-field-gap, 0.5rem);
7
5
 
8
6
  .validated &:has(:invalid) {
9
7
  & :where(.ui-info[hidden]) {
@@ -1,27 +1,22 @@
1
1
  .lib-dialog {
2
- --lib-ripple-bg: color-mix(in sRGB, var(--color-dark) calc(var(--tw-bg-opacity, 0.8) * 100%), transparent);
3
- --lib-dialog-py: 2rem;
4
- --lib-dialog-px: 1.5rem;
5
- --lib-dialog-animation-duration: var(--transition-duration);
6
-
7
2
  inset: 0;
8
3
  z-index: var(--z-30);
9
4
  position: fixed;
10
5
  overflow: auto;
11
6
  -webkit-overflow-scrolling: touch;
12
- background-color: var(--lib-ripple-bg);
7
+ background-color: var(--lib-ripple-bg, color-mix(in sRGB, var(--color-dark) calc(var(--tw-bg-opacity, 0.8) * 100%), transparent));
13
8
  overscroll-behavior: contain;
14
9
  display: flex;
15
- visibility: hidden;
16
- padding: var(--lib-dialog-py) var(--lib-dialog-px);
10
+ padding: var(--lib-dialog-py, 2rem) var(--lib-dialog-px, 1.5rem);
11
+ transition: var(--transition-background);
17
12
 
18
- &:not([open]) {
19
- animation: var(--lib-dialog-animation-duration) ease 0s forwards 1 fade-out;
20
- pointer-events: none;
13
+ &, &::backdrop {
14
+ visibility: hidden;
21
15
  }
22
16
 
23
- &[open] {
24
- animation: var(--lib-dialog-animation-duration) ease 0s backwards 1 fade-in;
17
+ &:not([open]) {
18
+ background-color: transparent;
19
+ pointer-events: none;
25
20
  }
26
21
 
27
22
  .is-lib-dialog-open & {
@@ -30,6 +25,10 @@
30
25
  }
31
26
 
32
27
  .is-lib-dialog-open {
33
- overflow: hidden;
34
- padding-right: var(--lib-dialog-scrollbar-width, 0);
28
+ scrollbar-width: none;
29
+ padding-inline-end: var(--lib-dialog-scrollbar-width, 0);
30
+
31
+ &::-webkit-scrollbar {
32
+ display: none;
33
+ }
35
34
  }
@@ -2,6 +2,8 @@ export interface DefaultOptions {
2
2
  openClass: string;
3
3
  scrollbarWidthProperty: string;
4
4
  show: {
5
+ onCloseStart: Function
6
+ onCloseEnd: Function
5
7
  closable: boolean | null;
6
8
  };
7
9
  close: {
@@ -2,7 +2,9 @@ export const defaultOptions = {
2
2
  openClass: 'is-lib-dialog-open',
3
3
  scrollbarWidthProperty: '--lib-dialog-scrollbar-width',
4
4
  show: {
5
- closable: true ?? null
5
+ closable: true ?? null,
6
+ onCloseStart: () => null,
7
+ onCloseEnd: () => null
6
8
  },
7
9
  close: {
8
10
  remove: false ?? null
@@ -29,6 +31,7 @@ export const dismissDialog = async (selector, options = defaultOptions.close) =>
29
31
  options.remove && selector.remove()
30
32
 
31
33
  if (!document.querySelector('dialog[open]')) {
34
+ document.documentElement.style.removeProperty(defaultOptions.scrollbarWidthProperty)
32
35
  document.documentElement.classList.remove(defaultOptions.openClass)
33
36
  }
34
37
  }
@@ -47,13 +50,19 @@ export const showDialog = async (selector, options = defaultOptions.show) => {
47
50
  if (!selector?._dialogHasEvents && options.closable) {
48
51
  selector.addEventListener('keydown', async ({ key }) => {
49
52
  if (key === 'Escape') {
50
- setTimeout(() => dismissDialog(selector, options), 1)
53
+ setTimeout(async () => {
54
+ options.onCloseStart()
55
+ await dismissDialog(selector, options)
56
+ options.onCloseEnd()
57
+ }, 1)
51
58
  }
52
59
  })
53
60
 
54
- selector.addEventListener('click', ({ target }) => {
61
+ selector.addEventListener('click', async ({ target }) => {
55
62
  if (target.nodeName === 'DIALOG') {
56
- closeDialog(selector, options)
63
+ options.onCloseStart()
64
+ await closeDialog(selector, options)
65
+ options.onCloseEnd()
57
66
  }
58
67
  })
59
68
 
@@ -1,11 +1,8 @@
1
1
  .lib-ripple {
2
- --lib-ripple-animation-duration: 1s;
3
- --lib-ripple-bg: color-mix(in sRGB, var(--color-body) calc(var(--tw-bg-opacity, 0.4) * 100%), transparent);
4
-
5
2
  position: absolute;
6
- background: var(--lib-ripple-bg);
3
+ background: var(--lib-ripple-bg, color-mix(in sRGB, var(--color-body) calc(var(--tw-bg-opacity, 0.4) * 100%), transparent));
7
4
  border-radius: 50%;
8
5
  transform: scale(0);
9
- animation-duration: var(--lib-ripple-animation-duration);
6
+ animation-duration: var(--lib-ripple-animation-duration, 1s);
10
7
  pointer-events: none;
11
8
  }
package/src/main-rgb.css CHANGED
@@ -1,3 +1,5 @@
1
+ @import "base/theme/default-rgb.css";
2
+ @import "base/theme/dark-rgb.css";
1
3
  @import "ui/btn/default-rgb.css";
2
4
  @import "ui/btn/bordered-rgb.css";
3
5
  @import "ui/btn/gradient-bordered-rgb.css";
package/src/tailwind.css CHANGED
@@ -1,3 +1,3 @@
1
1
  @import "base/tailwind/base.css";
2
2
  @import "base/tailwind/utilities.css";
3
- @import "base/tailwind/gutters.css";
3
+ @import "base/tailwind/container.css";
@@ -1,3 +1,3 @@
1
1
  .ui-badge:where(.bordered) {
2
- border: var(--ui-badge-border-width) solid rgb(var(--color-accent-rgb) / var(--ui-badge-border-opacity));
2
+ border-color: rgb(var(--color-accent-rgb) / var(--ui-badge-border-opacity));
3
3
  }
@@ -1,10 +1,11 @@
1
- .ui-badge:where(.bordered) {
2
- --color-current: var(--color-accent);
3
- --ui-badge-bg-opacity: 0%;
4
- --ui-badge-border-width: 1px;
5
- --ui-badge-border-opacity: calc(var(--tw-border-opacity, 1) * 100%);
1
+ .ui-badge {
2
+ &:where(.bordered) {
3
+ border: var(--ui-badge-border-width, 1px) solid color-mix(in sRGB, var(--color-accent) var(--ui-badge-border-opacity, calc(var(--tw-border-opacity, 1) * 100%)), transparent);
4
+ padding-inline: calc(var(--ui-badge-px) - var(--ui-badge-border-width, 1px));
5
+ }
6
6
 
7
- border: var(--ui-badge-border-width) solid color-mix(in sRGB, var(--color-accent) var(--ui-badge-border-opacity), transparent);
8
- padding-left: calc(var(--ui-badge-px) - var(--ui-badge-border-width));
9
- padding-right: calc(var(--ui-badge-px) - var(--ui-badge-border-width));
7
+ &:is(.bordered) {
8
+ --color-current: var(--color-accent);
9
+ --ui-badge-bg-opacity: 0%;
10
+ }
10
11
  }
@@ -1,4 +1,4 @@
1
- .ui-badge:where(.circle) {
1
+ .ui-badge:is(.circle) {
2
2
  --ui-badge-px: var(--ui-badge-py);
3
3
  --ui-badge-width: var(--ui-badge-height);
4
4
  --ui-badge-border-radius: var(--rounded-full);
@@ -1,34 +1,30 @@
1
1
  .ui-badge {
2
2
  --color-current: var(--color-accent-fg);
3
- --ui-badge-width: fit-content;
4
3
  --ui-badge-height: 1.5rem;
5
4
  --ui-badge-py: 0;
6
5
  --ui-badge-px: 0.5rem;
7
- --ui-badge-border-radius: var(--rounded-lg);
8
- --ui-badge-font-size: 0.75rem;
9
- --ui-badge-font-weight: var(--font-normal);
10
- --ui-badge-bg: color-mix(in sRGB, var(--color-accent) var(--ui-badge-bg-opacity), var(--ui-badge-bg-mix));
11
- --ui-badge-bg-mix: transparent;
6
+ --ui-badge-bg: color-mix(in sRGB, var(--color-accent) var(--ui-badge-bg-opacity), var(--ui-badge-bg-mix, transparent));
12
7
  --ui-badge-bg-opacity: calc(var(--tw-bg-opacity, 1) * 100%);
13
8
  --ui-badge-color: color-mix(in sRGB, var(--color-current) var(--ui-badge-color-opacity), transparent);
14
9
  --ui-badge-color-opacity: calc(var(--tw-text-opacity, 1) * 100%);
15
- --ui-badge-gap: 0.25rem;
16
10
 
17
- width: var(--ui-badge-width);
11
+ width: var(--ui-badge-width, auto);
18
12
  height: var(--ui-badge-height);
19
13
  padding: var(--ui-badge-py) var(--ui-badge-px);
20
- border-radius: var(--ui-badge-border-radius);
21
- font-size: var(--ui-badge-font-size);
22
- font-weight: var(--ui-badge-font-weight);
14
+ border-radius: var(--ui-badge-border-radius, var(--rounded-lg));
15
+ font-family: var(--ui-badge-font-family, inherit);
16
+ font-weight: var(--ui-badge-font-weight, inherit);
17
+ font-size: var(--ui-badge-font-size, var(--text-xs));
18
+ letter-spacing: var(--ui-badge-letter-spacing, inherit);
23
19
  background-color: var(--ui-badge-bg);
24
20
  color: var(--ui-badge-color);
25
21
  display: inline-flex;
26
- align-items: center;
27
22
  text-align: center;
23
+ align-items: center;
28
24
  justify-content: center;
29
25
  white-space: nowrap;
30
26
  flex-shrink: 0;
31
27
  position: relative;
32
- gap: var(--ui-badge-gap);
28
+ gap: var(--ui-badge-gap, var(--spacing-xs));
33
29
  transition: var(--transition-opacity);
34
30
  }
@@ -1,3 +1,3 @@
1
- .ui-badge:where(.lg) {
1
+ .ui-badge:is(.lg) {
2
2
  --ui-badge-height: 1.75rem;
3
3
  }
@@ -1,4 +1,4 @@
1
- .ui-badge:where(.muted) {
1
+ .ui-badge:is(.muted) {
2
2
  --color-current: var(--color-accent);
3
3
  --ui-badge-bg-opacity: 10%;
4
4
  }
@@ -1,4 +1,4 @@
1
- .ui-badge:where(.sm) {
1
+ .ui-badge:is(.sm) {
2
2
  --ui-badge-height: 1.25rem;
3
3
  --ui-badge-font-size: 0.625rem;
4
4
  }
@@ -1,4 +1,4 @@
1
- .ui-badge:where(.square) {
1
+ .ui-badge:is(.square) {
2
2
  --ui-badge-px: var(--ui-badge-py);
3
3
  --ui-badge-width: var(--ui-badge-height);
4
4
  }
@@ -1,15 +1,16 @@
1
- .ui-btn:where(.bordered) {
2
- --color-current: var(--color-accent);
3
- --ui-btn-hover-bg-mix: transparent;
4
- --ui-btn-hover-bg-opacity: 10%;
5
- --ui-btn-active-bg-mix: transparent;
6
- --ui-btn-active-bg-opacity: 20%;
7
- --ui-btn-focus-outline-offset: -2px;
8
- --ui-btn-bg-opacity: 0%;
9
- --ui-btn-border-width: 1px;
10
- --ui-btn-border-opacity: calc(var(--tw-border-opacity, 0.3) * 100%);
1
+ .ui-btn {
2
+ &:where(.bordered) {
3
+ border: var(--ui-btn-border-width, 1px) solid color-mix(in sRGB, var(--color-accent) var(--ui-btn-border-opacity, calc(var(--tw-border-opacity, 0.3) * 100%)), transparent);
4
+ padding-inline: calc(var(--ui-btn-px) - var(--ui-btn-border-width, 1px));
5
+ }
11
6
 
12
- border: var(--ui-btn-border-width) solid color-mix(in sRGB, var(--color-accent) var(--ui-btn-border-opacity), transparent);
13
- padding-left: calc(var(--ui-btn-px) - var(--ui-btn-border-width));
14
- padding-right: calc(var(--ui-btn-px) - var(--ui-btn-border-width));
7
+ &:is(.bordered) {
8
+ --color-current: var(--color-accent);
9
+ --ui-btn-hover-bg-mix: transparent;
10
+ --ui-btn-hover-bg-opacity: 10%;
11
+ --ui-btn-active-bg-mix: transparent;
12
+ --ui-btn-active-bg-opacity: 20%;
13
+ --ui-btn-focus-outline-offset: -2px;
14
+ --ui-btn-bg-opacity: 0%;
15
+ }
15
16
  }
@@ -1,4 +1,4 @@
1
- .ui-btn:where(.circle) {
1
+ .ui-btn:is(.circle) {
2
2
  --ui-btn-px: var(--ui-btn-py);
3
3
  --ui-btn-width: var(--ui-btn-height);
4
4
  --ui-btn-border-radius: var(--rounded-full);
@@ -1,55 +1,34 @@
1
1
  .ui-btn {
2
2
  --color-current: var(--color-accent-fg);
3
- --ui-btn-width: fit-content;
4
3
  --ui-btn-height: 2.25rem;
5
- --ui-btn-gap: 0.375rem;
6
4
  --ui-btn-py: 0.375rem;
7
5
  --ui-btn-px: 0.75rem;
8
- --ui-btn-border-radius: var(--rounded);
9
- --ui-btn-font-size: 0.875rem;
10
- --ui-btn-font-weight: var(--font-medium);
11
- --ui-btn-letter-spacing: 0;
12
- --ui-btn-bg: color-mix(in sRGB, var(--color-accent) var(--ui-btn-bg-opacity), var(--ui-btn-bg-mix));
13
- --ui-btn-bg-mix: transparent;
6
+ --ui-btn-bg: color-mix(in sRGB, var(--color-accent) var(--ui-btn-bg-opacity), var(--ui-btn-bg-mix, transparent));
14
7
  --ui-btn-bg-opacity: calc(var(--tw-bg-opacity, 1) * 100%);
15
8
  --ui-btn-color: color-mix(in sRGB, var(--color-current) var(--ui-btn-color-opacity), transparent);
16
9
  --ui-btn-color-opacity: calc(var(--tw-text-opacity, 1) * 100%);
17
- --ui-btn-outline-width: 2px;
18
- --ui-btn-hover-color: var(--color-current);
19
- --ui-btn-hover-bg-mix: black;
20
- --ui-btn-hover-bg-opacity: 80%;
21
- --ui-btn-active-color: var(--color-current);
22
- --ui-btn-active-bg-mix: black;
23
- --ui-btn-active-bg-opacity: 90%;
24
- --ui-btn-focus-outline-color-mix: transparent;
25
- --ui-btn-focus-outline-color-opacity: 50%;
26
- --ui-btn-focus-outline-offset: 2px;
27
- --ui-btn-disabled-opacity: 70%;
28
10
 
29
- width: var(--ui-btn-width);
11
+ width: var(--ui-btn-width, auto);
30
12
  height: var(--ui-btn-height);
31
13
  padding: var(--ui-btn-py) var(--ui-btn-px);
32
- border-radius: var(--ui-btn-border-radius);
33
- font-size: var(--ui-btn-font-size);
34
- font-weight: var(--ui-btn-font-weight);
35
- letter-spacing: var(--ui-btn-letter-spacing);
14
+ border-radius: var(--ui-btn-border-radius, var(--rounded));
15
+ font-size: var(--ui-btn-font-size, 0.875rem);
16
+ font-weight: var(--ui-btn-font-weight, var(--font-medium));
17
+ letter-spacing: var(--ui-btn-letter-spacing, 0);
36
18
  background-color: var(--ui-btn-bg);
37
19
  color: var(--ui-btn-color);
38
20
  user-select: none;
39
21
  overflow: hidden;
40
22
  display: inline-flex;
23
+ text-align: center;
41
24
  align-items: center;
42
25
  justify-content: center;
43
26
  white-space: nowrap;
44
- flex-shrink: 0;
45
27
  position: relative;
46
- transition:
47
- var(--transition-background),
48
- var(--transition-color),
49
- outline-color var(--transition-duration),
50
- outline-offset 100ms cubic-bezier(0.4, 0, 0.2, 1);
51
- gap: var(--ui-btn-gap);
52
- outline: var(--ui-btn-outline-width) solid transparent;
28
+ flex-shrink: 0;
29
+ z-index: 0;
30
+ gap: var(--ui-btn-gap, 0.375rem);
31
+ outline: var(--ui-btn-outline-width, 2px) solid transparent;
53
32
  outline-offset: 0;
54
33
 
55
34
  &:where([class*="accent-main"]) {
@@ -60,31 +39,7 @@
60
39
  --ui-btn-hover-bg-mix: var(--color-body-fg);
61
40
  }
62
41
 
63
- &:is([href], button, [role="button"]) {
64
- &:disabled {
65
- opacity: var(--ui-btn-disabled-opacity);
66
- cursor: not-allowed;
67
- }
68
-
69
- &:not(:disabled) {
70
- &:hover {
71
- @media (hover: hover) and (pointer: fine) {
72
- --ui-btn-color: var(--ui-btn-hover-color);
73
- --ui-btn-bg-mix: var(--ui-btn-hover-bg-mix);
74
- --ui-btn-bg-opacity: var(--ui-btn-hover-bg-opacity);
75
- }
76
- }
77
-
78
- &:focus {
79
- outline-color: color-mix(in sRGB, var(--color-accent) var(--ui-btn-focus-outline-color-opacity), var(--ui-btn-focus-outline-color-mix));
80
- outline-offset: var(--ui-btn-focus-outline-offset);
81
- }
82
-
83
- &:is(:active, .active) {
84
- --ui-btn-color: var(--ui-btn-active-color);
85
- --ui-btn-bg-mix: var(--ui-btn-active-bg-mix);
86
- --ui-btn-bg-opacity: var(--ui-btn-active-bg-opacity);
87
- }
88
- }
42
+ &:where(input)::after {
43
+ content: attr(aria-label);
89
44
  }
90
45
  }
@@ -1,4 +1,4 @@
1
- .ui-btn:where(.ghosted) {
1
+ .ui-btn:is(.ghosted) {
2
2
  --ui-btn-hover-bg-mix: transparent;
3
3
  --ui-btn-hover-bg-opacity: 10%;
4
4
  --ui-btn-active-bg-mix: transparent;