@oscarpalmer/oui 0.36.0 → 0.38.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 (104) hide show
  1. package/dist/css/a11y.css +1 -0
  2. package/dist/css/badge.css +19 -15
  3. package/dist/css/button.css +40 -31
  4. package/dist/css/color-picker.css +377 -0
  5. package/dist/css/color.css +20 -21
  6. package/dist/css/combobox.css +140 -34
  7. package/dist/css/content.css +30 -10
  8. package/dist/css/floatable.css +12 -10
  9. package/dist/css/form.css +400 -129
  10. package/dist/css/listbox.css +43 -17
  11. package/dist/css/message.css +15 -10
  12. package/dist/css/mixins/badge.mixins.css +2 -0
  13. package/dist/css/mixins/button.mixins.css +2 -0
  14. package/dist/css/mixins/message.mixins.css +1 -0
  15. package/dist/css/mixins/misc.mixins.css +2 -0
  16. package/dist/css/mixins/shadow.mixins.css +1 -0
  17. package/dist/css/reset.css +31 -90
  18. package/dist/css/splitter.css +3 -3
  19. package/dist/css/tabs.css +103 -0
  20. package/dist/js/color-picker.d.mts +213 -0
  21. package/dist/js/color-picker.mjs +924 -0
  22. package/dist/js/combobox/dom.combobox.mjs +8 -4
  23. package/dist/js/combobox/event.combobox.mjs +1 -1
  24. package/dist/js/combobox/index.d.mts +1 -1
  25. package/dist/js/combobox/index.mjs +56 -2
  26. package/dist/js/combobox/misc.combobox.d.mts +1 -1
  27. package/dist/js/combobox/misc.combobox.mjs +1 -1
  28. package/dist/js/combobox/state.combobox.d.mts +1 -1
  29. package/dist/js/combobox/state.combobox.mjs +1 -1
  30. package/dist/js/dialog.mjs +2 -2
  31. package/dist/js/floatable/floatable.embedded.mjs +13 -10
  32. package/dist/js/focus-trap/focus-trap.embedded.mjs +9 -13
  33. package/dist/js/{index-EfkUSals.d.mts → index-DJdFlTLm.d.mts} +39 -1
  34. package/dist/js/index.d.mts +4 -2
  35. package/dist/js/index.mjs +5 -3
  36. package/dist/js/internal/draggable.mjs +20 -26
  37. package/dist/js/internal/listbox/listbox.data.mjs +1 -1
  38. package/dist/js/internal/listbox/listbox.dom.mjs +1 -1
  39. package/dist/js/internal/listbox/listbox.event.mjs +1 -1
  40. package/dist/js/internal/listbox/listbox.form.mjs +17 -16
  41. package/dist/js/internal/listbox/listbox.misc.mjs +1 -1
  42. package/dist/js/internal/listbox/listbox.state.mjs +4 -4
  43. package/dist/js/internal/navigable.d.mts +11 -5
  44. package/dist/js/internal/navigable.mjs +46 -19
  45. package/dist/js/listbox/event.listbox.mjs +1 -1
  46. package/dist/js/listbox/index.d.mts +38 -0
  47. package/dist/js/listbox/index.mjs +56 -2
  48. package/dist/js/listbox/misc.listbox.mjs +1 -1
  49. package/dist/js/listbox/state.listbox.mjs +1 -1
  50. package/dist/js/{listbox.data-BWd0PCy7.mjs → listbox.data-C7CRa5Ya.mjs} +5 -4
  51. package/dist/js/menu.mjs +1 -1
  52. package/dist/js/{misc.listbox-BI-XsTOf.mjs → misc.listbox-Cyz2CRDy.mjs} +2 -3
  53. package/dist/js/movable/movable.embedded.mjs +5 -8
  54. package/dist/js/popover.mjs +2 -2
  55. package/dist/js/resizable/resizable.embedded.mjs +21 -31
  56. package/dist/js/sortable/sortable.embedded.mjs +4 -4
  57. package/dist/js/splitter.mjs +20 -17
  58. package/dist/js/{state.combobox-4xq0FPCF.mjs → state.combobox-Qm3FWzYW.mjs} +3 -3
  59. package/dist/js/tabs.d.mts +25 -0
  60. package/dist/js/tabs.mjs +237 -0
  61. package/dist/js/tooltip.mjs +16 -15
  62. package/package.json +7 -5
  63. package/src/css/a11y.scss +2 -2
  64. package/src/css/badge.scss +8 -20
  65. package/src/css/button.scss +8 -47
  66. package/src/css/color-picker.scss +344 -0
  67. package/src/css/color.scss +20 -22
  68. package/src/css/combobox.scss +29 -57
  69. package/src/css/content.scss +34 -6
  70. package/src/css/floatable.scss +22 -19
  71. package/src/css/form.scss +94 -80
  72. package/src/css/listbox.scss +6 -34
  73. package/src/css/message.scss +16 -30
  74. package/src/css/mixins/badge.mixins.scss +53 -0
  75. package/src/css/mixins/button.mixins.scss +112 -0
  76. package/src/css/mixins/input.mixins.scss +114 -0
  77. package/src/css/mixins/message.mixins.scss +41 -0
  78. package/src/css/mixins/misc.mixins.scss +48 -0
  79. package/src/css/mixins/shadow.mixins.scss +57 -0
  80. package/src/css/reset.scss +39 -88
  81. package/src/css/splitter.scss +3 -3
  82. package/src/css/tabs.scss +74 -0
  83. package/src/js/color-picker.ts +1653 -0
  84. package/src/js/combobox/dom.combobox.ts +4 -0
  85. package/src/js/combobox/index.ts +63 -1
  86. package/src/js/dialog.ts +1 -1
  87. package/src/js/floatable/floatable.embedded.ts +18 -14
  88. package/src/js/focus-trap/focus-trap.embedded.ts +11 -19
  89. package/src/js/index.ts +2 -0
  90. package/src/js/internal/draggable.ts +29 -33
  91. package/src/js/internal/listbox/listbox.dom.ts +2 -1
  92. package/src/js/internal/listbox/listbox.form.ts +32 -22
  93. package/src/js/internal/listbox/listbox.state.ts +3 -3
  94. package/src/js/internal/navigable.ts +82 -23
  95. package/src/js/listbox/index.ts +62 -0
  96. package/src/js/listbox/state.listbox.ts +0 -2
  97. package/src/js/movable/movable.embedded.ts +11 -13
  98. package/src/js/popover.ts +1 -1
  99. package/src/js/resizable/resizable.embedded.ts +25 -39
  100. package/src/js/splitter.ts +21 -18
  101. package/src/js/tabs.ts +441 -0
  102. package/src/js/tooltip.ts +20 -17
  103. package/src/css/mixins.scss +0 -194
  104. /package/dist/css/{mixins.css → mixins/input.mixins.css} +0 -0
