opui-css 5.0.1 → 5.1.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 (58) hide show
  1. package/CHANGELOG.md +45 -0
  2. package/MIGRATING.md +11 -0
  3. package/README.md +1 -1
  4. package/components/Accordion/Accordion.astro +12 -2
  5. package/components/Anchor/Anchor.astro +5 -1
  6. package/components/ButtonGroup/ButtonGroup.astro +8 -1
  7. package/components/Card/Card.astro +3 -1
  8. package/components/Checkbox/Checkbox.astro +3 -3
  9. package/components/ClassicSelect/ClassicSelect.astro +3 -3
  10. package/components/Dialog/Dialog.astro +3 -1
  11. package/components/Radio/Radio.astro +3 -3
  12. package/components/Select/Select.astro +3 -3
  13. package/components/Switch/Switch.astro +3 -3
  14. package/components/TextField/TextField.astro +3 -3
  15. package/components/Textarea/Textarea.astro +3 -3
  16. package/core/normalize.css +16 -10
  17. package/core/palette.css +313 -58
  18. package/core/utils.css +2 -2
  19. package/css/components/accordion.css +7 -7
  20. package/css/components/anchor.css +23 -23
  21. package/css/components/badge.css +4 -4
  22. package/css/components/button-group.css +28 -14
  23. package/css/components/button.css +29 -17
  24. package/css/components/callout.css +95 -92
  25. package/css/components/card.css +6 -8
  26. package/css/components/checkbox.css +209 -203
  27. package/css/components/chip.css +11 -6
  28. package/css/components/description-list.css +2 -1
  29. package/css/components/dialog.css +2 -1
  30. package/css/components/drawer.css +167 -167
  31. package/css/components/form.css +8 -7
  32. package/css/components/icon-button.css +32 -13
  33. package/css/components/list.css +10 -12
  34. package/css/components/progress.css +4 -3
  35. package/css/components/radio.css +168 -170
  36. package/css/components/range.css +14 -9
  37. package/css/components/select.css +9 -6
  38. package/css/components/spinner.css +4 -3
  39. package/css/components/switch.css +8 -5
  40. package/css/components/table.css +4 -10
  41. package/css/components/tabs.css +17 -16
  42. package/css/components/text-field.css +9 -10
  43. package/css/components/text-input.css +8 -4
  44. package/css/components/textarea.css +3 -1
  45. package/css/components/toast.css +156 -157
  46. package/css/components/toggle-button.css +76 -72
  47. package/css/components/tooltip.css +59 -56
  48. package/css/components/typography.css +31 -31
  49. package/css/imports.css +5 -4
  50. package/css/theme.css +14 -20
  51. package/dist/op.css +0 -62
  52. package/dist/op.css.map +1 -1
  53. package/dist/opui.components.css +1259 -1184
  54. package/dist/opui.components.css.map +1 -1
  55. package/dist/opui.css +1719 -1393
  56. package/dist/opui.css.map +1 -1
  57. package/open-props.css +0 -1
  58. package/package.json +1 -1
