winduum 0.6.0 → 0.7.0-next.1

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/dist/main.css +1 -1
  2. package/dist/tailwind.css +1 -1
  3. package/package.json +1 -1
  4. package/plugin/tailwind.cjs +198 -163
  5. package/plugin/tailwind.d.ts +19 -0
  6. package/plugin/tailwind.js +30 -184
  7. package/plugin/utilities/color.js +69 -0
  8. package/plugin/utilities/common.js +80 -0
  9. package/plugin/utilities/divide-gap.js +20 -0
  10. package/plugin/utilities/dot.js +11 -0
  11. package/plugin/utilities/flex.js +12 -0
  12. package/src/base/defaults.css +1 -1
  13. package/src/base/theme/default.css +0 -2
  14. package/src/components/compare.css +10 -11
  15. package/src/components/dialog/content.css +1 -1
  16. package/src/components/dialog/default.css +9 -7
  17. package/src/components/field.css +1 -1
  18. package/src/ui/badge/bordered.css +4 -3
  19. package/src/ui/badge/default.css +7 -11
  20. package/src/ui/badge/muted.css +2 -2
  21. package/src/ui/btn/bordered.css +6 -5
  22. package/src/ui/btn/default.css +17 -11
  23. package/src/ui/btn/ghosted.css +4 -4
  24. package/src/ui/btn/gradient-bordered.css +9 -7
  25. package/src/ui/btn/gradient.css +3 -1
  26. package/src/ui/btn/hover-fill.css +4 -4
  27. package/src/ui/btn/interactive.css +17 -9
  28. package/src/ui/btn/loading.css +1 -1
  29. package/src/ui/btn/muted.css +4 -4
  30. package/src/ui/btn/raised.css +6 -10
  31. package/src/ui/check/default.css +38 -24
  32. package/src/ui/control/default.css +38 -14
  33. package/src/ui/control/file.css +11 -8
  34. package/src/ui/control/select.css +2 -2
  35. package/src/ui/group/default.css +9 -4
  36. package/src/ui/info.css +1 -1
  37. package/src/ui/link/interactive.css +5 -7
  38. package/src/ui/notice/default.css +15 -6
  39. package/src/ui/progress/default.css +6 -7
  40. package/src/ui/range/default-props.css +3 -3
  41. package/src/ui/range/default.css +48 -35
  42. package/src/ui/range/multi.css +12 -33
  43. package/src/ui/range/vertical.css +3 -4
  44. package/src/ui/switch/default.css +32 -24
  45. package/src/ui/text/default.css +5 -5
  46. package/src/ui/title/default.css +1 -1
  47. package/src/utilities/ripple.css +4 -1
  48. package/src/utilities/skeleton.css +6 -4
  49. package/tailwind.config.js +5 -1
@@ -1,18 +1,19 @@
1
1
  .ui-btn {
2
2
  &:where(.bordered) {
3
3
  --tw-border-opacity: 0.3;
4
+ --tw-border-space: var(--space);
4
5
 
5
- border: var(--ui-btn-border-width, 1px) solid color-mix(in var(--space), var(--color-accent) var(--ui-btn-border-opacity, calc(var(--tw-border-opacity) * 100%)), transparent);
6
+ border: var(--ui-btn-border-width, 1px) solid color-mix(in var(--tw-border-space), var(--color-accent) calc(var(--tw-border-opacity) * 100%), transparent);
6
7
  padding-inline: calc(var(--ui-btn-px) - var(--ui-btn-border-width, 1px));
7
8
  }
8
9
 
9
10
  &:is(.bordered) {
10
- --color-current: var(--color-accent);
11
11
  --ui-btn-hover-bg-mix: transparent;
12
- --ui-btn-hover-bg-opacity: 10%;
12
+ --ui-btn-hover-bg-opacity: 0.1;
13
13
  --ui-btn-active-bg-mix: transparent;
14
- --ui-btn-active-bg-opacity: 20%;
14
+ --ui-btn-active-bg-opacity: 0.2;
15
15
  --ui-btn-focus-outline-offset: -2px;
16
- --ui-btn-bg-opacity: 0%;
16
+ --color-accent-foreground: var(--color-accent);
17
+ --tw-bg-opacity: 0;
17
18
  }
18
19
  }