@@ -1,4 +1,7 @@
1
- @use 'mixins.scss' as mixins;
1
+ /*! https://github.com/oscarpalmer/oui */
2
+
3
+ @use './mixins/misc.mixins.scss' as miscMixins;
4
+ @use './mixins/shadow.mixins.scss' as shadowMixins;
2
5
 
3
6
  :where([oui-dialog], [oui-popover], [oui-tooltip-content]),
4
7
  :where([oui-dialog])::backdrop {
@@ -8,7 +11,7 @@
8
11
  }
9
12
 
10
13
  :where([oui-dialog], [oui-popover], [oui-tooltip-content]) {
11
- @include mixins.shadow-overlay;
14
+ @include shadowMixins.shadow-5;
12
15
 
13
16
  background-color: var(--oui-absolute);
14
17
  scale: 0.9;
@@ -46,7 +49,7 @@
46
49
  }
47
50
 
48
51
  :where([oui-popover], [oui-tooltip-content]) {
49
- @include mixins.floatable;
52
+ @include miscMixins.floatable;
50
53
  }
51
54
 
52
55
  :where([oui-popover]) {
@@ -97,49 +100,49 @@
97
100
  position: absolute;
98
101
  }
99
102
 
100
- &[oui-position^='above'],
101
- &[oui-position^='below'],
102
- &[oui-position^='bottom'],
103
- &[oui-position^='top'] {
103
+ &[oui-position^='above' i],
104
+ &[oui-position^='below' i],
105
+ &[oui-position^='bottom' i],
106
+ &[oui-position^='top' i] {
104
107
  &::after {
105
108
  width: 100%;
106
109
  height: 1em;
107
110
  }
108
111
  }
109
112
 
110
- &[oui-position^='above'],
111
- &[oui-position^='top'] {
113
+ &[oui-position^='above' i],
114
+ &[oui-position^='top' i] {
112
115
  &::after {
113
116
  inset: calc(100% - 0.5em) 0 0;
114
117
  }
115
118
  }
116
119
 
117
- &[oui-position^='below'],
118
- &[oui-position^='bottom'] {
120
+ &[oui-position^='below' i],
121
+ &[oui-position^='bottom' i] {
119
122
  &::after {
120
123
  inset: -0.5em 0 0;
121
124
  }
122
125
  }
123
126
 
124
- &[oui-position^='end'],
125
- &[oui-position^='left'],
126
- &[oui-position^='right'],
127
- &[oui-position^='start'] {
127
+ &[oui-position^='end' i],
128
+ &[oui-position^='left' i],
129
+ &[oui-position^='right' i],
130
+ &[oui-position^='start' i] {
128
131
  &::after {
129
132
  width: 1em;
130
133
  height: 100%;
131
134
  }
132
135
  }
133
136
 
134
- &[oui-position^='end'],
135
- &[oui-position^='right'] {
137
+ &[oui-position^='end' i],
138
+ &[oui-position^='right' i] {
136
139
  &::after {
137
140
  inset: 0 0 0 -0.5em;
138
141
  }
139
142
  }
140
143
 
141
- &[oui-position^='left'],
142
- &[oui-position^='start'] {
144
+ &[oui-position^='left' i],
145
+ &[oui-position^='start' i] {
143
146
  &::after {
144
147
  inset: 0 0 0 calc(100% - 0.5em);
145
148
  }
package/src/css/form.scss CHANGED
@@ -1,6 +1,8 @@
1
1
  /*! https://github.com/oscarpalmer/oui */
2
2
 
3
- @use 'mixins.scss' as mixins;
3
+ @use './mixins/button.mixins.scss' as buttonMixins;
4
+ @use './mixins/input.mixins.scss' as inputMixins;
5
+ @use './mixins/misc.mixins.scss' as miscMixins;
4
6
 
5
7
  :where(.oui-fieldset) {
6
8
  padding: 1em;
@@ -14,7 +16,7 @@
14
16
  }
15
17
 
16
18
  :where(&:not([type='range' i])) {
17
- @include mixins.input;
19
+ @include inputMixins.input;
18
20
 
19
21
  padding: 0.5em 0.75em;
20
22
  border-radius: 0.25em;
@@ -51,16 +53,41 @@
51
53
  font-variant-numeric: tabular-nums;
52
54
  }
53
55
 
56
+ :where(&:is([type='date' i], [type='datetime-local' i], [type='month' i], [type='week' i])) {
57
+ &::-webkit-calendar-picker-indicator {
58
+ --oui-outline-percentage: 100%;
59
+ --oui-outline-value: var(--oui-blue-6);
60
+
61
+ outline: 4px solid
62
+ color-mix(in oklab, var(--oui-outline-value), transparent var(--oui-outline-percentage));
63
+ outline-offset: 2px;
64
+ border-radius: 1em;
65
+ transition: outline 0.125s ease-in-out;
66
+ cursor: pointer;
67
+
68
+ &:focus-within {
69
+ --oui-outline-percentage: 62.5%;
70
+ }
71
+
72
+ @media (hover: hover) {
73
+ &:hover {
74
+ --oui-outline-percentage: 85%;
75
+ }
76
+ }
77
+ }
78
+ }
79
+
54
80
  :where(&:is([type='file' i])) {
55
81
  padding-left: 0.5em;
56
82
 
57
83
  &::file-selector-button {
58
- @include mixins.button;
84
+ @include buttonMixins.button;
59
85
 
60
86
  --oui-background-value: var(--oui-grey-2);
61
87
  --oui-outline-value: var(--oui-grey-6);
62
88
 
63
89
  margin: 0 0.75em 0 0;
90
+ outline: none;
64
91
  font-size: 0.75em;
65
92
  cursor: pointer;
66
93
  }
@@ -71,7 +98,7 @@
71
98
  outline: none;
72
99
 
73
100
  &::range-track {
74
- @include mixins.input;
101
+ @include inputMixins.input;
75
102
 
76
103
  appearance: none;
77
104
  width: 100%;
@@ -84,7 +111,7 @@
84
111
  --oui-background-percentage: 0%;
85
112
  --oui-background-value: var(--oui-blue-6);
86
113
 
87
- @include mixins.input-outlined;
114
+ @include inputMixins.input-outlined;
88
115
 
89
116
  appearance: none;
90
117
  width: 1.25em;
@@ -108,13 +135,15 @@
108
135
  }
109
136
 
110
137
  :where(
111
- &.oui-validate:not([disabled], [readonly], [aria-disabled='true' i]):is(
112
- :user-invalid:not([aria-invalid='false' i]),
113
- [aria-invalid='true' i]
114
- )
138
+ &.oui-validate:not(
139
+ [disabled],
140
+ [readonly],
141
+ [aria-disabled='true' i],
142
+ [aria-readonly='true' i],
143
+ :focus-visible,
144
+ :focus-within
145
+ ):is(:user-invalid:not([aria-invalid='false' i]), [aria-invalid='true' i])
115
146
  ) {
116
- @include mixins.input-invalid;
117
-
118
147
  &::file-selector-button {
119
148
  --oui-background-value: var(--oui-red-2);
120
149
  --oui-foreground-value: var(--oui-red-8);
@@ -126,7 +155,7 @@
126
155
  }
127
156
 
128
157
  &::range-track {
129
- @include mixins.input-invalid;
158
+ @include inputMixins.input-invalid;
130
159
  }
131
160
 
132
161
  & > option:checked {
@@ -136,13 +165,15 @@
136
165
  }
137
166
 
138
167
  :where(
139
- &.oui-validate:not([disabled], [readonly], [aria-disabled='true' i]):is(
140
- :user-valid:not([aria-invalid='true' i]),
141
- [aria-invalid='false' i]
142
- )
168
+ &.oui-validate:not(
169
+ [disabled],
170
+ [readonly],
171
+ [aria-disabled='true' i],
172
+ [aria-readonly='true' i],
173
+ :focus-visible,
174
+ :focus-within
175
+ ):is(:user-valid:not([aria-invalid='true' i]), [aria-invalid='false' i])
143
176
  ) {
144
- @include mixins.input-valid;
145
-
146
177
  &::file-selector-button {
147
178
  --oui-background-value: var(--oui-green-2);
148
179
  --oui-foreground-value: var(--oui-green-8);
@@ -150,7 +181,7 @@
150
181
  }
151
182
 
152
183
  &::range-track {
153
- @include mixins.input-valid;
184
+ @include inputMixins.input-valid;
154
185
  }
155
186
 
156
187
  &::range-thumb {
@@ -163,72 +194,59 @@
163
194
  }
164
195
  }
165
196
 
166
- :where(&:not([disabled], [readonly], [aria-disabled='true' i])) {
167
- &::-webkit-calendar-picker-indicator {
168
- outline: 4px solid transparent;
169
- outline-offset: 2px;
170
- border-radius: 2em;
171
- transition: 0.125s ease-in-out;
172
- cursor: pointer;
173
-
174
- @media (hover: hover) {
175
- &:hover {
176
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 75%);
177
- }
197
+ &:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]) {
198
+ :where(&:focus-visible, &:focus-within) {
199
+ &::file-selector-button {
200
+ --oui-background-value: var(--oui-blue-2);
201
+ --oui-foreground-value: var(--oui-blue-8);
202
+ --oui-outline-value: var(--oui-blue-6);
178
203
  }
179
204
 
180
- &:focus {
181
- outline-color: color-mix(in oklab, var(--oui-blue-6), transparent 75%);
205
+ &::range-thumb,
206
+ &::range-track {
207
+ @include inputMixins.input-focus;
182
208
  }
183
- }
184
- }
185
209
 
186
- :where(&:not([disabled], [readonly], [aria-disabled='true' i]):focus),
187
- :where(&:not([disabled], [readonly], [aria-disabled='true' i]):focus-within) {
188
- @include mixins.input-focus;
210
+ &::range-thumb {
211
+ --oui-background-value: var(--oui-blue-6);
189
212
 
190
- &::file-selector-button {
191
- --oui-background-value: var(--oui-blue-2);
192
- --oui-foreground-value: var(--oui-blue-8);
193
- --oui-outline-value: var(--oui-blue-6);
213
+ box-shadow: 0 1px 2px 2px rgb(0 0 0 / 25%);
214
+ }
194
215
  }
195
216
 
196
- &::range-thumb,
197
- &::range-track {
198
- @include mixins.input-focus;
199
- }
217
+ @media (hover: hover) {
218
+ :where(&:hover) {
219
+ &::file-selector-button {
220
+ --oui-background-value: var(--oui-blue-2);
221
+ --oui-foreground-value: var(--oui-blue-8);
222
+ --oui-outline-value: var(--oui-blue-6);
223
+ }
200
224
 
201
- &::range-thumb {
202
- --oui-background-value: var(--oui-blue-6);
225
+ &::range-thumb {
226
+ --oui-background-value: var(--oui-blue-5);
227
+ }
203
228
 
204
- box-shadow: 0 1px 2px 2px rgb(0 0 0 / 25%);
229
+ &::range-track {
230
+ @include inputMixins.input-hover;
231
+ }
232
+ }
205
233
  }
206
234
  }
207
235
 
208
- @media (hover: hover) {
209
- :where(&:not([disabled], [readonly], [aria-disabled='true' i]):hover) {
210
- @include mixins.input-hover;
211
-
212
- &::file-selector-button {
213
- --oui-background-value: var(--oui-blue-2);
214
- --oui-foreground-value: var(--oui-blue-8);
215
- --oui-outline-value: var(--oui-blue-6);
216
- }
217
-
218
- &::range-thumb {
219
- --oui-background-value: var(--oui-blue-5);
236
+ :where(&:is([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i])) {
237
+ &::-webkit-calendar-picker-indicator {
238
+ &:focus-within {
239
+ --oui-outline-percentage: 0%;
240
+ --oui-outline-value: var(--oui-gray-3);
220
241
  }
221
242
 
222
- &::range-track {
223
- @include mixins.input-hover;
243
+ @media (hover: hover) {
244
+ &:hover {
245
+ --oui-outline-percentage: 0%;
246
+ --oui-outline-value: var(--oui-gray-3);
247
+ }
224
248
  }
225
249
  }
226
- }
227
-
228
- :where(&:is([disabled], [readonly], [aria-disabled='true' i])) {
229
- --oui-foreground-percentage: 25%;
230
-
231
- font-style: italic;
232
250
 
233
251
  &::file-selector-button {
234
252
  --oui-background-value: var(--oui-gray-1);
@@ -243,12 +261,10 @@
243
261
  }
244
262
  }
245
263
 
246
- :where(&:is([disabled], [readonly], [aria-disabled='true' i]):focus) {
247
- --oui-outline-percentage: 75%;
248
- }
249
-
250
264
  :where(&:is([disabled], [aria-disabled='true' i])) {
251
- --oui-background-percentage: 50%;
265
+ &::-webkit-calendar-picker-indicator {
266
+ opacity: 0.5;
267
+ }
252
268
 
253
269
  &::range-thumb {
254
270
  --oui-background-value: var(--oui-gray-1);
@@ -260,10 +276,6 @@
260
276
  --oui-background-percentage: 50%;
261
277
  --oui-background-value: var(--oui-gray-0);
262
278
  }
263
-
264
- &::-webkit-calendar-picker-indicator {
265
- opacity: 0.5;
266
- }
267
279
  }
268
280
  }
269
281
 
@@ -317,12 +329,13 @@ select.oui-input:is([multiple]) {
317
329
  :where(.oui-label, .oui-legend) {
318
330
  font-size: 0.875rem;
319
331
  font-weight: bold;
332
+ align-self: flex-start;
320
333
  }
321
334
 
322
335
  .oui-label {
323
336
  :where(&) {
324
337
  cursor: pointer;
325
- transition: 0.125s ease-in-out;
338
+ transition: color 0.125s ease-in-out;
326
339
  }
327
340
 
328
341
  @media (hover: hover) {
@@ -358,6 +371,7 @@ select.oui-input:is([multiple]) {
358
371
  font-family: system-ui, sans-serif;
359
372
  position: absolute;
360
373
  transition: 0.125s ease-in-out;
374
+ transition-property: background, outline, border, box-shadow, color;
361
375
  pointer-events: none;
362
376
  }
363
377
 
@@ -557,5 +571,5 @@ select.oui-input:is([multiple]) {
557
571
  }
558
572
 
559
573
  :where(.oui-switch input, .oui-toggle input) {
560
- @include mixins.visually-hidden;
574
+ @include miscMixins.visually-hidden;
561
575
  }
@@ -1,6 +1,7 @@
1
1
  /*! https://github.com/oscarpalmer/oui */
2
2
 
3
- @use './mixins.scss' as mixins;
3
+ @use './mixins/input.mixins.scss' as inputMixins;
4
+ @use './mixins/misc.mixins.scss' as miscMixins;
4
5
 
5
6
  :where(oui-listbox, [oui-listbox-content]) {
6
7
  display: flex;
@@ -36,7 +37,7 @@
36
37
 
37
38
  [oui-listbox-filter-input] {
38
39
  :where(&) {
39
- @include mixins.input;
40
+ @include inputMixins.input;
40
41
 
41
42
  --oui-background-value: var(--oui-absolute);
42
43
 
@@ -45,32 +46,6 @@
45
46
  border-radius: 0.25em;
46
47
  position: relative;
47
48
  }
48
-
49
- :where(&:not([disabled], [readonly], [aria-disabled='true' i]):focus) {
50
- @include mixins.input-focus;
51
- }
52
-
53
- @media (hover: hover) {
54
- :where(
55
- &:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]):hover
56
- ) {
57
- @include mixins.input-hover;
58
- }
59
- }
60
-
61
- :where(&:is([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i])) {
62
- --oui-foreground-percentage: 25%;
63
-
64
- font-style: italic;
65
- }
66
-
67
- :where(&:is([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]):focus) {
68
- --oui-outline-percentage: 75%;
69
- }
70
-
71
- :where(&:is([disabled], [aria-disabled='true' i])) {
72
- --oui-background-percentage: 50%;
73
- }
74
49
  }
75
50
 
76
51
  :where([oui-listbox-header]) {
@@ -84,7 +59,7 @@
84
59
  }
85
60
 
86
61
  :where([oui-listbox-hidden]) {
87
- @include mixins.visually-hidden;
62
+ @include miscMixins.visually-hidden;
88
63
 
89
64
  position: absolute;
90
65
  }
@@ -117,11 +92,10 @@
117
92
  outline-offset: -4px;
118
93
  line-height: 1.25;
119
94
  cursor: pointer;
120
- transition: 0.125s ease-in-out;
121
95
  }
122
96
 
123
97
  :where(&[aria-selected='true' i]) {
124
- background-color: var(--oui-blue-3);
98
+ background-color: var(--oui-blue-2);
125
99
  color: var(--oui-blue-9);
126
100
  }
127
101
 
@@ -130,9 +104,7 @@
130
104
  margin: 0 0.75em 0 0;
131
105
  }
132
106
 
133
- :where(
134
- oui-listbox:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]) &
135
- ) {
107
+ oui-listbox:not([disabled], [readonly], [aria-disabled='true' i], [aria-readonly='true' i]) & {
136
108
  @media (hover: hover) {
137
109
  :where(&:hover) {
138
110
  background-color: var(--oui-blue-1);
@@ -1,17 +1,21 @@
1
1
  /*! https://github.com/oscarpalmer/oui */
2
2
 
3
- @use './mixins.scss' as mixins;
3
+ @use './mixins/message.mixins.scss' as messageMixins;
4
+ @use './mixins/misc.mixins.scss' as miscMixins;
4
5
 
5
6
  .oui-message {
6
7
  :where(&) {
8
+ --oui-background: var(--oui-gray-1);
9
+ --oui-border: var(--oui-gray-2);
10
+ --oui-foreground: var(--oui-gray-8);
7
11
  --oui-shadow-mixed: color-mix(
8
12
  in oklab,
9
13
  var(--oui-shadow-value, var(--oui-gray-6)),
10
14
  transparent 92.5%
11
15
  );
12
16
 
13
- @include mixins.card(
14
- color-mix(in oklab, var(--oui-background, var(--oui-gray-0)), transparent 25%),
17
+ @include miscMixins.card(
18
+ color-mix(in oklab, var(--oui-background), transparent 25%),
15
19
  var(--oui-shadow-mixed)
16
20
  );
17
21
 
@@ -19,12 +23,12 @@
19
23
  display: inline-flex;
20
24
  flex-flow: column nowrap;
21
25
  gap: 1em;
22
- color: var(--oui-foreground, var(--oui-gray-8));
26
+ color: var(--oui-foreground);
23
27
  line-height: 1.25;
24
28
  }
25
29
 
26
30
  :where(& h2, & h3, & h4, & h5, & h6) {
27
- color: var(--oui-foreground, var(--oui-gray-10));
31
+ color: var(--oui-foreground);
28
32
  font-size: 1em;
29
33
  font-weight: bold;
30
34
  }
@@ -32,7 +36,7 @@
32
36
  :where(& hr) {
33
37
  height: 1px;
34
38
  margin: 0 -1.25em;
35
- background-color: var(--oui-border, var(--oui-gray-2));
39
+ background-color: var(--oui-border);
36
40
  border: none;
37
41
  }
38
42
 
@@ -45,44 +49,26 @@
45
49
  }
46
50
 
47
51
  :where(&--blue, &--info) {
48
- --oui-background: var(--oui-blue-0);
49
- --oui-border: var(--oui-blue-2);
50
- --oui-foreground: var(--oui-blue-8);
51
- --oui-shadow-value: var(--oui-blue-6);
52
+ @include messageMixins.message-blue;
52
53
  }
53
54
 
54
55
  :where(&--green, &--success) {
55
- --oui-background: var(--oui-green-0);
56
- --oui-border: var(--oui-green-2);
57
- --oui-foreground: var(--oui-green-8);
58
- --oui-shadow-value: var(--oui-green-6);
56
+ @include messageMixins.message-green;
59
57
  }
60
58
 
61
59
  :where(&--orange, &--warning) {
62
- --oui-background: var(--oui-orange-0);
63
- --oui-border: var(--oui-orange-2);
64
- --oui-foreground: var(--oui-orange-8);
65
- --oui-shadow-value: var(--oui-orange-6);
60
+ @include messageMixins.message-orange;
66
61
  }
67
62
 
68
63
  :where(&--purple, &--special) {
69
- --oui-background: var(--oui-purple-0);
70
- --oui-border: var(--oui-purple-2);
71
- --oui-foreground: var(--oui-purple-8);
72
- --oui-shadow-value: var(--oui-purple-6);
64
+ @include messageMixins.message-purple;
73
65
  }
74
66
 
75
67
  :where(&--red, &--error) {
76
- --oui-background: var(--oui-red-0);
77
- --oui-border: var(--oui-red-2);
78
- --oui-foreground: var(--oui-red-8);
79
- --oui-shadow-value: var(--oui-red-6);
68
+ @include messageMixins.message-red;
80
69
  }
81
70
 
82
71
  :where(&--yellow, &--notice) {
83
- --oui-background: var(--oui-yellow-0);
84
- --oui-border: var(--oui-yellow-2);
85
- --oui-foreground: var(--oui-yellow-8);
86
- --oui-shadow-value: var(--oui-yellow-6);
72
+ @include messageMixins.message-yellow;
87
73
  }
88
74
  }
@@ -0,0 +1,53 @@
1
+ @use './shadow.mixins.scss' as shadowMixins;
2
+
3
+ @mixin badge() {
4
+ --oui-shadow-inset: color-mix(in oklab, var(--oui-absolute), transparent 50%);
5
+ --oui-shadow-value: var(--oui-gray-6);
6
+ --oui-shadow-mixed: color-mix(in oklab, var(--oui-shadow-value), transparent 87.5%);
7
+
8
+ @include shadowMixins.shadow-1(var(--oui-shadow-mixed), var(--oui-shadow-inset));
9
+
10
+ display: inline-flex;
11
+ flex-flow: row nowrap;
12
+ gap: 0.5em;
13
+ background-color: color-mix(in oklab, var(--oui-background, var(--oui-gray-1)), transparent 25%);
14
+ color: var(--oui-foreground, var(--oui-gray-8));
15
+ text-shadow: 0 1px 0 var(--oui-absolute);
16
+ line-height: 1.25;
17
+ }
18
+
19
+ @mixin badge-blue() {
20
+ --oui-background: var(--oui-blue-1);
21
+ --oui-foreground: var(--oui-blue-8);
22
+ --oui-shadow-value: var(--oui-blue-6);
23
+ }
24
+
25
+ @mixin badge-green() {
26
+ --oui-background: var(--oui-green-1);
27
+ --oui-foreground: var(--oui-green-8);
28
+ --oui-shadow-value: var(--oui-green-6);
29
+ }
30
+
31
+ @mixin badge-orange() {
32
+ --oui-background: var(--oui-orange-1);
33
+ --oui-foreground: var(--oui-orange-8);
34
+ --oui-shadow-value: var(--oui-orange-6);
35
+ }
36
+
37
+ @mixin badge-purple() {
38
+ --oui-background: var(--oui-purple-1);
39
+ --oui-foreground: var(--oui-purple-8);
40
+ --oui-shadow-value: var(--oui-purple-6);
41
+ }
42
+
43
+ @mixin badge-red() {
44
+ --oui-background: var(--oui-red-1);
45
+ --oui-foreground: var(--oui-red-8);
46
+ --oui-shadow-value: var(--oui-red-6);
47
+ }
48
+
49
+ @mixin badge-yellow() {
50
+ --oui-background: var(--oui-yellow-1);
51
+ --oui-foreground: var(--oui-yellow-8);
52
+ --oui-shadow-value: var(--oui-yellow-6);
53
+ }