@@ -1,171 +1,171 @@
1
1
  @layer components.root {
2
- :where(dialog.ui-drawer) {
3
- --_backdrop-bg-color: transparent;
4
- --_backdrop-blur: blur(2px);
5
- --_bg-color: var(--surface-default);
6
- --_block-size: min(80vb, 650px);
7
- --_border-color: var(--border-color);
8
- --_border-width: var(--border-width);
9
- --_color: var(--text-primary);
10
- --_content-padding: var(--size-4);
11
- --_footer-gap: var(--size-3);
12
- --_footer-padding: var(--size-3);
13
- --_header-font-size: var(--font-size-3);
14
- --_header-padding: var(--size-3);
15
- --_inline-size: min(375px, 100vi);
16
- --_shadow: var(--shadow-2);
17
- --_transition-duration: 0.2s;
18
- --_transition-timing: var(--ease-out-3);
19
-
20
- background-color: var(--_bg-color);
21
- border: none;
22
- box-shadow: var(--_shadow);
23
- color: var(--_color);
24
- display: flex;
25
- flex-direction: column;
26
- margin: 0;
27
- max-inline-size: 100%;
28
- padding: 0;
29
- position: fixed;
30
- transition:
31
- display var(--_transition-duration) allow-discrete,
32
- overlay var(--_transition-duration) allow-discrete,
33
- translate var(--_transition-duration) var(--_transition-timing);
34
- z-index: 1000;
35
-
36
- &::backdrop {
37
- backdrop-filter: var(--_backdrop-blur);
38
- background-color: var(--_backdrop-bg-color);
39
- opacity: 0;
40
- transition:
41
- display var(--_transition-duration) allow-discrete,
42
- overlay var(--_transition-duration) allow-discrete,
43
- opacity var(--_transition-duration) var(--_transition-timing);
44
- }
45
-
46
- &.ui-backdrop-transparent {
47
- --_backdrop-blur: none;
48
- }
49
-
50
- .ui-header {
51
- align-items: center;
52
- border-block-end: var(--_border-width) solid var(--_border-color);
53
- display: flex;
54
- padding: var(--_header-padding);
55
-
56
- :where(h1, h2, h3, h4, h5, h6) {
57
- font-size: var(--_header-font-size);
58
- margin: 0;
59
- }
60
-
61
- :where(.ui-icon-button) {
62
- margin-inline-start: auto;
63
- }
64
- }
65
-
66
- .ui-content {
67
- flex: 1;
68
- overflow-y: auto;
69
- padding: var(--_content-padding);
70
- }
71
-
72
- .ui-footer {
73
- border-block-start: var(--_border-width) solid var(--_border-color);
74
- display: flex;
75
- gap: var(--_footer-gap);
76
- justify-content: end;
77
- padding: var(--_footer-padding);
78
- }
79
-
80
- &.ui-inline-start,
81
- &.ui-inline-end {
82
- block-size: 100dvb;
83
- inline-size: var(--_inline-size);
84
- inset-block: 0;
85
- max-block-size: 100%;
86
- }
87
-
88
- &.ui-inline-start {
89
- border-inline-end: var(--_border-width) solid var(--_border-color);
90
- inset-inline-end: auto;
91
- inset-inline-start: 0;
92
- translate: -100% 0;
93
- }
94
-
95
- &.ui-inline-end {
96
- border-inline-start: var(--_border-width) solid var(--_border-color);
97
- inset-inline-end: 0;
98
- inset-inline-start: auto;
99
- translate: 100% 0;
100
-
101
- .ui-footer {
102
- justify-content: start;
103
- }
104
- }
105
-
106
- &.ui-block-start,
107
- &.ui-block-end {
108
- block-size: var(--_block-size);
109
- inline-size: 100dvi;
110
- inset-inline: 0;
111
- max-block-size: 80dvb;
112
- }
113
-
114
- &.ui-block-start {
115
- border-block-end: var(--_border-width) solid var(--_border-color);
116
- inset-block-end: auto;
117
- inset-block-start: 0;
118
- translate: 0 -100%;
119
- }
120
-
121
- &.ui-block-end {
122
- border-block-start: var(--_border-width) solid var(--_border-color);
123
- inset-block-end: 0;
124
- inset-block-start: auto;
125
- translate: 0 100%;
126
- }
127
-
128
- &[open] {
129
- translate: 0 0;
130
-
131
- &::backdrop {
132
- opacity: 1;
133
- }
134
-
135
- @starting-style {
136
- &::backdrop {
137
- opacity: 0;
138
- }
139
-
140
- &.ui-inline-start {
141
- translate: -100% 0;
142
- }
143
-
144
- &.ui-inline-end {
145
- translate: 100% 0;
146
- }
147
-
148
- &.ui-block-start {
149
- translate: 0 -100%;
150
- }
151
-
152
- &.ui-block-end {
153
- translate: 0 100%;
154
- }
155
- }
156
- }
157
- }
158
-
159
- /* Scroll-lock is provided by the shared `.ui-scroll-lock` utility in core/utils.css.
2
+ :where(dialog.ui-drawer) {
3
+ --_backdrop-bg-color: transparent;
4
+ --_backdrop-blur: blur(2px);
5
+ --_bg-color: var(--surface-default);
6
+ --_block-size: min(80vb, 650px);
7
+ --_border-color: var(--border-color);
8
+ --_border-width: var(--border-width);
9
+ --_color: var(--text-primary);
10
+ --_content-padding: var(--size-4);
11
+ --_footer-gap: var(--size-3);
12
+ --_footer-padding: var(--size-3);
13
+ --_header-font-size: var(--font-size-3);
14
+ --_header-padding: var(--size-3);
15
+ --_inline-size: min(375px, 100vi);
16
+ --_shadow: var(--shadow-2);
17
+ --_transition-duration: 0.2s;
18
+ --_transition-timing: var(--ease-out-3);
19
+
20
+ background-color: var(--_bg-color);
21
+ border: none;
22
+ box-shadow: var(--_shadow);
23
+ color: var(--_color);
24
+ display: flex;
25
+ flex-direction: column;
26
+ margin: 0;
27
+ max-inline-size: 100%;
28
+ padding: 0;
29
+ position: fixed;
30
+ transition:
31
+ display var(--_transition-duration) allow-discrete,
32
+ overlay var(--_transition-duration) allow-discrete,
33
+ translate var(--_transition-duration) var(--_transition-timing);
34
+ z-index: 1000;
35
+
36
+ &::backdrop {
37
+ backdrop-filter: var(--_backdrop-blur);
38
+ background-color: var(--_backdrop-bg-color);
39
+ opacity: 0;
40
+ transition:
41
+ display var(--_transition-duration) allow-discrete,
42
+ overlay var(--_transition-duration) allow-discrete,
43
+ opacity var(--_transition-duration) var(--_transition-timing);
44
+ }
45
+
46
+ &.ui-backdrop-transparent {
47
+ --_backdrop-blur: none;
48
+ }
49
+
50
+ .ui-header {
51
+ align-items: center;
52
+ border-block-end: var(--_border-width) solid var(--_border-color);
53
+ display: flex;
54
+ padding: var(--_header-padding);
55
+
56
+ :where(h1, h2, h3, h4, h5, h6) {
57
+ font-size: var(--_header-font-size);
58
+ margin: 0;
59
+ }
60
+
61
+ :where(.ui-icon-button) {
62
+ margin-inline-start: auto;
63
+ }
64
+ }
65
+
66
+ .ui-content {
67
+ flex: 1;
68
+ overflow-y: auto;
69
+ padding: var(--_content-padding);
70
+ }
71
+
72
+ .ui-footer {
73
+ border-block-start: var(--_border-width) solid var(--_border-color);
74
+ display: flex;
75
+ gap: var(--_footer-gap);
76
+ justify-content: end;
77
+ padding: var(--_footer-padding);
78
+ }
79
+
80
+ &.ui-inline-start,
81
+ &.ui-inline-end {
82
+ block-size: 100dvb;
83
+ inline-size: var(--_inline-size);
84
+ inset-block: 0;
85
+ max-block-size: 100%;
86
+ }
87
+
88
+ &.ui-inline-start {
89
+ border-inline-end: var(--_border-width) solid var(--_border-color);
90
+ inset-inline-end: auto;
91
+ inset-inline-start: 0;
92
+ translate: -100% 0;
93
+ }
94
+
95
+ &.ui-inline-end {
96
+ border-inline-start: var(--_border-width) solid var(--_border-color);
97
+ inset-inline-end: 0;
98
+ inset-inline-start: auto;
99
+ translate: 100% 0;
100
+
101
+ .ui-footer {
102
+ justify-content: start;
103
+ }
104
+ }
105
+
106
+ &.ui-block-start,
107
+ &.ui-block-end {
108
+ block-size: var(--_block-size);
109
+ inline-size: 100dvi;
110
+ inset-inline: 0;
111
+ max-block-size: 80dvb;
112
+ }
113
+
114
+ &.ui-block-start {
115
+ border-block-end: var(--_border-width) solid var(--_border-color);
116
+ inset-block-end: auto;
117
+ inset-block-start: 0;
118
+ translate: 0 -100%;
119
+ }
120
+
121
+ &.ui-block-end {
122
+ border-block-start: var(--_border-width) solid var(--_border-color);
123
+ inset-block-end: 0;
124
+ inset-block-start: auto;
125
+ translate: 0 100%;
126
+ }
127
+
128
+ &[open] {
129
+ translate: 0 0;
130
+
131
+ &::backdrop {
132
+ opacity: 1;
133
+ }
134
+
135
+ @starting-style {
136
+ &::backdrop {
137
+ opacity: 0;
138
+ }
139
+
140
+ &.ui-inline-start {
141
+ translate: -100% 0;
142
+ }
143
+
144
+ &.ui-inline-end {
145
+ translate: 100% 0;
146
+ }
147
+
148
+ &.ui-block-start {
149
+ translate: 0 -100%;
150
+ }
151
+
152
+ &.ui-block-end {
153
+ translate: 0 100%;
154
+ }
155
+ }
156
+ }
157
+ }
158
+
159
+ /* Scroll-lock is provided by the shared `.ui-scroll-lock` utility in core/utils.css.
160
160
  This carve-out re-enables page scrolling when a transparent-backdrop drawer is
161
161
  open on wide viewports (where the drawer doesn't visually cover the page). */
162
- html:has(dialog.ui-drawer.ui-scroll-lock[open].ui-backdrop-transparent) {
163
- overflow: unset;
164
- overscroll-behavior: auto;
165
-
166
- @media (width < 500px) {
167
- overflow: clip;
168
- overscroll-behavior: contain;
169
- }
170
- }
162
+ html:has(dialog.ui-drawer.ui-scroll-lock[open].ui-backdrop-transparent) {
163
+ overflow: unset;
164
+ overscroll-behavior: auto;
165
+
166
+ @media (width < 500px) {
167
+ overflow: clip;
168
+ overscroll-behavior: contain;
169
+ }
170
+ }
171
171
  }
