@oscarpalmer/oui 0.18.0 → 0.19.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 (44) hide show
  1. package/dist/css/badge.css +10 -10
  2. package/dist/css/button.css +9 -9
  3. package/dist/css/color.css +99 -99
  4. package/dist/css/content.css +1 -1
  5. package/dist/css/flex.css +39 -39
  6. package/dist/css/form.css +29 -56
  7. package/dist/css/message.css +6 -6
  8. package/dist/css/reset.css +3 -2
  9. package/dist/css/table.css +4 -4
  10. package/dist/css/tooltip.css +18 -1
  11. package/dist/js/attributable.full.js +29 -41
  12. package/dist/js/floatable.full.js +322 -337
  13. package/dist/js/focus-trap/embedded.full.js +252 -195
  14. package/dist/js/focus-trap/standalone.full.js +283 -238
  15. package/dist/js/index.js +3 -3
  16. package/dist/js/oui.full.js +1170 -1193
  17. package/dist/js/popover.full.js +568 -630
  18. package/dist/js/popover.js +1 -1
  19. package/dist/js/splitter.full.js +533 -369
  20. package/dist/js/splitter.js +2 -2
  21. package/dist/js/tooltip.full.js +488 -554
  22. package/dist/js/tooltip.js +1 -1
  23. package/package.json +19 -19
  24. package/src/css/a11y.scss +1 -1
  25. package/src/css/badge.scss +23 -19
  26. package/src/css/button.scss +9 -9
  27. package/src/css/color.scss +99 -99
  28. package/src/css/content.scss +6 -8
  29. package/src/css/flex.scss +21 -20
  30. package/src/css/form.scss +37 -60
  31. package/src/css/message.scss +8 -12
  32. package/src/css/mixins.scss +11 -12
  33. package/src/css/popover.scss +2 -2
  34. package/src/css/reset.scss +14 -14
  35. package/src/css/splitter.scss +15 -13
  36. package/src/css/table.scss +11 -11
  37. package/src/css/tooltip.scss +25 -4
  38. package/src/js/attributable.ts +3 -10
  39. package/src/js/floatable.ts +7 -25
  40. package/src/js/focus-trap/embedded.ts +6 -24
  41. package/src/js/popover.ts +3 -3
  42. package/src/js/splitter.ts +9 -39
  43. package/src/js/tooltip.ts +5 -17
  44. package/dist/css/value.css +0 -1
package/dist/css/form.css CHANGED
@@ -203,132 +203,105 @@
203
203
  top: 50%;
204
204
  transform: translateY(-50%);
205
205
  }
206
- :where(.oui-input.oui-validate:not([disabled],
207
- [readonly],
208
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
206
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
209
207
  [aria-invalid=true i])) {
210
208
  --oui-border-value: var(--oui-red-5);
211
209
  --oui-foreground-value: var(--oui-red-9);
212
210
  --oui-outline-percentage: 82.5%;
213
211
  --oui-outline-value: var(--oui-red-6);
214
212
  }
215
- :where(.oui-input.oui-validate:not([disabled],
216
- [readonly],
217
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
213
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
218
214
  [aria-invalid=true i]))::file-selector-button {
219
215
  --oui-background-value: var(--oui-red-2);
220
216
  --oui-foreground-value: var(--oui-red-8);
221
217
  --oui-outline-value: var(--oui-red-6);
222
218
  }
223
- :where(.oui-input.oui-validate:not([disabled],
224
- [readonly],
225
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
219
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
226
220
  [aria-invalid=true i]))::-moz-range-thumb {
227
221
  --oui-background-value: var(--oui-red-6);
228
222
  }
229
- :where(.oui-input.oui-validate:not([disabled],
230
- [readonly],
231
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
223
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
232
224
  [aria-invalid=true i]))::-ms-thumb {
233
225
  --oui-background-value: var(--oui-red-6);
234
226
  }
235
- :where(.oui-input.oui-validate:not([disabled],
236
- [readonly],
237
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
227
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
238
228
  [aria-invalid=true i]))::-webkit-slider-thumb {
239
229
  --oui-background-value: var(--oui-red-6);
240
230
  }
241
- :where(.oui-input.oui-validate:not([disabled],
242
- [readonly],
243
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
231
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
244
232
  [aria-invalid=true i]))::-moz-range-track {
245
233
  --oui-border-value: var(--oui-red-5);
246
234
  --oui-foreground-value: var(--oui-red-9);
247
235
  --oui-outline-percentage: 82.5%;
248
236
  --oui-outline-value: var(--oui-red-6);
249
237
  }