@@ -1,32 +1,30 @@
1
1
  .ui-btn {
2
2
  --tw-bg-opacity: 1;
3
3
  --tw-text-opacity: 1;
4
- --color-current: var(--color-accent-foreground);
5
- --ui-btn-bg: color-mix(in var(--space), var(--color-accent) var(--ui-btn-bg-opacity), var(--ui-btn-bg-mix, transparent));
6
- --ui-btn-bg-opacity: calc(var(--tw-bg-opacity) * 100%);
7
- --ui-btn-color: color-mix(in var(--space), var(--color-current) var(--ui-btn-color-opacity), transparent);
8
- --ui-btn-color-opacity: calc(var(--tw-text-opacity) * 100%);
4
+ --tw-bg-mix: transparent;
5
+ --tw-bg-space: var(--space);
6
+ --tw-text-space: var(--space);
9
7
 
10
- width: var(--ui-btn-width, auto);
11
- height: var(--ui-btn-height);
8
+ inline-size: var(--ui-btn-width);
9
+ block-size: var(--ui-btn-height);
12
10
  padding: var(--ui-btn-py) var(--ui-btn-px);
13
11
  border-radius: var(--ui-btn-border-radius, var(--rounded));
14
12
  font-size: var(--ui-btn-font-size, var(--text-sm));
15
13
  font-weight: var(--ui-btn-font-weight, var(--font-medium));
16
14
  letter-spacing: var(--ui-btn-letter-spacing, 0);
17
- background-color: var(--ui-btn-bg);
18
- color: var(--ui-btn-color);
15
+ background-color: color-mix(in var(--tw-bg-space), var(--ui-btn-bg, var(--color-accent)) calc(var(--tw-bg-opacity) * 100%), var(--tw-bg-mix));
16
+ color: color-mix(in var(--tw-text-space), var(--ui-btn-color, var(--color-accent-foreground)) calc(var(--tw-text-opacity) * 100%), transparent);
19
17
  gap: var(--ui-btn-gap, var(--spacing-sm));
20
18
  outline: var(--ui-btn-outline-width, 2px) solid transparent;
21
19
  outline-offset: 0;
22
20
  user-select: none;
23
- overflow: hidden;
21
+ overflow: clip;
24
22
  display: inline-flex;
25
23
  text-align: center;
26
24
  align-items: center;
27
25
  justify-content: center;
28
- white-space: nowrap;
29
26
  position: relative;
27
+ line-height: 1;
30
28
  flex-shrink: 0;
31
29
  z-index: 0;
32
30
 
@@ -38,6 +36,14 @@
38
36
  --ui-btn-hover-bg-mix: var(--color-body-foreground);
39
37
  }
40
38
 
39
+ &:where(.accent-light) {
40
+ --ui-btn-hover-bg-mix: var(--color-light-foreground);
41
+ }
42
+
43
+ &:where(.accent-dark) {
44
+ --ui-btn-hover-bg-mix: var(--color-dark-foreground);
45
+ }
46
+
41
47
  &:where(input)::after {
42
48
  content: attr(aria-label);
43
49
  }
@@ -1,9 +1,9 @@
1
1
  .ui-btn:is(.ghosted) {
2
2
  --ui-btn-hover-bg-mix: transparent;
3
- --ui-btn-hover-bg-opacity: 10%;
3
+ --ui-btn-hover-bg-opacity: 0.1;
4
4
  --ui-btn-active-bg-mix: transparent;
5
- --ui-btn-active-bg-opacity: 20%;
5
+ --ui-btn-active-bg-opacity: 0.2;
6
6
  --ui-btn-focus-outline-offset: -2px;
7
- --ui-btn-bg-opacity: 0%;
8
- --color-current: var(--color-accent);
7
+ --color-accent-foreground: var(--color-accent);
8
+ --tw-bg-opacity: 0%;
9
9
  }
