contain-css-svelte 1.4.1 → 1.4.3

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 (50) hide show
  1. package/dist/Card.svelte +25 -0
  2. package/dist/controls/Button.svelte +43 -18
  3. package/dist/controls/ButtonLink.svelte +31 -92
  4. package/dist/controls/Checkbox.svelte +34 -4
  5. package/dist/controls/CircleButton.svelte +36 -95
  6. package/dist/controls/Input.svelte +25 -0
  7. package/dist/controls/RadioButton.svelte +27 -2
  8. package/dist/controls/Select.svelte +25 -0
  9. package/dist/controls/Slider.svelte +25 -0
  10. package/dist/controls/TabItem.svelte +25 -0
  11. package/dist/controls/Toggle.svelte +27 -2
  12. package/dist/dropdowns/DropdownMenu.svelte +60 -6
  13. package/dist/layout/Accordion.svelte +28 -3
  14. package/dist/layout/Bar.svelte +25 -0
  15. package/dist/layout/ColumnContainer.svelte +25 -0
  16. package/dist/layout/Columns.svelte +25 -0
  17. package/dist/layout/Container.svelte +25 -0
  18. package/dist/layout/DataList.svelte +25 -0
  19. package/dist/layout/DataListItem.svelte +28 -3
  20. package/dist/layout/Fieldset.svelte +25 -0
  21. package/dist/layout/Form.svelte +25 -0
  22. package/dist/layout/FormItem.svelte +25 -0
  23. package/dist/layout/GridLayout.svelte +25 -0
  24. package/dist/layout/Hero.svelte +35 -0
  25. package/dist/layout/Inline.svelte +25 -0
  26. package/dist/layout/MenuList.svelte +36 -11
  27. package/dist/layout/Page.svelte +25 -0
  28. package/dist/layout/RowContainer.svelte +25 -0
  29. package/dist/layout/Sidebar.svelte +31 -6
  30. package/dist/layout/SidebarContainer.svelte +25 -0
  31. package/dist/layout/SplitPane.svelte +25 -0
  32. package/dist/layout/Stack.svelte +25 -0
  33. package/dist/layout/TabBar.svelte +25 -0
  34. package/dist/layout/Table.svelte +75 -10
  35. package/dist/layout/Tile.svelte +28 -3
  36. package/dist/misc/CodeInner.svelte +49 -22
  37. package/dist/misc/Progress.svelte +25 -0
  38. package/dist/misc/Tag.svelte +25 -0
  39. package/dist/overlays/Dialog.svelte +58 -0
  40. package/dist/overlays/Tooltip.svelte +57 -1
  41. package/dist/sass/_affordances.scss +10 -4
  42. package/dist/sass/_typography.scss +53 -0
  43. package/dist/typography/TextLayout.svelte +25 -0
  44. package/dist/vars/affordances.css +9 -4
  45. package/dist/vars/code.css +12 -0
  46. package/dist/vars/colors.css +39 -18
  47. package/dist/vars/defaults.css +60 -22
  48. package/dist/vars/themes/dark.css +3 -3
  49. package/dist/vars/themes/light.css +34 -31
  50. package/package.json +1 -1
@@ -43,7 +43,10 @@
43
43
  --checkbox-transition: 400ms;
44
44
  --checked-weight: var(--bold);
45
45
  --grab-bar-hover-base-color-percentage: 88%;
46
- --grab-bar-hover-color-mix: var(--hover-color-mix, white);
46
+ --grab-bar-hover-color-mix: var(
47
+ --hover-color-mix,
48
+ var(--grab-bar-fg, var(--sidebar-fg, var(--fg)))
49
+ );
47
50
  --grab-bar-active-base-color-percentage: 80%;
48
51
  --grab-bar-active-color-mix: var(--active-color-mix, black);
49
52
  --grab-bar-shadow-color: color-mix(
@@ -52,14 +55,14 @@
52
55
  transparent
53
56
  );