@@ -1,5 +1,4 @@
1
1
  @layer components.extended {
2
-
3
2
  /* Form */
4
3
  :where(.ui-form) {
5
4
  display: grid;
@@ -71,21 +70,21 @@
71
70
  /* Error / validation */
72
71
  &[data-invalid] {
73
72
  :where(.ui-end-text) {
74
- color: var(--primary);
73
+ color: var(--critical);
75
74
  }
76
75
 
77
76
  :where(.ui-checkbox, .ui-radio, .ui-switch) {
78
- --palette-source: oklch(0.58 0.21 var(--hue-red));
77
+ --primary: var(--critical);
79
78
 
80
79
  :where(.ui-end-text) {
81
- color: var(--primary);
80
+ color: var(--critical);
82
81
  }
83
82
  }
84
83
 
85
84
  :where(.ui-switch) {
86
85
  input {
87
86
  border-radius: var(--radius-round);
88
- outline: 2px solid var(--primary);
87
+ outline: 2px solid var(--critical);
89
88
  }
90
89
  }
91
90
  }
@@ -113,7 +112,9 @@
113
112
  gap: var(--size-4);
114
113
 
115
114
  /* If it only has checkboxes, radios, or switches */
116
- &:has(> :where(.ui-checkbox, .ui-radio, .ui-switch)):not(:has(> :not(.ui-checkbox, .ui-radio, .ui-switch))) {
115
+ &:has(> :where(.ui-checkbox, .ui-radio, .ui-switch)):not(
116
+ :has(> :not(.ui-checkbox, .ui-radio, .ui-switch))
117
+ ) {
117
118
  gap: var(--size-2);
118
119
  }
119
120
 
@@ -129,7 +130,7 @@
129
130
  }
130
131
  }
131
132
 
132
- &+& {
133
+ & + & {
133
134
  margin-block-start: var(--size-5);
134
135
  }
135
136
 
@@ -8,14 +8,22 @@
8
8
  --_accent-contrast: var(--_color-contrast);
9
9
  --_accent-tonal: var(--_color-tonal);
10
10
  --_accent-tonal-contrast: var(--_color);
11
- --_default-hover-bg-color: light-dark(oklch(from var(--_accent) l 0.01 h / 10%),
12
- oklch(from var(--_accent) l 0.01 h / 20%));
13
- --_default-active-bg-color: light-dark(oklch(from var(--_accent) l 0.06 h / 20%),
14
- oklch(from var(--_accent) l 0.06 h / 30%));
15
- --_filled-hover-bg-color: light-dark(oklch(from var(--_accent) calc(l + 0.2) c h),
16
- oklch(from var(--_accent) calc(l - 0.1) c h));
17
- --_filled-active-bg-color: light-dark(oklch(from var(--_accent) calc(l + 0.3) c h),
18
- oklch(from var(--_accent) calc(l - 0.15) c h));
11
+ --_default-hover-bg-color: light-dark(
12
+ oklch(from var(--_accent) l 0.01 h / 10%),
13
+ oklch(from var(--_accent) l 0.01 h / 20%)
14
+ );
15
+ --_default-active-bg-color: light-dark(
16
+ oklch(from var(--_accent) l 0.06 h / 20%),
17
+ oklch(from var(--_accent) l 0.06 h / 30%)
18
+ );
19
+ --_filled-hover-bg-color: light-dark(
20
+ oklch(from var(--_accent) calc(l + 0.2) c h),
21
+ oklch(from var(--_accent) calc(l - 0.1) c h)
22
+ );
23
+ --_filled-active-bg-color: light-dark(
24
+ oklch(from var(--_accent) calc(l + 0.3) c h),
25
+ oklch(from var(--_accent) calc(l - 0.15) c h)
26
+ );
19
27
  --_outlined-active-bg-color: var(--_filled-active-bg-color);
20
28
 
21
29
  --_bg-color: transparent;
@@ -35,8 +43,11 @@
35
43
  justify-content: center;
36
44
  padding: 0;
37
45
  transform-style: preserve-3d;
38
- transition: background-color .1s ease, color .1s ease,
39
- border-color .1s ease, box-shadow .1s ease;
46
+ transition:
47
+ background-color 0.1s ease,
48
+ color 0.1s ease,
49
+ border-color 0.1s ease,
50
+ box-shadow 0.1s ease;
40
51
 
41
52
  &:where([disabled]) {
42
53
  --_text-color: light-dark(rgb(0, 0, 0/0.3), rgb(255, 255, 255/0.26));
@@ -58,7 +69,9 @@
58
69
  background-color: transparent;
59
70
 
60
71
  @media (prefers-reduced-motion: no-preference) {
61
- transition: transform 0.2s ease, background-color .1s ease;
72
+ transition:
73
+ transform 0.2s ease,
74
+ background-color 0.1s ease;
62
75
  }
63
76
  }
64
77
 
@@ -94,14 +107,20 @@
94
107
  &:where(:not([disabled])) {
95
108
  &:where(:not(:active):hover) {
96
109
  &::before {
97
- background-color: var(--_interaction-hover-color, var(--_default-hover-bg-color));
110
+ background-color: var(
111
+ --_interaction-hover-color,
112
+ var(--_default-hover-bg-color)
113
+ );
98
114
  }
99
115
  }
100
116
 
101
117
  &:where(:hover:active),
102
118
  &[aria-current="page"] {
103
119
  &::before {
104
- background-color: var(--_interaction-active-color, var(--_default-active-bg-color));
120
+ background-color: var(
121
+ --_interaction-active-color,
122
+ var(--_default-active-bg-color)
123
+ );
105
124
  }
106
125
  }
107
126
  }
@@ -1,5 +1,4 @@
1
1
  @layer components.extended {
2
-
3
2
  /*
4
3
  Lists meant to be used stand-alone or as part of Select elements
5
4
 
@@ -17,7 +16,6 @@ Lists meant to be used stand-alone or as part of Select elements
17
16
  padding: var(--size-2) 0;
18
17
 
19
18
  @media (pointer: coarse) {
20
-
21
19
  &,
22
20
  * {
23
21
  user-select: none;
@@ -77,14 +75,14 @@ Lists meant to be used stand-alone or as part of Select elements
77
75
  padding: 0;
78
76
  }
79
77
 
80
- &> :where(a, button, label) {
78
+ & > :where(a, button, label) {
81
79
  gap: var(--size-2);
82
80
  min-block-size: var(--size-7);
83
81
  padding: var(--size-1) var(--size-2);
84
82
  }
85
83
 
86
84
  /* Checkbox / Radio */
87
- &>label {
85
+ & > label {
88
86
  .ui-end {
89
87
  padding-inline-end: 0.125rem;
90
88
  }
@@ -119,7 +117,7 @@ Lists meant to be used stand-alone or as part of Select elements
119
117
  :where(li, option) {
120
118
  padding-inline: 0;
121
119
 
122
- &> :where(a, button, label) {
120
+ & > :where(a, button, label) {
123
121
  padding-inline: 0;
124
122
  }
125
123
  }
@@ -153,9 +151,9 @@ Lists meant to be used stand-alone or as part of Select elements
153
151
  min-block-size: auto;
154
152
  padding: 0;
155
153
 
156
- &[aria-selected="true"]> :where(a, button, label),
154
+ &[aria-selected="true"] > :where(a, button, label),
157
155
  &[aria-selected="true"],
158
- &:has(> [aria-current="page"])> :where(a, button, label) {
156
+ &:has(> [aria-current="page"]) > :where(a, button, label) {
159
157
  background-color: var(--_bg-color-hover);
160
158
  }
161
159
  }
@@ -190,9 +188,9 @@ Lists meant to be used stand-alone or as part of Select elements
190
188
  }
191
189
  }
192
190
 
193
- &>a,
194
- &>button,
195
- &>label {
191
+ & > a,
192
+ & > button,
193
+ & > label {
196
194
  align-items: center;
197
195
  background-color: var(--_bg-color);
198
196
  color: inherit;
@@ -219,7 +217,7 @@ Lists meant to be used stand-alone or as part of Select elements
219
217
  }
220
218
 
221
219
  /* Checkbox / Radio / Switch */
222
- &>label {
220
+ & > label {
223
221
  &:where(.ui-checkbox, .ui-radio, .ui-switch) {
224
222
  display: flex;
225
223
  }
@@ -270,7 +268,7 @@ Lists meant to be used stand-alone or as part of Select elements
270
268
  font-weight: 400;
271
269
  }
272
270
 
273
- p+p {
271
+ p + p {
274
272
  color: var(--text-muted);
275
273
  font-size: var(--font-size-0);
276
274
  }
@@ -25,7 +25,7 @@
25
25
  --_bg-color: var(--surface-tonal);
26
26
  }
27
27
 
28
- &>progress {
28
+ & > progress {
29
29
  appearance: none;
30
30
  background: none;
31
31
  block-size: 100%;
@@ -42,7 +42,8 @@
42
42
  background-color: var(--_accent-color);
43
43
 
44
44
  @media (prefers-reduced-motion: no-preference) {
45
- transition: inline-size 0.2s var(--ease-out-4, cubic-bezier(0, 0, 0.1, 1));
45
+ transition: inline-size 0.2s
46
+ var(--ease-out-4, cubic-bezier(0, 0, 0.1, 1));
46
47
  }
47
48
  }
48
49
 
@@ -63,7 +64,7 @@
63
64
  will-change: inset-inline-start, inset-inline-end;
64
65
  }
65
66
 
66
- &>progress {
67
+ & > progress {
67
68
  &::-webkit-progress-value {
68
69
  background-color: transparent;
69
70
  }