@@ -1,9 +1,11 @@
1
1
  .ui-btn {
2
2
  &:where(.gradient-bordered) {
3
3
  &::before {
4
+ --tw-bg-space: var(--space);
5
+
4
6
  content: "";
5
7
  position: absolute;
6
- background-color: color-mix(in var(--space), var(--color-body) calc(100% - var(--ui-btn-bg-opacity)), transparent);
8
+ background-color: color-mix(in var(--tw-bg-space), var(--color-body) calc(100% - var(--tw-bg-opacity) * 100%), transparent);
7
9
  inset: var(--ui-btn-border-width);
8
10
  border-radius: calc(var(--ui-btn-border-radius, var(--rounded)) / 1.25);
9
11
  z-index: -1;
@@ -12,7 +14,7 @@
12
14
 
13
15
  &:where(.hover-fill) {
14
16
  &::before {
15
- background-color: color-mix(in var(--space), var(--color-body) var(--ui-btn-bg-opacity), transparent);
17
+ background-color: color-mix(in var(--tw-bg-space), var(--color-body) calc(var(--tw-bg-opacity) * 100%), transparent);
16
18
  }
17
19
  }
18
20
  }
@@ -20,15 +22,15 @@
20
22
  &:is(.gradient-bordered) {
21
23
  --ui-btn-border-width: 2px;
22
24
  --ui-btn-hover-bg-mix: transparent;
23
- --ui-btn-hover-bg-opacity: 10%;
25
+ --ui-btn-hover-bg-opacity: 0.1;
24
26
  --ui-btn-active-bg-mix: transparent;
25
- --ui-btn-active-bg-opacity: 20%;
27
+ --ui-btn-active-bg-opacity: 0.2;
26
28
  --ui-btn-focus-outline-offset: 0;
27
- --ui-btn-bg-opacity: 0%;
28
- --color-current: var(--color-main);
29
+ --color-accent-foreground: var(--color-main);
30
+ --tw-bg-opacity: 0;
29
31
 
30
32
  &:is(.hover-fill) {
31
- --ui-btn-bg-opacity: 100%;
33
+ --tw-bg-opacity: 1;
32
34
  }
33
35
  }
34
36
  }
@@ -1,9 +1,11 @@
1
1
  .ui-btn:where(.gradient) {
2
2
  &::before {
3
+ --tw-bg-space: var(--space);
4
+
3
5
  content: "";
4
6
  position: absolute;
5
7
  inset: 0;
6
- background-color: color-mix(in var(--space), var(--ui-btn-bg-mix) calc(100% - var(--ui-btn-bg-opacity)), transparent);
8
+ background-color: color-mix(in var(--tw-bg-space), var(--tw-bg-mix) calc(100% - var(--tw-bg-opacity) * 100%), transparent);
7
9
  z-index: -1;
8
10
  transition: var(--transition-background);
9
11
  }
@@ -1,8 +1,8 @@
1
1
  .ui-btn:is(.hover-fill) {
2
- --ui-btn-hover-bg-mix: black;
3
- --ui-btn-hover-bg-opacity: 100%;
4
- --ui-btn-active-bg-mix: black;
5
- --ui-btn-active-bg-opacity: 90%;
2
+ --ui-btn-hover-bg-mix: var(--color-dark);
3
+ --ui-btn-hover-bg-opacity: 1;
4
+ --ui-btn-active-bg-mix: var(--color-dark);
5
+ --ui-btn-active-bg-opacity: 0.9;
6
6
  --ui-btn-hover-color: var(--color-light);
7
7
  --ui-btn-active-color: var(--color-light);
8
8
  }
@@ -1,32 +1,40 @@
1
1
  .ui-btn {
2
+ --tw-outline-space: var(--space);
3
+ --tw-outline-opacity: 0;
4
+ --tw-outline-mix: transparent;
5
+
2
6
  transition-property: var(--transition);
3
7
  transition-timing-function: var(--ease-in-out);
4
8
  transition-duration: var(--duration);
9
+ outline-color: color-mix(in var(--tw-outline-space), var(--color-accent) calc(var(--tw-outline-opacity) * 100%), var(--tw-outline-mix));
10
+ outline-offset: var(--ui-btn-outline-offset, 0);
5
11
 
6
12
  &:is([href], button, [role="button"], input) {
13
+ cursor: var(--cursor, pointer);
14
+
7
15
  &:disabled {
8
- opacity: var(--ui-btn-disabled-opacity, 0.7);
16
+ opacity: var(--ui-btn-disabled-opacity, 0.75);
9
17
  cursor: not-allowed;
10
18
  }
11
19
 
12
20
  &:not(:disabled) {
13
21
  &:hover {
14
22
  @media (hover: hover) and (pointer: fine) {
15
- --ui-btn-color: var(--ui-btn-hover-color, var(--color-current));
16
- --ui-btn-bg-mix: var(--ui-btn-hover-bg-mix, black);
17
- --ui-btn-bg-opacity: var(--ui-btn-hover-bg-opacity, 80%);
23
+ --ui-btn-color: var(--ui-btn-hover-color, var(--color-accent-foreground));
24
+ --tw-bg-mix: var(--ui-btn-hover-bg-mix, var(--color-dark));
25
+ --tw-bg-opacity: var(--ui-btn-hover-bg-opacity, 0.8);
18
26
  }
19
27
  }
20
28
 
21
29
  &:focus {
22
- outline-color: color-mix(in var(--space), var(--color-accent) var(--ui-btn-focus-outline-opacity, 50%), var(--ui-btn-focus-outline-mix, transparent));
23
- outline-offset: var(--ui-btn-focus-outline-offset, 2px);
30
+ --ui-btn-outline-offset: var(--ui-btn-focus-outline-offset, 2px);
31
+ --tw-outline-opacity: 0.5;
24
32
  }
25
33
 
26
34
  &:is(:active, :checked, .active) {
27
- --ui-btn-color: var(--ui-btn-active-color, var(--color-current));
28
- --ui-btn-bg-mix: var(--ui-btn-active-bg-mix, black);
29
- --ui-btn-bg-opacity: var(--ui-btn-active-bg-opacity, 90%);
35
+ --ui-btn-color: var(--ui-btn-active-color, var(--color-accent-foreground));
36
+ --tw-bg-mix: var(--ui-btn-active-bg-mix, var(--color-dark));
37
+ --tw-bg-opacity: var(--ui-btn-active-bg-opacity, 0.9);
30
38
  }
31
39
  }
32
40
  }
@@ -14,7 +14,7 @@
14
14
  width: var(--ui-btn-loading-width);
15
15
  height: var(--ui-btn-loading-width);
16
16
  content: "";
17
- border: var(--ui-btn-loading-border-width) solid var(--color-current);
17
+ border: var(--ui-btn-loading-border-width) solid var(--color-accent-foreground);
18
18
  border-right-color: transparent;
19
19
  border-radius: 50%;
20
20
  animation: spin 0.45s infinite linear;
@@ -1,9 +1,9 @@
1
1
  .ui-btn:is(.muted) {
2
- --color-current: var(--color-accent);
3
2
  --ui-btn-hover-bg-mix: transparent;
4
3
  --ui-btn-active-bg-mix: transparent;
5
- --ui-btn-active-bg-opacity: 20%;
4
+ --ui-btn-active-bg-opacity: 0.2;
6
5
  --ui-btn-focus-outline-offset: -2px;
7
- --ui-btn-hover-bg-opacity: 30%;
8
- --ui-btn-bg-opacity: 10%;
6
+ --ui-btn-hover-bg-opacity: 0.3;
7
+ --color-accent-foreground: var(--color-accent);
8
+ --tw-bg-opacity: 0.1;
9
9
  }
@@ -1,12 +1,8 @@
1
- .ui-btn {
2
- &:where(.raised) {
3
- border: var(--ui-btn-border-width) solid color-mix(in var(--space), var(--color-accent) var(--ui-btn-border-opacity), var(--color-current));
4
- padding-inline: calc(var(--ui-btn-px) - var(--ui-btn-border-width));
5
- }
1
+ .ui-btn:where(.raised) {
2
+ --ui-btn-border-width: 2px;
3
+ --tw-border-opacity: 0.85;
4
+ --tw-border-space: var(--space);
6
5
 
7
- &:is(.raised) {
8
- --tw-border-opacity: 0.85;
9
- --ui-btn-border-width: 2px;
10
- --ui-btn-border-opacity: calc(var(--tw-border-opacity) * 100%);
11
- }
6
+ border: var(--ui-btn-border-width) solid color-mix(in var(--tw-border-space), var(--color-accent) calc(var(--tw-border-opacity) * 100%), var(--color-accent-foreground));
7
+ padding-inline: calc(var(--ui-btn-px) - var(--ui-btn-border-width));
12
8
  }
@@ -1,12 +1,12 @@
1
1
  .ui-check {
2
2
  --ui-check-checked-bg: var(--color-accent);
3
3
 
4
- display: inline-flex;
5
- gap: var(--ui-check-gap, var(--spacing-md));
6
4
  font-weight: var(--ui-check-font-weight, var(--font-normal));
7
5
  font-size: var(--ui-check-font-size, var(--text-sm));
8
- line-height: var(--ui-check-line-height, calc(1em + var(--ui-check-line-height-ratio, 0.25lh)));
6
+ line-height: var(--ui-check-line-height, calc(1em + 0.25lh));
9
7
  letter-spacing: var(--ui-check-letter-spacing, inherit);
8
+ gap: var(--ui-check-gap, var(--spacing-md));
9
+ display: inline-flex;
10
10
  text-wrap: balance;
11
11
 
12
12
  &:has([type="radio"]) {
@@ -20,33 +20,47 @@
20
20
  }
21
21
 
22
22
  & :where(input) {
23
+ --color-accent: currentColor;
24
+ --tw-bg-space: var(--space);
25
+ --tw-border-space: var(--space);
23
26
  --tw-border-opacity: 0.2;
27
+ --tw-border-mix: transparent;
28
+ --tw-outline-opacity: 0;
29
+ --tw-outline-space: var(--space);
30
+ --tw-bg-opacity: 0;
31
+ --tw-bg-mix: transparent;
24
32
 
25
33
  width: var(--ui-check-size);
26
34
  height: var(--ui-check-size);
27
- background-color: var(--ui-check-bg, color-mix(in var(--space), var(--color-current) var(--ui-check-bg-opacity, 0%), var(--ui-check-bg-mix, transparent)));
35
+ border-radius: var(--ui-check-border-radius, var(--rounded-md));
36
+ background-color: color-mix(in var(--tw-bg-space), var(--ui-check-bg, var(--color-accent)) calc(var(--tw-bg-opacity) * 100%), var(--tw-bg-mix));
28
37
  border:
29
38
  var(--ui-check-border-width, 1px) solid
30
39
  color-mix(
31
- in var(--space),
32
- var(--ui-check-border-color, var(--color-current)) var(--ui-check-border-opacity, calc(var(--tw-border-opacity) * 100%)),
33
- var(--ui-check-border-mix, transparent)
40
+ in var(--tw-border-space),
41
+ var(--ui-check-border-color, var(--color-accent)) calc(var(--tw-border-opacity) * 100%),
42
+ var(--tw-border-mix, transparent)
34
43
  );
35
- border-radius: var(--ui-check-radius, var(--rounded-md));
36
- outline: var(--ui-check-outline-width, 3px) solid transparent;
44
+ outline:
45
+ var(--ui-check-outline-width, 3px) solid
46
+ color-mix(
47
+ in var(--tw-outline-space),
48
+ var(--ui-check-checked-bg) calc(var(--tw-outline-opacity) * 100%),
49
+ transparent
50
+ );
51
+ outline-offset: var(--ui-check-outline-offset, 0);
37
52
  transition-property: var(--transition);
38
53
  transition-timing-function: var(--ease-in-out);
39
54
  transition-duration: var(--duration);
40
- outline-offset: 0;
41
- flex-shrink: 0;
42
55
  display: flex;
56
+ flex-shrink: 0;
43
57
 
44
58
  &::before {
45
59
  width: var(--ui-check-icon-size);
46
60
  height: var(--ui-check-icon-size);
47
61
  color: var(--color-accent-foreground);
48
62
  mask: var(--ui-check-icon, var(--mask-check));
49
- transition: var(--transition-color), var(--transition-opacity), var(--transition-transform);
63
+ transition: inherit;
50
64
  content: "";
51
65
  background-color: currentColor;
52
66
  opacity: 0;
@@ -64,35 +78,35 @@
64
78
 
65
79
  &:enabled {
66
80
  &:is(:hover, :focus-visible) {
67
- --color-current: var(--ui-check-checked-bg);
68
81
  --ui-check-border-color: var(--ui-check-checked-bg);
69
- --ui-check-border-opacity: 75%;
70
- --ui-check-bg-opacity: 10%;
82
+ --color-accent: var(--ui-check-checked-bg);
83
+ --tw-border-opacity: 0.75;
84
+ --tw-bg-opacity: 0.1;
71
85
  }
72
86
 
73
87
  &:focus {
74
88
  --ui-check-border-color: var(--ui-check-checked-bg);
75
- --ui-check-border-opacity: 75%;
76
-
77
- outline-color: color-mix(in var(--space), var(--ui-check-checked-bg) var(--ui-check-outline-opacity, 20%), transparent);
78
- outline-offset: var(--ui-check-outline-offset, 0);
89
+ --ui-check-outline-offset: var(--ui-check-focus-outline-offset, 0);
90
+ --tw-border-opacity: 0.75;
91
+ --tw-outline-opacity: 0.2;
79
92
  }
80
93
  }
81
94
 
82
95
  &:disabled {
83
- --ui-check-bg-opacity: 15%;
96
+ --tw-bg-opacity: 0.15;
84
97
 
85
98
  cursor: not-allowed;
86
99
  opacity: var(--ui-check-disabled-opacity, 0.5);
87
100
  }
88
101
 
89
- &[type="checkbox"]:indeterminate {
102
+ &:where([type="checkbox"]):indeterminate {
90
103
  --ui-check-icon: var(--mask-indeterminate);
91
104
  }
92
105
 
93
106
  &:is(:checked, [type="checkbox"]:indeterminate) {
94
- --ui-check-border-opacity: 0%;
95
107
  --ui-check-bg: var(--ui-check-checked-bg);
108
+ --tw-bg-opacity: 1;
109
+ --tw-border-opacity: 0;
96
110
 
97
111
  &::before {
98
112
  opacity: 1;
@@ -102,9 +116,9 @@
102
116
  }
103
117
 
104
118
  &.invalid, .validated & :where(input):invalid {
105
- --color-current: var(--color-error);
106
119
  --ui-check-border-color: var(--color-error);
107
120
  --ui-check-checked-bg: var(--color-error);
108
- --ui-check-border-opacity: 100%;
121
+ --color-accent-foreground: var(--color-error);
122
+ --tw-border-opacity: 1;
109
123
  }
110
124
  }
@@ -1,16 +1,37 @@
1
1
  .ui-control {
2
+ --tw-border-opacity: 0.15;
3
+ --tw-border-space: var(--space);
4
+ --tw-border-mix: transparent;
5
+ --tw-bg-space: var(--space);
6
+ --tw-bg-opacity: 1;
7
+ --tw-bg-mix: transparent;
8
+ --tw-outline-opacity: 0;
9
+ --tw-outline-space: var(--space);
10
+
2
11
  display: grid;
3
- height: var(--ui-control-height);
12
+ block-size: var(--ui-control-height);
4
13
  font-family: var(--ui-contro-font-family, var(--font-primary));
5
14
  font-weight: var(--ui-control-font-weight, var(--font-medium));
6
15
  font-size: var(--ui-control-font-size, var(--text-sm));
7
16
  letter-spacing: var(--ui-control-letter-spacing, inherit);
8
- background-color: var(--ui-control-bg, transparent);
17
+ background-color: color-mix(in var(--tw-bg-space), var(--ui-control-bg, transparent) calc(var(--tw-bg-opacity) * 100%), var(--tw-bg-mix));
9
18
  color: var(--ui-control-color, currentColor);
10
19
  border-radius: var(--ui-control-border-radius, var(--rounded));
11
- border: var(--ui-control-border-width) solid color-mix(in var(--space), var(--ui-control-border-color, var(--color-current)) var(--ui-control-border-opacity, 15%), var(--ui-control-border-mix, transparent));
12
- outline: var(--ui-control-outline-width, 3px) solid transparent;
13
- outline-offset: 0;
20
+ border:
21
+ var(--ui-control-border-width) solid
22
+ color-mix(
23
+ in var(--tw-border-space),
24
+ var(--ui-control-border-color, currentColor) calc(var(--tw-border-opacity) * 100%),
25
+ var(--tw-border-mix)
26
+ );
27
+ outline:
28
+ var(--ui-control-outline-width, 3px) solid
29
+ color-mix(
30
+ in var(--tw-outline-space),
31
+ var(--color-accent) calc(var(--tw-outline-opacity) * 100%),
32
+ transparent
33
+ );
34
+ outline-offset: var(--ui-control-outline-offset, 0);
14
35
  transition-property: var(--transition);
15
36
  transition-timing-function: var(--ease-in-out);
16
37
  transition-duration: var(--duration);
@@ -34,15 +55,14 @@
34
55
  & > :where(input, textarea, select) {
35
56
  padding-block: var(--ui-control-py);
36
57
  padding-inline: calc(var(--ui-control-px) + var(--ui-control-ps, 0rem)) calc(var(--ui-control-px) + var(--ui-control-pe, 0rem));
58
+ grid-area: c-control;
37
59
  text-overflow: ellipsis;
38
60
  overflow: clip;
39
- grid-area: c-control;
40
61
  align-self: stretch;
41
62
  align-items: center;
42
63
 
43
64
  &:disabled {
44
65
  cursor: not-allowed;
45
- background-color: color-mix(in var(--space), var(--color-current) var(--ui-control-disabled-opacity, 5%), var(--ui-control-bg, transparent));
46
66
  }
47
67
  }
48
68
 
@@ -54,24 +74,28 @@
54
74
  }
55
75
 
56
76
  & > :where(textarea) {
57
- min-height: var(--ui-control-height-textarea);
77
+ min-block-size: var(--ui-control-height-textarea);
58
78
  resize: vertical;
59
79
  }
60
80
 
61
81
  &:focus-within {
62
- --ui-control-border-opacity: 100%;
63
82
  --ui-control-border-color: var(--color-accent);
83
+ --ui-control-outline-offset: var(--ui-control-focus-outline-offset, 0);
84
+ --tw-border-opacity: 1;
85
+ --tw-outline-opacity: 0.2;
86
+ }
64
87
 
65
- outline-color: color-mix(in var(--space), var(--color-accent) var(--ui-control-outline-opacity, 20%), transparent);
66
- outline-offset: var(--ui-control-outline-offset, 0);
88
+ &.disabled, &:has(:disabled) {
89
+ --ui-control-bg: currentColor;
90
+ --tw-bg-opacity: var(--ui-control-disabled-opacity, 0.05);
67
91
  }
68
92
 
69
93
  &.invalid, .validated &:has(:invalid) {
70
- --ui-control-border-opacity: 100%;
71
94
  --ui-control-border-color: var(--color-error);
72
95
  --ui-control-color: var(--color-error);
96
+ --ui-control-bg: var(--color-error);
73
97
  --color-accent: var(--color-error);
74
-
75
- background-color: color-mix(in var(--space), var(--color-error) var(--ui-control-invalid-bg-opacity, 10%), var(--ui-control-bg));
98
+ --tw-border-opacity: 1;
99
+ --tw-bg-opacity: var(--ui-control-invalid-bg-opacity, 0.1);
76
100
  }
77
101
  }
@@ -1,22 +1,25 @@
1
- .ui-control:has([type="file"]) {
1
+ .ui-control:where(:has([type="file"])) {
2
2
  overflow: clip;
3
3
 
4
4
  > :where([type="file"]) {
5
- &:is(:hover, :focus) {
6
- --ui-control-file-selector-button-bg-opacity: 20%;
7
- }
5
+ --color-accent: currentColor;
6
+ --tw-bg-opacity: 0.15;
8
7
 
9
8
  &::file-selector-button {
10
9
  all: unset;
11
- background-color: color-mix(in var(--space), var(--color-current) var(--ui-control-file-selector-button-bg-opacity, 15%), transparent);
12
- height: calc(var(--ui-control-height) - var(--ui-control-border-width) * 2);
10
+ background-color: color-mix(in var(--tw-bg-space), var(--color-accent) calc(var(--tw-bg-opacity) * 100%), transparent);
11
+ block-size: calc(var(--ui-control-height) - var(--ui-control-border-width) * 2);
13
12
  padding-inline: var(--ui-control-px);
14
13
  margin-inline: calc(var(--ui-control-px) * -1) var(--ui-control-px);
15
14
  margin-block-start: calc(var(--ui-control-py) * -1);
16
- border-top-right-radius: var(--ui-control-border-radius, var(--rounded));
17
- border-bottom-right-radius: var(--ui-control-border-radius, var(--rounded));
15
+ border-start-end-radius: var(--ui-control-border-radius, var(--rounded));
16
+ border-end-end-radius: var(--ui-control-border-radius, var(--rounded));
18
17
  transition: var(--transition-background);
19
18
  cursor: pointer;
20
19
  }
20
+
21
+ &:is(:hover, :focus) {
22
+ --tw-bg-opacity: 0.2;
23
+ }
21
24
  }
22
25
  }
@@ -12,11 +12,11 @@
12
12
  &::after {
13
13
  width: var(--ui-control-select-icon-size);
14
14
  height: var(--ui-control-select-icon-size);
15
- margin-inline: auto var(--ui-control-select-icon-me);
16
15
  mask: var(--mask-angle-down);
16
+ margin-inline: auto var(--ui-control-select-icon-me);
17
+ grid-area: c-control-p;
17
18
  background-color: currentColor;
18
19
  pointer-events: none;
19
- grid-area: c-control-p;
20
20
  align-self: center;
21
21
  content: "";
22
22
  }
@@ -1,8 +1,4 @@
1
1
  .ui-group {
2
- --ui-control-border-mix: var(--color-body-primary);
3
- --ui-btn-focus-outline-mix: var(--color-body-primary);
4
- --ui-btn-focus-outline-offset: 0;
5
-
6
2
  display: flex;
7
3
  border-radius: var(--rounded);
8
4
 
@@ -20,6 +16,15 @@
20
16
  & > :where(*) {
21
17
  border-radius: inherit;
22
18
 
19
+ &:is(.ui-control) {
20
+ --tw-border-mix: var(--color-body-primary);
21
+ --tw-outline-mix: var(--color-body-primary);
22
+ }
23
+
24
+ &:is(.ui-btn) {
25
+ --ui-btn-focus-outline-offset: 0;
26
+ }
27
+
23
28
  &:focus-within {
24
29
  z-index: 1;
25
30
  }
package/src/ui/info.css CHANGED
@@ -2,7 +2,7 @@
2
2
  font-family: var(--ui-info-font-family, inherit);
3
3
  font-weight: var(--ui-info-font-weight, inherit);
4
4
  font-size: var(--ui-info-font-size, var(--text-xs));
5
- line-height: var(--ui-info-line-height, calc(1em + var(--ui-info-line-height-ratio, 0.15lh)));
5
+ line-height: var(--ui-info-line-height, calc(1em + 0.15lh));
6
6
  letter-spacing: var(--ui-info-letter-spacing, inherit);
7
7
  text-wrap: balance;
8
8
  }
@@ -1,17 +1,15 @@
1
1
  .ui-link {
2
- --color-accent: var(--color-current);
3
2
  --tw-text-opacity: 1;
4
3
  --tw-text-space: var(--space);
5
- --tw-text-mix: transparent;
6
4
 
7
- &:is([href], button, [role="button"]) {
8
- &:not(:disabled) {
9
- color: color-mix(in var(--tw-text-space), var(--color-accent) calc(var(--tw-text-opacity) * 100%), var(--tw-text-mix));
10
- transition: all var(--duration) var(--ease-in-out);
5
+ &:where([href], button, [role="button"]) {
6
+ color: color-mix(in var(--tw-text-space), currentColor calc(var(--tw-text-opacity) * 100%), transparent);
7
+ transition: all var(--duration) var(--ease-in-out);
11
8
 
9
+ &:not(:disabled) {
12
10
  &:hover {
13
11
  @media (hover: hover) and (pointer: fine) {
14
- --tw-text-opacity: 0.75;
12
+ --tw-text-opacity: 0.35;
15
13
  }
16
14
  }
17
15
 
@@ -1,17 +1,26 @@
1
1
  .ui-notice {
2
- --color-current: var(--color-accent);
2
+ --tw-bg-opacity: 0.1;
3
+ --tw-bg-space: var(--space);
4
+ --tw-outline-opacity: 0.1;
5
+ --tw-outline-space: var(--space);
3
6
 
4
7
  padding: var(--ui-notice-py, 1.25rem) var(--ui-notice-px, 1.5rem);
5
8
  font-size: var(--ui-notice-font-size, var(--text-sm));
6
9
  border-radius: var(--rounded);
7
- background-color: color-mix(in var(--space), var(--color-accent) 10%, transparent);
8
- outline: var(--ui-notice-outline-width, 1px) solid color-mix(in var(--space), var(--color-accent) var(--ui-notice-outline-opacity, 10%), transparent);
9
- outline-offset: var(--ui-notice-outline-offset, calc(var(--ui-notice-outline-width, 1px) * -1));
10
+ background-color: color-mix(in var(--tw-bg-space), var(--color-accent) calc(var(--tw-bg-opacity) * 100%), transparent);
10
11
  color: var(--color-accent);
11
- gap: var(--ui-notice-gap, var(--spacing-xl));
12
- position: relative;
12
+ outline:
13
+ var(--ui-notice-outline-width, 1px) solid
14
+ color-mix(
15
+ in var(--tw-outline-space),
16
+ var(--color-accent) calc(var(--tw-outline-opacity) * 100%),
17
+ transparent
18
+ );
19
+ outline-offset: var(--ui-notice-outline-offset, calc(var(--ui-notice-outline-width, 1px) * -1));
20
+ gap: var(--spacing-xl);
13
21
  display: flex;
14
22
  flex-direction: column;
23
+ position: relative;
15
24
  text-wrap: balance;
16
25
 
17
26
  & :where(hr) {
@@ -1,12 +1,11 @@
1
1
  .ui-progress {
2
- --tw-bg-opacity: 1;
3
- --ui-progress-bg: color-mix(in var(--space), var(--color-accent) var(--ui-progress-bg-opacity), var(--color-body));
4
- --ui-progress-bg-opacity: calc(var(--tw-bg-opacity) * 10%);
2
+ --tw-bg-opacity: 0.1;
3
+ --tw-bg-space: var(--space);
5
4
 
6
- height: var(--ui-progress-height, 1rem);
5
+ inline-size: 100%;
6
+ block-size: var(--ui-progress-height, 1rem);
7
7
  border-radius: var(--ui-progress-border-radius, var(--rounded-full));
8
- background-color: var(--ui-progress-bg);
9
- width: 100%;
8
+ background-color: color-mix(in var(--tw-bg-space), var(--color-accent) calc(var(--tw-bg-opacity) * 100%), var(--color-body));
10
9
  overflow: clip;
11
10
 
12
11
  &::-webkit-progress-bar {
@@ -23,7 +22,7 @@
23
22
 
24
23
  &:indeterminate {
25
24
  animation: 1.5s linear 0s forwards infinite move-indeterminate;
26
- background-image: linear-gradient(to right, var(--color-accent) 30%, var(--ui-progress-bg) 30%);
25
+ background-image: linear-gradient(to right, var(--color-accent) 30%, transparent 30%);
27
26
  background-position: top left;
28
27
  background-repeat: no-repeat;
29
28
  background-size: 150% 150%;