54
57
  --grab-bar-hover-bg: color-mix(
55
- in oklch,
58
+ in oklab,
56
59
  var(--grab-bar-bg, var(--sidebar-bg, var(--surface-bg, var(--bg))))
57
60
  var(--grab-bar-hover-base-color-percentage, 88%),
58
61
  var(--grab-bar-hover-color-mix, white)
59
62
  calc(100% - var(--grab-bar-hover-base-color-percentage, 88%))
60
63
  );
61
64
  --grab-bar-active-bg: color-mix(
62
- in oklch,
65
+ in oklab,
63
66
  var(--grab-bar-bg, var(--sidebar-bg, var(--surface-bg, var(--bg))))
64
67
  var(--grab-bar-active-base-color-percentage, 80%),
65
68
  var(--grab-bar-active-color-mix, black)
@@ -81,7 +84,9 @@
81
84
  --scrollbar-track-bg: transparent;
82
85
 
83
86
  --hover-base-color-percentage: 90%;
84
- --hover-color-mix: white;
87
+ /* --hover-color-mix is deliberately unset: hovers mix toward each
88
+ element's own text color (see clickable-hover-affordance). Set it to
89
+ force one direction, e.g. black. */
85
90
  --active-base-color-percentage: 90%;
86
91
  --active-color-mix: black;
87
92
  --disabled-base-color-percentage: 50%;
@@ -4,4 +4,16 @@
4
4
  --code-tab-size: 4;
5
5
  --code-width: min(75em, 100%);
6
6
  --code-height: auto;
7
+ /* Token backgrounds must be explicit: each token's color-props chain ends
8
+ with no fallback, and an unset custom property inherits, so without these
9
+ an ancestor's --bg would paint behind every token. Themes that style
10
+ tokens already set these; this covers themes that don't. */
11
+ --code-comment-bg: transparent;
12
+ --code-string-bg: transparent;
13
+ --code-keyword-bg: transparent;
14
+ --code-attr-name-bg: transparent;
15
+ --code-tag-bg: transparent;
16
+ --code-function-bg: transparent;
17
+ --code-variable-bg: transparent;
18
+ --code-operator-bg: transparent;
7
19
  }
@@ -3,16 +3,24 @@
3
3
  --muted-text-amount: 20%;
4
4
  --white: #fff;
5
5
  --black: #222;
6
- --primary-bg: var(--material-color-blue-600);
7
- --primary-color: var(--material-color-blue-600);
6
+ --primary-bg: var(--material-color-indigo-600);
7
+ --primary-color: var(--material-color-indigo-600);
8
8
  --primary-fg: var(--white);
9
- --secondary-bg: var(--material-color-blue-grey-100);
10
- --secondary-color: var(--material-color-blue-grey-100);
11
- --secondary-fg: var(--material-color-grey-900);
9
+ --secondary-bg: var(--material-color-indigo-50);
10
+ --secondary-color: var(--material-color-indigo-50);
11
+ --secondary-fg: var(--material-color-indigo-900);
12
12
  --inactive-bg: var(--material-color-grey-400);
13
13
  --inactive-fg: var(--material-color-grey-900);
14
14
 
15
- /* Fallback colors - themes can override these */
15
+ /* Fallback colors - themes can override these.
16
+
17
+ Neutral on purpose: this file is the base every theme (and every app
18
+ with no theme at all) inherits before anything else runs, so a tint
19
+ here reaches apps that never asked for it. A theme that wants a
20
+ particular cast -- indigo, warm, whatever -- sets --bg/--fg itself
21
+ (see themes/light.css); --border-color below already derives from
22
+ whatever --bg/--fg a theme (or an app) actually provides, so a themed
23
+ app gets a themed border for free without this file picking a hue. */
16
24
  --bg: var(--material-color-grey-50);
17
25
  --fg: var(--material-color-grey-900);
18
26
 
@@ -23,21 +31,26 @@
23
31
  var(--menu-fg, var(--fg)) 6%
24
32
  );
25
33
  --shadow-color: color-mix(in srgb, var(--fg) 10%, rgba(34, 34, 34, 0.2));