250
- :where(.oui-input.oui-validate:not([disabled],
251
- [readonly],
252
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
238
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
253
239
  [aria-invalid=true i]))::-ms-track {
254
240
  --oui-border-value: var(--oui-red-5);
255
241
  --oui-foreground-value: var(--oui-red-9);
256
242
  --oui-outline-percentage: 82.5%;
257
243
  --oui-outline-value: var(--oui-red-6);
258
244
  }
259
- :where(.oui-input.oui-validate:not([disabled],
260
- [readonly],
261
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
245
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
262
246
  [aria-invalid=true i]))::-webkit-slider-runnable-track {
263
247
  --oui-border-value: var(--oui-red-5);
264
248
  --oui-foreground-value: var(--oui-red-9);
265
249
  --oui-outline-percentage: 82.5%;
266
250
  --oui-outline-value: var(--oui-red-6);
267
251
  }
268
- :where(.oui-input.oui-validate:not([disabled],
269
- [readonly],
270
- [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
252
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-invalid:not([aria-invalid=false i]),
271
253
  [aria-invalid=true i])) > option:checked {
272
254
  background-color: var(--oui-red-2);
273
255
  color: var(--oui-red-9);
274
256
  }
275
- :where(.oui-input.oui-validate:not([disabled],
276
- [readonly],
277
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i])) {
257
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
258
+ [aria-invalid=false i])) {
278
259
  --oui-border-value: var(--oui-green-5);
279
260
  --oui-foreground-value: var(--oui-green-9);
280
261
  --oui-outline-percentage: 82.5%;
281
262
  --oui-outline-value: var(--oui-green-6);
282
263
  }