26
- --border-color: var(--fg);
27
- --warning-bg: var(--material-color-orange-600);
28
- --warning-color: var(--material-color-orange-600);
29
- --warning-fg: var(--white);
34
+ /* Derived from the page pair rather than hard-coded, so a theme that only
35
+ sets --bg/--fg (light or dark) still gets a visible but quiet border. */
36
+ --border-color: color-mix(in oklab, var(--fg) 35%, var(--bg));
37
+ /* Semantic pairs meet WCAG AA (4.5:1) for button-sized text. Warning is
38
+ amber with dark text: no orange dark enough for white text still reads
39
+ as "warning" rather than "danger". */
40
+ --warning-bg: var(--material-color-amber-400);
41
+ --warning-color: var(--material-color-amber-400);
42
+ --warning-fg: var(--material-color-grey-900);
30
43
  --warning-text-transform: uppercase;
31
44
 
32
45
  /* Semantic color variants */
33
- --danger-bg: var(--material-color-red-600);
34
- --danger-color: var(--material-color-red-600);
46
+ --danger-bg: var(--material-color-red-700);
47
+ --danger-color: var(--material-color-red-700);
35
48
  --danger-fg: var(--white);
36
- --success-bg: var(--material-color-green-600);
37
- --success-color: var(--material-color-green-600);
49
+ --success-bg: var(--material-color-green-800);
50
+ --success-color: var(--material-color-green-800);
38
51
  --success-fg: var(--white);
39
- --info-bg: var(--material-color-light-blue-600);
40
- --info-color: var(--material-color-light-blue-600);
52
+ --info-bg: var(--material-color-light-blue-800);
53
+ --info-color: var(--material-color-light-blue-800);
41
54
  --info-fg: var(--white);
42
55
 
43
56
  --surface-bg: var(--bg);
@@ -48,7 +61,12 @@
48
61
  affordances.css. The color-props(menu-item, menu, button, control) chain
49
62
  resolves it to --menu-bg / --bg at the element, keeping per-instance
50
63
  --menu-bg overrides working. */
51
- --focus-color: var(--material-color-blue-a400);
64
+ /* --focus-color intentionally not defaulted here either: both consumers
65
+ (_affordances.scss's outline rule, Tag's close-button outline) already
66
+ fall back to the browser's own focus ring / currentColor when it's
67
+ unset, which is exactly the neutral behavior an un-themed app should
68
+ get. A theme that wants a specific ring sets --focus-color itself
69
+ (see themes/light.css, themes/material.css, themes/purple.css). */
52
70
  --tooltip-border: none;
53
71
  }
54
72
 
@@ -59,7 +77,10 @@ body {
59
77
 
60
78
  a {
61
79
  background-color: var(--link-bg, transparent);
62
- color: var(--link-fg, var(--material-color-blue-a400));
80
+ /* Same reasoning as --surface-link-fg above: derive from the theme's own
81
+ --primary-bg (always defined, even for an app with no theme at all)
82
+ rather than hard-coding a hue here too. */
83
+ color: var(--link-fg, var(--primary-bg));
63
84
  }
64
85
 
65
86
  /* Color definitions */
@@ -297,16 +297,24 @@
297
297
  --muted-text-amount: 20%;
298
298
  --white: #fff;
299
299
  --black: #222;
300
- --primary-bg: var(--material-color-blue-600);
301
- --primary-color: var(--material-color-blue-600);
300
+ --primary-bg: var(--material-color-indigo-600);
301
+ --primary-color: var(--material-color-indigo-600);
302
302
  --primary-fg: var(--white);
303
- --secondary-bg: var(--material-color-blue-grey-100);
304
- --secondary-color: var(--material-color-blue-grey-100);
305
- --secondary-fg: var(--material-color-grey-900);
303
+ --secondary-bg: var(--material-color-indigo-50);
304
+ --secondary-color: var(--material-color-indigo-50);
305
+ --secondary-fg: var(--material-color-indigo-900);
306
306
  --inactive-bg: var(--material-color-grey-400);
307
307
  --inactive-fg: var(--material-color-grey-900);
308
308
 
309
- /* Fallback colors - themes can override these */
309
+ /* Fallback colors - themes can override these.
310
+
311
+ Neutral on purpose: this file is the base every theme (and every app
312
+ with no theme at all) inherits before anything else runs, so a tint
313
+ here reaches apps that never asked for it. A theme that wants a
314
+ particular cast -- indigo, warm, whatever -- sets --bg/--fg itself
315
+ (see themes/light.css); --border-color below already derives from
316
+ whatever --bg/--fg a theme (or an app) actually provides, so a themed
317
+ app gets a themed border for free without this file picking a hue. */
310
318
  --bg: var(--material-color-grey-50);
311
319
  --fg: var(--material-color-grey-900);
312
320
 
@@ -317,21 +325,26 @@
317
325
  var(--menu-fg, var(--fg)) 6%
318
326
  );