283
- :where(.oui-input.oui-validate:not([disabled],
284
- [readonly],
285
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::file-selector-button {
264
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
265
+ [aria-invalid=false i]))::file-selector-button {
286
266
  --oui-background-value: var(--oui-green-2);
287
267
  --oui-foreground-value: var(--oui-green-8);
288
268
  --oui-outline-value: var(--oui-green-6);
289
269
  }
290
- :where(.oui-input.oui-validate:not([disabled],
291
- [readonly],
292
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-moz-range-track {
270
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
271
+ [aria-invalid=false i]))::-moz-range-track {
293
272
  --oui-border-value: var(--oui-green-5);
294
273
  --oui-foreground-value: var(--oui-green-9);
295
274
  --oui-outline-percentage: 82.5%;
296
275
  --oui-outline-value: var(--oui-green-6);
297
276
  }
298
- :where(.oui-input.oui-validate:not([disabled],
299
- [readonly],
300
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-ms-track {
277
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
278
+ [aria-invalid=false i]))::-ms-track {
301
279
  --oui-border-value: var(--oui-green-5);
302
280
  --oui-foreground-value: var(--oui-green-9);
303
281
  --oui-outline-percentage: 82.5%;
304
282
  --oui-outline-value: var(--oui-green-6);
305
283
  }
306
- :where(.oui-input.oui-validate:not([disabled],
307
- [readonly],
308
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-webkit-slider-runnable-track {
284
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
285
+ [aria-invalid=false i]))::-webkit-slider-runnable-track {
309
286
  --oui-border-value: var(--oui-green-5);
310
287
  --oui-foreground-value: var(--oui-green-9);
311
288
  --oui-outline-percentage: 82.5%;
312
289
  --oui-outline-value: var(--oui-green-6);
313
290
  }
314
- :where(.oui-input.oui-validate:not([disabled],
315
- [readonly],
316
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-moz-range-thumb {
291
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
292
+ [aria-invalid=false i]))::-moz-range-thumb {
317
293
  --oui-background-value: var(--oui-green-6);
318
294
  }
319
- :where(.oui-input.oui-validate:not([disabled],
320
- [readonly],
321
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-ms-thumb {
295
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
296
+ [aria-invalid=false i]))::-ms-thumb {
322
297
  --oui-background-value: var(--oui-green-6);
323
298
  }
324
- :where(.oui-input.oui-validate:not([disabled],
325
- [readonly],
326
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i]))::-webkit-slider-thumb {
299
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
300
+ [aria-invalid=false i]))::-webkit-slider-thumb {
327
301
  --oui-background-value: var(--oui-green-6);
328
302
  }
329
- :where(.oui-input.oui-validate:not([disabled],
330
- [readonly],
331
- [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]), [aria-invalid=false i])) > option:checked {
303
+ :where(.oui-input.oui-validate:not([disabled], [readonly], [aria-disabled=true i]):is(:user-valid:not([aria-invalid=true i]),
304
+ [aria-invalid=false i])) > option:checked {
332
305
  background-color: var(--oui-green-2);
333
306
  color: var(--oui-green-9);
334
307
  }
@@ -512,7 +485,7 @@
512
485
 
513
486
  :where(select.oui-input:is([multiple])) {
514
487
  --oui-off: attr(oui-off);
515
- --oui-on: attr(oui-on, "✓");
488
+ --oui-on: attr(oui-on, '\2713');
516
489
  padding: 0;
517
490
  }
518
491
  :where(select.oui-input:is([multiple]) > option) {
@@ -713,7 +686,7 @@
713
686
  --oui-background-value: var(--oui-gray-0);
714
687
  --oui-border-value: var(--oui-gray-3);
715
688
  --oui-foreground-percentage: 25%;
716
- --oui-foreground-value: currentColor;
689
+ --oui-foreground-value: currentcolor;
717
690
  color: color-mix(in oklab, var(--oui-foreground-value), transparent var(--oui-foreground-percentage));
718
691
  font-style: italic;
719
692
  cursor: default;
@@ -35,37 +35,37 @@
35
35
  flex-flow: row wrap;
36
36
  gap: 1em;
37
37
  }
38
- :where(.oui-message-blue, .oui-message-info) {
38
+ :where(.oui-message--blue, .oui-message--info) {
39
39
  --oui-background: var(--oui-blue-0);
40
40
  --oui-border: var(--oui-blue-2);
41
41
  --oui-foreground: var(--oui-blue-8);
42
42
  --oui-shadow-value: var(--oui-blue-6);
43
43
  }
44
- :where(.oui-message-green, .oui-message-success) {
44
+ :where(.oui-message--green, .oui-message--success) {
45
45
  --oui-background: var(--oui-green-0);
46
46
  --oui-border: var(--oui-green-2);
47
47
  --oui-foreground: var(--oui-green-8);
48
48
  --oui-shadow-value: var(--oui-green-6);
49
49
  }
50
- :where(.oui-message-orange, .oui-message-warning) {
50
+ :where(.oui-message--orange, .oui-message--warning) {
51
51
  --oui-background: var(--oui-orange-0);
52
52
  --oui-border: var(--oui-orange-2);
53
53
  --oui-foreground: var(--oui-orange-8);
54
54
  --oui-shadow-value: var(--oui-orange-6);
55
55
  }
56
- :where(.oui-message-purple, .oui-message-special) {
56
+ :where(.oui-message--purple, .oui-message--special) {
57
57
  --oui-background: var(--oui-purple-0);
58
58
  --oui-border: var(--oui-purple-2);
59
59
  --oui-foreground: var(--oui-purple-8);
60
60
  --oui-shadow-value: var(--oui-purple-6);
61
61
  }
62
- :where(.oui-message-red, .oui-message-error) {
62
+ :where(.oui-message--red, .oui-message--error) {
63
63
  --oui-background: var(--oui-red-0);
64
64
  --oui-border: var(--oui-red-2);
65
65
  --oui-foreground: var(--oui-red-8);
66
66
  --oui-shadow-value: var(--oui-red-6);
67
67
  }
68
- :where(.oui-message-yellow, .oui-message-notice) {
68
+ :where(.oui-message--yellow, .oui-message--notice) {
69
69
  --oui-background: var(--oui-yellow-0);
70
70
  --oui-border: var(--oui-yellow-2);
71
71
  --oui-foreground: var(--oui-yellow-8);
@@ -194,7 +194,7 @@ summary) {
194
194
  :where(table) {
195
195
  border-collapse: collapse;
196
196
  /** Correct table border colour in Chrome, Edge, and Safari [SE] */
197
- border-color: currentColor;
197
+ border-color: currentcolor;
198
198
  /** Modernized border spacing [HR] */
199
199
  border-spacing: 0;
200
200
  /** More legible numbers [HR] */
@@ -308,6 +308,7 @@ summary) {
308
308
  ::-webkit-search-decoration {
309
309
  /** Remove the inner padding in Chrome, Edge, and Safari on macOS [SE] */
310
310
  -webkit-appearance: none;
311
+ appearance: none;
311
312
  }
312
313
 
313
314
  /**
@@ -360,7 +361,7 @@ summary) {
360
361
  }
361
362
 
362
363
  :where(svg:not([fill])) {
363
- fill: currentColor;
364
+ fill: currentcolor;
364
365
  }
365
366
 
366
367
  /**
@@ -3,7 +3,7 @@
3
3
  width: 100%;
4
4
  background-color: var(--oui-absolute);
5
5
  }
6
- :where(.oui-table-wrapper) {
6
+ :where(.oui-table_wrapper) {
7
7
  max-height: 32em;
8
8
  overflow: auto;
9
9
  border: 1px solid var(--oui-gray-3);
@@ -16,7 +16,7 @@
16
16
  align-content: center;
17
17
  background-color: var(--oui-gray-1);
18
18
  border: solid var(--oui-gray-3);
19
- border-width: 0 0 1px 0;
19
+ border-width: 0 0 1px;
20
20
  font-size: 0.875rem;
21
21
  text-align: left;
22
22
  text-indent: 0.5rem;
@@ -58,7 +58,7 @@
58
58
  :where(.oui-table thead th)::after {
59
59
  --oui-shadow-direction: bottom;
60
60
  border-top: 1px solid var(--oui-gray-3);
61
- inset: 100% 0 0 0;
61
+ inset: 100%;
62
62
  }
63
63
  :where(.oui-table:has(caption) thead th) {
64
64
  top: 2rem;
@@ -69,7 +69,7 @@
69
69
  :where(.oui-table tfoot td)::after {
70
70
  --oui-shadow-direction: top;
71
71
  border-bottom: 1px solid var(--oui-gray-3);
72
- inset: -4px 0 0 0;
72
+ inset: -4px;
73
73
  }
74
74
  :where(.oui-table tbody td) {
75
75
  border: solid var(--oui-gray-3);
@@ -1,5 +1,22 @@
1
1
 
2
- :where([oui-tooltip]:is(abbr, b, cite, dfn, code, em, i, kbd, mark, q, samp, small, span, strong, sub, sup, time, var)) {
2
+ :where([oui-tooltip]:is(abbr,
3
+ b,
4
+ cite,
5
+ dfn,
6
+ code,
7
+ em,
8
+ i,
9
+ kbd,
10
+ mark,
11
+ q,
12
+ samp,
13
+ small,
14
+ span,
15
+ strong,
16
+ sub,
17
+ sup,
18
+ time,
19
+ var)) {
3
20
  -webkit-text-decoration: underline dotted;
4
21
  text-decoration: underline dotted;
5
22
  -webkit-text-decoration-skip: ink;
@@ -1,48 +1,36 @@
1
1
  function attributable(attribute, add, remove) {
2
- const observer = new MutationObserver(entries => {
3
- const { length } = entries;
4
- for (let index = 0; index < length; index += 1) {
5
- const entry = entries[index];
6
- if (entry.type === 'attributes' && entry.target instanceof HTMLElement) {
7
- if (entry.target.hasAttribute(attribute)) {
8
- handleAdded(attribute, [entry.target], add);
9
- }
10
- else {
11
- handleRemoved([entry.target], remove);
12
- }
13
- }
14
- else if (entry.type === 'childList') {
15
- handleAdded(attribute, entry.addedNodes, add);
16
- handleRemoved(entry.removedNodes, remove);
17
- }
18
- }
19
- });
20
- observer.observe(document, {
21
- attributeFilter: [attribute],
22
- attributes: true,
23
- childList: true,
24
- subtree: true,
25
- });
26
- requestAnimationFrame(() => {
27
- handleAdded(attribute, document.querySelectorAll(`[${attribute}]`), add);
28
- });
2
+ new MutationObserver((entries) => {
3
+ const { length } = entries;
4
+ for (let index = 0; index < length; index += 1) {
5
+ const entry = entries[index];
6
+ if (entry.type === "attributes" && entry.target instanceof HTMLElement) if (entry.target.hasAttribute(attribute)) handleAdded(attribute, [entry.target], add);
7
+ else handleRemoved([entry.target], remove);
8
+ else if (entry.type === "childList") {
9
+ handleAdded(attribute, entry.addedNodes, add);
10
+ handleRemoved(entry.removedNodes, remove);
11
+ }
12
+ }
13
+ }).observe(document, {
14
+ attributeFilter: [attribute],
15
+ attributes: true,
16
+ childList: true,
17
+ subtree: true
18
+ });
19
+ requestAnimationFrame(() => {
20
+ handleAdded(attribute, document.querySelectorAll(`[${attribute}]`), add);
21
+ });
29
22
  }
30
23
  function handleAdded(attribute, nodes, add) {
31
- const elements = [...nodes].filter(node => node instanceof HTMLElement);
32
- const { length } = elements;
33
- for (let index = 0; index < length; index += 1) {
34
- const element = elements[index];
35
- if (element.hasAttribute(attribute)) {
36
- add(element);
37
- }
38
- }
24
+ const elements = [...nodes].filter((node) => node instanceof HTMLElement);
25
+ const { length } = elements;
26
+ for (let index = 0; index < length; index += 1) {
27
+ const element = elements[index];
28
+ if (element.hasAttribute(attribute)) add(element);
29
+ }
39
30
  }
40
31
  function handleRemoved(nodes, remove) {
41
- const elements = [...nodes].filter(node => node instanceof HTMLElement);
42
- const { length } = elements;
43
- for (let index = 0; index < length; index += 1) {
44
- remove(elements[index]);
45
- }
32
+ const elements = [...nodes].filter((node) => node instanceof HTMLElement);
33
+ const { length } = elements;
34
+ for (let index = 0; index < length; index += 1) remove(elements[index]);
46
35
  }
47
-
48
36
  export { attributable };