319
327
  --shadow-color: color-mix(in srgb, var(--fg) 10%, rgba(34, 34, 34, 0.2));
320
- --border-color: var(--fg);
321
- --warning-bg: var(--material-color-orange-600);
322
- --warning-color: var(--material-color-orange-600);
323
- --warning-fg: var(--white);
328
+ /* Derived from the page pair rather than hard-coded, so a theme that only
329
+ sets --bg/--fg (light or dark) still gets a visible but quiet border. */
330
+ --border-color: color-mix(in oklab, var(--fg) 35%, var(--bg));
331
+ /* Semantic pairs meet WCAG AA (4.5:1) for button-sized text. Warning is
332
+ amber with dark text: no orange dark enough for white text still reads
333
+ as "warning" rather than "danger". */
334
+ --warning-bg: var(--material-color-amber-400);
335
+ --warning-color: var(--material-color-amber-400);
336
+ --warning-fg: var(--material-color-grey-900);
324
337
  --warning-text-transform: uppercase;
325
338
 
326
339
  /* Semantic color variants */
327
- --danger-bg: var(--material-color-red-600);
328
- --danger-color: var(--material-color-red-600);
340
+ --danger-bg: var(--material-color-red-700);
341
+ --danger-color: var(--material-color-red-700);
329
342
  --danger-fg: var(--white);
330
- --success-bg: var(--material-color-green-600);
331
- --success-color: var(--material-color-green-600);
343
+ --success-bg: var(--material-color-green-800);
344
+ --success-color: var(--material-color-green-800);
332
345
  --success-fg: var(--white);
333
- --info-bg: var(--material-color-light-blue-600);
334
- --info-color: var(--material-color-light-blue-600);
346
+ --info-bg: var(--material-color-light-blue-800);
347
+ --info-color: var(--material-color-light-blue-800);
335
348
  --info-fg: var(--white);
336
349
 
337
350
  --surface-bg: var(--bg);
@@ -342,7 +355,12 @@
342
355
  affordances.css. The color-props(menu-item, menu, button, control) chain
343
356
  resolves it to --menu-bg / --bg at the element, keeping per-instance
344
357
  --menu-bg overrides working. */
345
- --focus-color: var(--material-color-blue-a400);
358
+ /* --focus-color intentionally not defaulted here either: both consumers
359
+ (_affordances.scss's outline rule, Tag's close-button outline) already
360
+ fall back to the browser's own focus ring / currentColor when it's
361
+ unset, which is exactly the neutral behavior an un-themed app should
362
+ get. A theme that wants a specific ring sets --focus-color itself
363
+ (see themes/light.css, themes/material.css, themes/purple.css). */
346
364
  --tooltip-border: none;
347
365
  }
348
366
  body {
@@ -351,7 +369,10 @@ body {
351
369
  }
352
370
  a {
353
371
  background-color: var(--link-bg, transparent);
354
- color: var(--link-fg, var(--material-color-blue-a400));
372
+ /* Same reasoning as --surface-link-fg above: derive from the theme's own
373
+ --primary-bg (always defined, even for an app with no theme at all)
374
+ rather than hard-coding a hue here too. */
375
+ color: var(--link-fg, var(--primary-bg));
355
376
  }
356
377
  /* Color definitions */
357
378
  :root {
@@ -701,6 +722,18 @@ a {
701
722
  --code-tab-size: 4;
702
723
  --code-width: min(75em, 100%);
703
724
  --code-height: auto;
725
+ /* Token backgrounds must be explicit: each token's color-props chain ends
726
+ with no fallback, and an unset custom property inherits, so without these
727
+ an ancestor's --bg would paint behind every token. Themes that style
728
+ tokens already set these; this covers themes that don't. */
729
+ --code-comment-bg: transparent;
730
+ --code-string-bg: transparent;
731
+ --code-keyword-bg: transparent;
732
+ --code-attr-name-bg: transparent;
733
+ --code-tag-bg: transparent;
734
+ --code-function-bg: transparent;
735
+ --code-variable-bg: transparent;
736
+ --code-operator-bg: transparent;
704
737
  }
705
738
  :root {
706
739
  --shadow-blur: 4px;
@@ -747,7 +780,10 @@ a {
747
780
  --checkbox-transition: 400ms;
748
781
  --checked-weight: var(--bold);
749
782
  --grab-bar-hover-base-color-percentage: 88%;
750
- --grab-bar-hover-color-mix: var(--hover-color-mix, white);
783
+ --grab-bar-hover-color-mix: var(
784
+ --hover-color-mix,
785
+ var(--grab-bar-fg, var(--sidebar-fg, var(--fg)))
786
+ );
751
787
  --grab-bar-active-base-color-percentage: 80%;
752
788
  --grab-bar-active-color-mix: var(--active-color-mix, black);
753
789
  --grab-bar-shadow-color: color-mix(
@@ -756,14 +792,14 @@ a {
756
792
  transparent
757
793
  );
758
794
  --grab-bar-hover-bg: color-mix(
759
- in oklch,
795
+ in oklab,
760
796
  var(--grab-bar-bg, var(--sidebar-bg, var(--surface-bg, var(--bg))))
761
797
  var(--grab-bar-hover-base-color-percentage, 88%),
762
798
  var(--grab-bar-hover-color-mix, white)
763
799
  calc(100% - var(--grab-bar-hover-base-color-percentage, 88%))
764
800
  );
765
801
  --grab-bar-active-bg: color-mix(
766
- in oklch,
802
+ in oklab,
767
803
  var(--grab-bar-bg, var(--sidebar-bg, var(--surface-bg, var(--bg))))
768
804
  var(--grab-bar-active-base-color-percentage, 80%),
769
805
  var(--grab-bar-active-color-mix, black)
@@ -785,7 +821,9 @@ a {
785
821
  --scrollbar-track-bg: transparent;
786
822
 
787
823
  --hover-base-color-percentage: 90%;
788
- --hover-color-mix: white;
824
+ /* --hover-color-mix is deliberately unset: hovers mix toward each
825
+ element's own text color (see clickable-hover-affordance). Set it to
826
+ force one direction, e.g. black. */
789
827
  --active-base-color-percentage: 90%;
790
828
  --active-color-mix: black;
791
829
  --disabled-base-color-percentage: 50%;
@@ -11,9 +11,9 @@
11
11
  --sidebar-fg: var(--material-color-blue-grey-50);
12
12
  --menu-bg: var(--material-color-blue-grey-900);
13
13
  --menu-fg: var(--material-color-blue-grey-50);
14
- --primary-bg: var(--material-color-light-blue-100);
15
- --primary-color: var(--material-color-light-blue-100);
16
- --primary-fg: var(--material-color-blue-grey-800);
14
+ --primary-bg: var(--material-color-indigo-200);
15
+ --primary-color: var(--material-color-indigo-200);
16
+ --primary-fg: var(--material-color-indigo-900);
17
17
  --secondary-bg: var(--material-color-blue-grey-300);
18
18
  --secondary-color: var(--material-color-blue-grey-300);
19
19
  --secondary-fg: var(--material-color-blue-grey-800);
@@ -1,50 +1,53 @@
1
1
  /* light mode */
2
2
 
3
3
  :root {
4
- --fg: var(--material-color-grey-800);
5
- --bg: #fafafa;
6
- --surface-bg: var(--material-color-grey-100);
7
- --surface-fg: var(--material-color-grey-800);
4
+ --fg: #1b1d2e;
5
+ --bg: #fcfcff;
6
+ --surface-bg: #f4f5fb;
7
+ --surface-fg: #1b1d2e;
8
8
  --container-bg: var(--surface-bg);
9
9
  --container-fg: var(--surface-fg);
10
- --sidebar-bg: var(--material-color-grey-100);
11
- --sidebar-fg: var(--material-color-grey-900);
10
+ --sidebar-bg: #eef0fa;
11
+ --sidebar-fg: #1b1d2e;
12
12
 
13
- --menu-fg: var(--material-color-grey-900);
14
- --menu-bg: var(--material-color-grey-100);
15
- --primary-bg: var(--material-color-blue-500);
16
- --primary-color: var(--material-color-blue-500);
17
- --primary-fg: var(--material-color-grey-100);
18
- --secondary-bg: var(--material-color-grey-400);
19
- --secondary-color: var(--material-color-grey-400);
20
- --secondary-fg: var(--material-color-grey-900);
13
+ --menu-fg: #1b1d2e;
14
+ --menu-bg: #ffffff;
15
+ --primary-bg: var(--material-color-indigo-600);
16
+ --primary-color: var(--material-color-indigo-600);
17
+ --primary-fg: var(--white);
18
+ --secondary-bg: var(--material-color-indigo-50);
19
+ --secondary-color: var(--material-color-indigo-50);
20
+ --secondary-fg: var(--material-color-indigo-900);
21
21
  --stripe-bg: color-mix(in srgb, var(--menu-bg) 94%, var(--menu-fg) 6%);
22
- --hover-color-mix: #444;
23
22
  --active-color-mix: black;
24
23
  --stripe-fg: var(--menu-fg);
25
- --control-bg: var(--material-color-grey-300);
26
- --control-fg: var(--material-color-grey-900);
27
- --tab-bg: var(--material-color-grey-200);
28
- --tab-fg: var(--material-color-grey-800);
24
+ --control-bg: var(--material-color-indigo-50);
25
+ --control-fg: var(--material-color-indigo-900);
26
+ --tab-bg: var(--material-color-indigo-50);
27
+ --tab-fg: var(--material-color-indigo-900);
29
28
  --tab-active-bg: #ffffff;
30
- --tab-active-fg: var(--material-color-blue-700);
31
- --tab-bar-fg: var(--material-color-grey-900);
29
+ --tab-active-fg: var(--material-color-indigo-700);
30
+ --tab-bar-fg: #1b1d2e;
32
31
 
33
32
  /* Semantic colors for light mode */
34
- --warning-bg: var(--material-color-orange-600);
35
- --warning-color: var(--material-color-orange-600);
36
- --warning-fg: var(--white);
37
- --danger-bg: var(--material-color-red-600);
38
- --danger-color: var(--material-color-red-600);
33
+ --warning-bg: var(--material-color-amber-400);
34
+ --warning-color: var(--material-color-amber-400);
35
+ --warning-fg: var(--material-color-grey-900);
36
+ --danger-bg: var(--material-color-red-700);
37
+ --danger-color: var(--material-color-red-700);
39
38
  --danger-fg: var(--white);
40
- --success-bg: var(--material-color-green-600);
41
- --success-color: var(--material-color-green-600);
39
+ --success-bg: var(--material-color-green-800);
40
+ --success-color: var(--material-color-green-800);
42
41
  --success-fg: var(--white);
43
- --info-bg: var(--material-color-light-blue-600);
44
- --info-color: var(--material-color-light-blue-600);
42
+ --info-bg: var(--material-color-light-blue-800);
43
+ --info-color: var(--material-color-light-blue-800);
45
44
  --info-fg: var(--white);
46
45
 
47
- --border-color: var(--material-color-grey-400);
46
+ --border-color: var(--material-color-indigo-300);
47
+ --focus-color: var(--material-color-indigo-a200);
48
+ --tooltip-bg: var(--material-color-indigo-900);
49
+ --tooltip-fg: var(--white);
50
+ --tooltip-arrow-color: var(--tooltip-bg);
48
51
  --input-bg: #fefefe;
49
52
  --input-fg: var(--material-color-grey-900);
50
53
  --slider-track-bg: color-mix(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "contain-css-svelte",
3
- "version": "1.4.1",
3
+ "version": "1.4.3",
4
4
  "license": "MIT",
5
5
  "scripts": {
6
6
  "capture:review": "node scripts/capture-review.mjs",