contain-css-svelte 1.2.3 → 1.3.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 (47) hide show
  1. package/dist/Card.svelte +12 -0
  2. package/dist/controls/Button.svelte +12 -0
  3. package/dist/controls/ButtonLink.svelte +12 -0
  4. package/dist/controls/Checkbox.svelte +12 -0
  5. package/dist/controls/CircleButton.svelte +12 -0
  6. package/dist/controls/Input.svelte +12 -0
  7. package/dist/controls/RadioButton.svelte +12 -0
  8. package/dist/controls/Select.svelte +12 -0
  9. package/dist/controls/Slider.svelte +12 -0
  10. package/dist/controls/TabItem.svelte +12 -0
  11. package/dist/controls/Toggle.svelte +12 -0
  12. package/dist/dropdowns/DropdownMenu.svelte +12 -0
  13. package/dist/index.d.ts +2 -1
  14. package/dist/index.js +2 -1
  15. package/dist/layout/Accordion.svelte +12 -0
  16. package/dist/layout/Bar.svelte +12 -0
  17. package/dist/layout/ColumnContainer.svelte +12 -0
  18. package/dist/layout/Columns.svelte +12 -0
  19. package/dist/layout/Container.svelte +12 -0
  20. package/dist/layout/DataList.svelte +12 -0
  21. package/dist/layout/DataListItem.svelte +12 -0
  22. package/dist/layout/Fieldset.svelte +12 -0
  23. package/dist/layout/Form.svelte +12 -0
  24. package/dist/layout/FormItem.svelte +12 -0
  25. package/dist/layout/GridLayout.svelte +12 -0
  26. package/dist/layout/Hero.svelte +12 -0
  27. package/dist/layout/Inline.svelte +12 -0
  28. package/dist/layout/MenuList.svelte +12 -0
  29. package/dist/layout/Page.svelte +17 -1
  30. package/dist/layout/RowContainer.svelte +12 -0
  31. package/dist/layout/Sidebar.svelte +516 -57
  32. package/dist/layout/Sidebar.svelte.d.ts +24 -1
  33. package/dist/layout/SidebarContainer.svelte +172 -0
  34. package/dist/layout/SidebarContainer.svelte.d.ts +20 -0
  35. package/dist/layout/SplitPane.svelte +12 -0
  36. package/dist/layout/Stack.svelte +12 -0
  37. package/dist/layout/TabBar.svelte +12 -0
  38. package/dist/layout/Table.svelte +233 -151
  39. package/dist/layout/Tile.svelte +12 -0
  40. package/dist/misc/CodeInner.svelte +12 -0
  41. package/dist/misc/Progress.svelte +12 -0
  42. package/dist/misc/Tag.svelte +12 -0
  43. package/dist/overlays/Dialog.svelte +12 -0
  44. package/dist/overlays/Tooltip.svelte +12 -0
  45. package/dist/sass/_responsive.scss +15 -0
  46. package/dist/typography/TextLayout.svelte +12 -0
  47. package/package.json +1 -1
package/dist/Card.svelte CHANGED
@@ -49,6 +49,18 @@ let hasFooter = $derived(Boolean(footer));
49
49
  day this mixin got added to a new component. Callers opt in with an actual
50
50
  value. (Container does not use this mixin: it wants --gap/auto as its
51
51
  defaults, which do not fit the "0 unless asked" contract here.) */
52
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
53
+ affordance -- a floating button that opens a panel over the content.
54
+
55
+ Page has to agree with Sidebar about this, because Page is what floats the
56
+ aside out of flow and reserves the strip of padding the sheet button sits
57
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
58
+ which left a band between 513 and 600 where Page had already lifted the
59
+ aside out of the layout while the Sidebar inside it was still showing a
60
+ rail -- a grab bar floating on top of the content, which is the affordance
61
+ we deliberately avoid everywhere else.
62
+
63
+ One definition, used by both, so they cannot drift again. */
52
64
  /* Warning: because we define a fallback
53
65
  media query, the media query can override the container
54
66
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -44,6 +44,18 @@ const el = $derived(elementProps(restProps, "button", [
44
44
  day this mixin got added to a new component. Callers opt in with an actual
45
45
  value. (Container does not use this mixin: it wants --gap/auto as its
46
46
  defaults, which do not fit the "0 unless asked" contract here.) */
47
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
48
+ affordance -- a floating button that opens a panel over the content.
49
+
50
+ Page has to agree with Sidebar about this, because Page is what floats the
51
+ aside out of flow and reserves the strip of padding the sheet button sits
52
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
53
+ which left a band between 513 and 600 where Page had already lifted the
54
+ aside out of the layout while the Sidebar inside it was still showing a
55
+ rail -- a grab bar floating on top of the content, which is the affordance
56
+ we deliberately avoid everywhere else.
57
+
58
+ One definition, used by both, so they cannot drift again. */
47
59
  /* Warning: because we define a fallback
48
60
  media query, the media query can override the container
49
61
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -46,6 +46,18 @@ const iconSlotted = $derived(Boolean(icon));
46
46
  day this mixin got added to a new component. Callers opt in with an actual
47
47
  value. (Container does not use this mixin: it wants --gap/auto as its
48
48
  defaults, which do not fit the "0 unless asked" contract here.) */
49
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
50
+ affordance -- a floating button that opens a panel over the content.
51
+
52
+ Page has to agree with Sidebar about this, because Page is what floats the
53
+ aside out of flow and reserves the strip of padding the sheet button sits
54
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
55
+ which left a band between 513 and 600 where Page had already lifted the
56
+ aside out of the layout while the Sidebar inside it was still showing a
57
+ rail -- a grab bar floating on top of the content, which is the affordance
58
+ we deliberately avoid everywhere else.
59
+
60
+ One definition, used by both, so they cannot drift again. */
49
61
  /* Warning: because we define a fallback
50
62
  media query, the media query can override the container
51
63
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -72,6 +72,18 @@ let ref = $state(null);
72
72
  day this mixin got added to a new component. Callers opt in with an actual
73
73
  value. (Container does not use this mixin: it wants --gap/auto as its
74
74
  defaults, which do not fit the "0 unless asked" contract here.) */
75
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
76
+ affordance -- a floating button that opens a panel over the content.
77
+
78
+ Page has to agree with Sidebar about this, because Page is what floats the
79
+ aside out of flow and reserves the strip of padding the sheet button sits
80
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
81
+ which left a band between 513 and 600 where Page had already lifted the
82
+ aside out of the layout while the Sidebar inside it was still showing a
83
+ rail -- a grab bar floating on top of the content, which is the affordance
84
+ we deliberately avoid everywhere else.
85
+
86
+ One definition, used by both, so they cannot drift again. */
75
87
  /* Warning: because we define a fallback
76
88
  media query, the media query can override the container
77
89
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -37,6 +37,18 @@ const el = $derived(elementProps(restProps, "circle-button", [
37
37
  day this mixin got added to a new component. Callers opt in with an actual
38
38
  value. (Container does not use this mixin: it wants --gap/auto as its
39
39
  defaults, which do not fit the "0 unless asked" contract here.) */
40
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
41
+ affordance -- a floating button that opens a panel over the content.
42
+
43
+ Page has to agree with Sidebar about this, because Page is what floats the
44
+ aside out of flow and reserves the strip of padding the sheet button sits
45
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
46
+ which left a band between 513 and 600 where Page had already lifted the
47
+ aside out of the layout while the Sidebar inside it was still showing a
48
+ rail -- a grab bar floating on top of the content, which is the affordance
49
+ we deliberately avoid everywhere else.
50
+
51
+ One definition, used by both, so they cannot drift again. */
40
52
  /* Warning: because we define a fallback
41
53
  media query, the media query can override the container
42
54
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -23,6 +23,18 @@ const el = $derived(elementProps(restProps, "input", INPUT_VARS));
23
23
  day this mixin got added to a new component. Callers opt in with an actual
24
24
  value. (Container does not use this mixin: it wants --gap/auto as its
25
25
  defaults, which do not fit the "0 unless asked" contract here.) */
26
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
27
+ affordance -- a floating button that opens a panel over the content.
28
+
29
+ Page has to agree with Sidebar about this, because Page is what floats the
30
+ aside out of flow and reserves the strip of padding the sheet button sits
31
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
32
+ which left a band between 513 and 600 where Page had already lifted the
33
+ aside out of the layout while the Sidebar inside it was still showing a
34
+ rail -- a grab bar floating on top of the content, which is the affordance
35
+ we deliberately avoid everywhere else.
36
+
37
+ One definition, used by both, so they cannot drift again. */
26
38
  /* Warning: because we define a fallback
27
39
  media query, the media query can override the container
28
40
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -50,6 +50,18 @@ function handleChange() {
50
50
  day this mixin got added to a new component. Callers opt in with an actual
51
51
  value. (Container does not use this mixin: it wants --gap/auto as its
52
52
  defaults, which do not fit the "0 unless asked" contract here.) */
53
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
54
+ affordance -- a floating button that opens a panel over the content.
55
+
56
+ Page has to agree with Sidebar about this, because Page is what floats the
57
+ aside out of flow and reserves the strip of padding the sheet button sits
58
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
59
+ which left a band between 513 and 600 where Page had already lifted the
60
+ aside out of the layout while the Sidebar inside it was still showing a
61
+ rail -- a grab bar floating on top of the content, which is the affordance
62
+ we deliberately avoid everywhere else.
63
+
64
+ One definition, used by both, so they cannot drift again. */
53
65
  /* Warning: because we define a fallback
54
66
  media query, the media query can override the container
55
67
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -149,6 +149,18 @@ $effect(() => {
149
149
  day this mixin got added to a new component. Callers opt in with an actual
150
150
  value. (Container does not use this mixin: it wants --gap/auto as its
151
151
  defaults, which do not fit the "0 unless asked" contract here.) */
152
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
153
+ affordance -- a floating button that opens a panel over the content.
154
+
155
+ Page has to agree with Sidebar about this, because Page is what floats the
156
+ aside out of flow and reserves the strip of padding the sheet button sits
157
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
158
+ which left a band between 513 and 600 where Page had already lifted the
159
+ aside out of the layout while the Sidebar inside it was still showing a
160
+ rail -- a grab bar floating on top of the content, which is the affordance
161
+ we deliberately avoid everywhere else.
162
+
163
+ One definition, used by both, so they cannot drift again. */
152
164
  /* Warning: because we define a fallback
153
165
  media query, the media query can override the container
154
166
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -25,6 +25,18 @@ const el = $derived(elementProps(restProps, "slider", ["bg", "fg", "padding", "w
25
25
  day this mixin got added to a new component. Callers opt in with an actual
26
26
  value. (Container does not use this mixin: it wants --gap/auto as its
27
27
  defaults, which do not fit the "0 unless asked" contract here.) */
28
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
29
+ affordance -- a floating button that opens a panel over the content.
30
+
31
+ Page has to agree with Sidebar about this, because Page is what floats the
32
+ aside out of flow and reserves the strip of padding the sheet button sits
33
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
34
+ which left a band between 513 and 600 where Page had already lifted the
35
+ aside out of the layout while the Sidebar inside it was still showing a
36
+ rail -- a grab bar floating on top of the content, which is the affordance
37
+ we deliberately avoid everywhere else.
38
+
39
+ One definition, used by both, so they cannot drift again. */
28
40
  /* Warning: because we define a fallback
29
41
  media query, the media query can override the container
30
42
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -37,6 +37,18 @@ const el = $derived(elementProps(restProps, "tab", [
37
37
  day this mixin got added to a new component. Callers opt in with an actual
38
38
  value. (Container does not use this mixin: it wants --gap/auto as its
39
39
  defaults, which do not fit the "0 unless asked" contract here.) */
40
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
41
+ affordance -- a floating button that opens a panel over the content.
42
+
43
+ Page has to agree with Sidebar about this, because Page is what floats the
44
+ aside out of flow and reserves the strip of padding the sheet button sits
45
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
46
+ which left a band between 513 and 600 where Page had already lifted the
47
+ aside out of the layout while the Sidebar inside it was still showing a
48
+ rail -- a grab bar floating on top of the content, which is the affordance
49
+ we deliberately avoid everywhere else.
50
+
51
+ One definition, used by both, so they cannot drift again. */
40
52
  /* Warning: because we define a fallback
41
53
  media query, the media query can override the container
42
54
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -54,6 +54,18 @@ const effectiveOnLabel = $derived(onLabel || children);
54
54
  day this mixin got added to a new component. Callers opt in with an actual
55
55
  value. (Container does not use this mixin: it wants --gap/auto as its
56
56
  defaults, which do not fit the "0 unless asked" contract here.) */
57
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
58
+ affordance -- a floating button that opens a panel over the content.
59
+
60
+ Page has to agree with Sidebar about this, because Page is what floats the
61
+ aside out of flow and reserves the strip of padding the sheet button sits
62
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
63
+ which left a band between 513 and 600 where Page had already lifted the
64
+ aside out of the layout while the Sidebar inside it was still showing a
65
+ rail -- a grab bar floating on top of the content, which is the affordance
66
+ we deliberately avoid everywhere else.
67
+
68
+ One definition, used by both, so they cannot drift again. */
57
69
  /* Warning: because we define a fallback
58
70
  media query, the media query can override the container
59
71
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -295,6 +295,18 @@ let popoverDiv = $state();
295
295
  day this mixin got added to a new component. Callers opt in with an actual
296
296
  value. (Container does not use this mixin: it wants --gap/auto as its
297
297
  defaults, which do not fit the "0 unless asked" contract here.) */
298
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
299
+ affordance -- a floating button that opens a panel over the content.
300
+
301
+ Page has to agree with Sidebar about this, because Page is what floats the
302
+ aside out of flow and reserves the strip of padding the sheet button sits
303
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
304
+ which left a band between 513 and 600 where Page had already lifted the
305
+ aside out of the layout while the Sidebar inside it was still showing a
306
+ rail -- a grab bar floating on top of the content, which is the affordance
307
+ we deliberately avoid everywhere else.
308
+
309
+ One definition, used by both, so they cannot drift again. */
298
310
  /* Warning: because we define a fallback
299
311
  media query, the media query can override the container
300
312
  if we stack a bunch of these in a row and aren't thoughtful about the order.
package/dist/index.d.ts CHANGED
@@ -39,6 +39,7 @@ import Tile from "./layout/Tile.svelte";
39
39
  import Code from "./misc/Code.svelte";
40
40
  import TextLayout from "./typography/TextLayout.svelte";
41
41
  import Sidebar from "./layout/Sidebar.svelte";
42
+ import SidebarContainer from "./layout/SidebarContainer.svelte";
42
43
  import Dialog from "./overlays/Dialog.svelte";
43
44
  import Progress from "./misc/Progress.svelte";
44
45
  import Tooltip from "./overlays/Tooltip.svelte";
@@ -55,7 +56,7 @@ export { Bar, ColumnContainer, Container, GridLayout, GridRow, Inline, MenuList,
55
56
  export { TextLayout, Code, Accordion };
56
57
  export { Card, Tile, Form, FormItem, FormProvider, Fieldset };
57
58
  export { DataList, DataListItem };
58
- export { Row, Column, Columns, SplitPane, Sidebar };
59
+ export { Row, Column, Columns, SplitPane, Sidebar, SidebarContainer };
59
60
  export { Dialog };
60
61
  export { Progress, Tooltip };
61
62
  export { Table };
package/dist/index.js CHANGED
@@ -40,6 +40,7 @@ import Tile from "./layout/Tile.svelte";
40
40
  import Code from "./misc/Code.svelte";
41
41
  import TextLayout from "./typography/TextLayout.svelte";
42
42
  import Sidebar from "./layout/Sidebar.svelte";
43
+ import SidebarContainer from "./layout/SidebarContainer.svelte";
43
44
  import Dialog from "./overlays/Dialog.svelte";
44
45
  import Progress from "./misc/Progress.svelte";
45
46
  import Tooltip from "./overlays/Tooltip.svelte";
@@ -55,7 +56,7 @@ export { Bar, ColumnContainer, Container, GridLayout, GridRow, Inline, MenuList,
55
56
  export { TextLayout, Code, Accordion };
56
57
  export { Card, Tile, Form, FormItem, FormProvider, Fieldset };
57
58
  export { DataList, DataListItem };
58
- export { Row, Column, Columns, SplitPane, Sidebar };
59
+ export { Row, Column, Columns, SplitPane, Sidebar, SidebarContainer };
59
60
  export { Dialog };
60
61
  export { Progress, Tooltip };
61
62
  export { Table };
@@ -61,6 +61,18 @@ function onAccordionClicked(e) {
61
61
  day this mixin got added to a new component. Callers opt in with an actual
62
62
  value. (Container does not use this mixin: it wants --gap/auto as its
63
63
  defaults, which do not fit the "0 unless asked" contract here.) */
64
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
65
+ affordance -- a floating button that opens a panel over the content.
66
+
67
+ Page has to agree with Sidebar about this, because Page is what floats the
68
+ aside out of flow and reserves the strip of padding the sheet button sits
69
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
70
+ which left a band between 513 and 600 where Page had already lifted the
71
+ aside out of the layout while the Sidebar inside it was still showing a
72
+ rail -- a grab bar floating on top of the content, which is the affordance
73
+ we deliberately avoid everywhere else.
74
+
75
+ One definition, used by both, so they cannot drift again. */
64
76
  /* Warning: because we define a fallback
65
77
  media query, the media query can override the container
66
78
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -56,6 +56,18 @@ const el = $derived(elementProps({ ...restProps, marginTop, marginBottom }, "bar
56
56
  day this mixin got added to a new component. Callers opt in with an actual
57
57
  value. (Container does not use this mixin: it wants --gap/auto as its
58
58
  defaults, which do not fit the "0 unless asked" contract here.) */
59
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
60
+ affordance -- a floating button that opens a panel over the content.
61
+
62
+ Page has to agree with Sidebar about this, because Page is what floats the
63
+ aside out of flow and reserves the strip of padding the sheet button sits
64
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
65
+ which left a band between 513 and 600 where Page had already lifted the
66
+ aside out of the layout while the Sidebar inside it was still showing a
67
+ rail -- a grab bar floating on top of the content, which is the affordance
68
+ we deliberately avoid everywhere else.
69
+
70
+ One definition, used by both, so they cannot drift again. */
59
71
  /* Warning: because we define a fallback
60
72
  media query, the media query can override the container
61
73
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -29,6 +29,18 @@ const el = $derived(elementProps(restProps, "column-container", COLUMN_CONTAINER
29
29
  day this mixin got added to a new component. Callers opt in with an actual
30
30
  value. (Container does not use this mixin: it wants --gap/auto as its
31
31
  defaults, which do not fit the "0 unless asked" contract here.) */
32
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
33
+ affordance -- a floating button that opens a panel over the content.
34
+
35
+ Page has to agree with Sidebar about this, because Page is what floats the
36
+ aside out of flow and reserves the strip of padding the sheet button sits
37
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
38
+ which left a band between 513 and 600 where Page had already lifted the
39
+ aside out of the layout while the Sidebar inside it was still showing a
40
+ rail -- a grab bar floating on top of the content, which is the affordance
41
+ we deliberately avoid everywhere else.
42
+
43
+ One definition, used by both, so they cannot drift again. */
32
44
  /* Warning: because we define a fallback
33
45
  media query, the media query can override the container
34
46
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -15,6 +15,18 @@ const el = $derived(elementProps(restProps, "columns", ["gap"]));
15
15
  day this mixin got added to a new component. Callers opt in with an actual
16
16
  value. (Container does not use this mixin: it wants --gap/auto as its
17
17
  defaults, which do not fit the "0 unless asked" contract here.) */
18
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
19
+ affordance -- a floating button that opens a panel over the content.
20
+
21
+ Page has to agree with Sidebar about this, because Page is what floats the
22
+ aside out of flow and reserves the strip of padding the sheet button sits
23
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
24
+ which left a band between 513 and 600 where Page had already lifted the
25
+ aside out of the layout while the Sidebar inside it was still showing a
26
+ rail -- a grab bar floating on top of the content, which is the affordance
27
+ we deliberately avoid everywhere else.
28
+
29
+ One definition, used by both, so they cannot drift again. */
18
30
  /* Warning: because we define a fallback
19
31
  media query, the media query can override the container
20
32
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -33,6 +33,18 @@ const el = $derived(elementProps(restProps, "container", [
33
33
  day this mixin got added to a new component. Callers opt in with an actual
34
34
  value. (Container does not use this mixin: it wants --gap/auto as its
35
35
  defaults, which do not fit the "0 unless asked" contract here.) */
36
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
37
+ affordance -- a floating button that opens a panel over the content.
38
+
39
+ Page has to agree with Sidebar about this, because Page is what floats the
40
+ aside out of flow and reserves the strip of padding the sheet button sits
41
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
42
+ which left a band between 513 and 600 where Page had already lifted the
43
+ aside out of the layout while the Sidebar inside it was still showing a
44
+ rail -- a grab bar floating on top of the content, which is the affordance
45
+ we deliberately avoid everywhere else.
46
+
47
+ One definition, used by both, so they cannot drift again. */
36
48
  /* Warning: because we define a fallback
37
49
  media query, the media query can override the container
38
50
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -52,6 +52,18 @@ const el = $derived(elementProps(restProps, "data-list", [
52
52
  day this mixin got added to a new component. Callers opt in with an actual
53
53
  value. (Container does not use this mixin: it wants --gap/auto as its
54
54
  defaults, which do not fit the "0 unless asked" contract here.) */
55
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
56
+ affordance -- a floating button that opens a panel over the content.
57
+
58
+ Page has to agree with Sidebar about this, because Page is what floats the
59
+ aside out of flow and reserves the strip of padding the sheet button sits
60
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
61
+ which left a band between 513 and 600 where Page had already lifted the
62
+ aside out of the layout while the Sidebar inside it was still showing a
63
+ rail -- a grab bar floating on top of the content, which is the affordance
64
+ we deliberately avoid everywhere else.
65
+
66
+ One definition, used by both, so they cannot drift again. */
55
67
  /* Warning: because we define a fallback
56
68
  media query, the media query can override the container
57
69
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -130,6 +130,18 @@ function handleKeydown(event) {
130
130
  day this mixin got added to a new component. Callers opt in with an actual
131
131
  value. (Container does not use this mixin: it wants --gap/auto as its
132
132
  defaults, which do not fit the "0 unless asked" contract here.) */
133
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
134
+ affordance -- a floating button that opens a panel over the content.
135
+
136
+ Page has to agree with Sidebar about this, because Page is what floats the
137
+ aside out of flow and reserves the strip of padding the sheet button sits
138
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
139
+ which left a band between 513 and 600 where Page had already lifted the
140
+ aside out of the layout while the Sidebar inside it was still showing a
141
+ rail -- a grab bar floating on top of the content, which is the affordance
142
+ we deliberately avoid everywhere else.
143
+
144
+ One definition, used by both, so they cannot drift again. */
133
145
  /* Warning: because we define a fallback
134
146
  media query, the media query can override the container
135
147
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -62,6 +62,18 @@ const el = $derived(elementProps({
62
62
  day this mixin got added to a new component. Callers opt in with an actual
63
63
  value. (Container does not use this mixin: it wants --gap/auto as its
64
64
  defaults, which do not fit the "0 unless asked" contract here.) */
65
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
66
+ affordance -- a floating button that opens a panel over the content.
67
+
68
+ Page has to agree with Sidebar about this, because Page is what floats the
69
+ aside out of flow and reserves the strip of padding the sheet button sits
70
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
71
+ which left a band between 513 and 600 where Page had already lifted the
72
+ aside out of the layout while the Sidebar inside it was still showing a
73
+ rail -- a grab bar floating on top of the content, which is the affordance
74
+ we deliberately avoid everywhere else.
75
+
76
+ One definition, used by both, so they cannot drift again. */
65
77
  /* Warning: because we define a fallback
66
78
  media query, the media query can override the container
67
79
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -60,6 +60,18 @@ const el = $derived(elementProps({
60
60
  day this mixin got added to a new component. Callers opt in with an actual
61
61
  value. (Container does not use this mixin: it wants --gap/auto as its
62
62
  defaults, which do not fit the "0 unless asked" contract here.) */
63
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
64
+ affordance -- a floating button that opens a panel over the content.
65
+
66
+ Page has to agree with Sidebar about this, because Page is what floats the
67
+ aside out of flow and reserves the strip of padding the sheet button sits
68
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
69
+ which left a band between 513 and 600 where Page had already lifted the
70
+ aside out of the layout while the Sidebar inside it was still showing a
71
+ rail -- a grab bar floating on top of the content, which is the affordance
72
+ we deliberately avoid everywhere else.
73
+
74
+ One definition, used by both, so they cannot drift again. */
63
75
  /* Warning: because we define a fallback
64
76
  media query, the media query can override the container
65
77
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -49,6 +49,18 @@ const effectiveLayout = $derived(above ? "above" : below ? "below" : effectiveLa
49
49
  day this mixin got added to a new component. Callers opt in with an actual
50
50
  value. (Container does not use this mixin: it wants --gap/auto as its
51
51
  defaults, which do not fit the "0 unless asked" contract here.) */
52
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
53
+ affordance -- a floating button that opens a panel over the content.
54
+
55
+ Page has to agree with Sidebar about this, because Page is what floats the
56
+ aside out of flow and reserves the strip of padding the sheet button sits
57
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
58
+ which left a band between 513 and 600 where Page had already lifted the
59
+ aside out of the layout while the Sidebar inside it was still showing a
60
+ rail -- a grab bar floating on top of the content, which is the affordance
61
+ we deliberately avoid everywhere else.
62
+
63
+ One definition, used by both, so they cannot drift again. */
52
64
  /* Warning: because we define a fallback
53
65
  media query, the media query can override the container
54
66
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -30,6 +30,18 @@ const el = $derived(elementProps(restProps, "grid-layout", GRID_LAYOUT_VARS));
30
30
  day this mixin got added to a new component. Callers opt in with an actual
31
31
  value. (Container does not use this mixin: it wants --gap/auto as its
32
32
  defaults, which do not fit the "0 unless asked" contract here.) */
33
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
34
+ affordance -- a floating button that opens a panel over the content.
35
+
36
+ Page has to agree with Sidebar about this, because Page is what floats the
37
+ aside out of flow and reserves the strip of padding the sheet button sits
38
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
39
+ which left a band between 513 and 600 where Page had already lifted the
40
+ aside out of the layout while the Sidebar inside it was still showing a
41
+ rail -- a grab bar floating on top of the content, which is the affordance
42
+ we deliberately avoid everywhere else.
43
+
44
+ One definition, used by both, so they cannot drift again. */
33
45
  /* Warning: because we define a fallback
34
46
  media query, the media query can override the container
35
47
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -34,6 +34,18 @@ const el = $derived(elementProps(restProps, "hero", [
34
34
  day this mixin got added to a new component. Callers opt in with an actual
35
35
  value. (Container does not use this mixin: it wants --gap/auto as its
36
36
  defaults, which do not fit the "0 unless asked" contract here.) */
37
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
38
+ affordance -- a floating button that opens a panel over the content.
39
+
40
+ Page has to agree with Sidebar about this, because Page is what floats the
41
+ aside out of flow and reserves the strip of padding the sheet button sits
42
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
43
+ which left a band between 513 and 600 where Page had already lifted the
44
+ aside out of the layout while the Sidebar inside it was still showing a
45
+ rail -- a grab bar floating on top of the content, which is the affordance
46
+ we deliberately avoid everywhere else.
47
+
48
+ One definition, used by both, so they cannot drift again. */
37
49
  /* Warning: because we define a fallback
38
50
  media query, the media query can override the container
39
51
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -40,6 +40,18 @@ const el = $derived(elementProps({ justify, align, gap, wrap, ...restProps }, "i
40
40
  day this mixin got added to a new component. Callers opt in with an actual
41
41
  value. (Container does not use this mixin: it wants --gap/auto as its
42
42
  defaults, which do not fit the "0 unless asked" contract here.) */
43
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
44
+ affordance -- a floating button that opens a panel over the content.
45
+
46
+ Page has to agree with Sidebar about this, because Page is what floats the
47
+ aside out of flow and reserves the strip of padding the sheet button sits
48
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
49
+ which left a band between 513 and 600 where Page had already lifted the
50
+ aside out of the layout while the Sidebar inside it was still showing a
51
+ rail -- a grab bar floating on top of the content, which is the affordance
52
+ we deliberately avoid everywhere else.
53
+
54
+ One definition, used by both, so they cannot drift again. */
43
55
  /* Warning: because we define a fallback
44
56
  media query, the media query can override the container
45
57
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -34,6 +34,18 @@ const el = $derived(elementProps(restProps, "menu", [
34
34
  day this mixin got added to a new component. Callers opt in with an actual
35
35
  value. (Container does not use this mixin: it wants --gap/auto as its
36
36
  defaults, which do not fit the "0 unless asked" contract here.) */
37
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
38
+ affordance -- a floating button that opens a panel over the content.
39
+
40
+ Page has to agree with Sidebar about this, because Page is what floats the
41
+ aside out of flow and reserves the strip of padding the sheet button sits
42
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
43
+ which left a band between 513 and 600 where Page had already lifted the
44
+ aside out of the layout while the Sidebar inside it was still showing a
45
+ rail -- a grab bar floating on top of the content, which is the affordance
46
+ we deliberately avoid everywhere else.
47
+
48
+ One definition, used by both, so they cannot drift again. */
37
49
  /* Warning: because we define a fallback
38
50
  media query, the media query can override the container
39
51
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -97,6 +97,18 @@ onMount(() => {
97
97
  day this mixin got added to a new component. Callers opt in with an actual
98
98
  value. (Container does not use this mixin: it wants --gap/auto as its
99
99
  defaults, which do not fit the "0 unless asked" contract here.) */
100
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
101
+ affordance -- a floating button that opens a panel over the content.
102
+
103
+ Page has to agree with Sidebar about this, because Page is what floats the
104
+ aside out of flow and reserves the strip of padding the sheet button sits
105
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
106
+ which left a band between 513 and 600 where Page had already lifted the
107
+ aside out of the layout while the Sidebar inside it was still showing a
108
+ rail -- a grab bar floating on top of the content, which is the affordance
109
+ we deliberately avoid everywhere else.
110
+
111
+ One definition, used by both, so they cannot drift again. */
100
112
  /* Warning: because we define a fallback
101
113
  media query, the media query can override the container
102
114
  if we stack a bunch of these in a row and aren't thoughtful about the order.
@@ -415,7 +427,11 @@ footer {
415
427
  overflow: hidden;
416
428
  }
417
429
 
418
- @container (max-width: 600px) {
430
+ /* Must match Sidebar's own compact breakpoint exactly -- everything in
431
+ this block exists to accommodate the sheet affordance, so switching at a
432
+ different width than the Sidebar does leaves a band where Page has
433
+ floated the aside but the Sidebar still shows a rail. */
434
+ @container (max-width: 512px) {
419
435
  .side-by-side {
420
436
  gap: 0;
421
437
  }
@@ -29,6 +29,18 @@ const el = $derived(elementProps(restProps, "row-container", ROW_CONTAINER_VARS)
29
29
  day this mixin got added to a new component. Callers opt in with an actual
30
30
  value. (Container does not use this mixin: it wants --gap/auto as its
31
31
  defaults, which do not fit the "0 unless asked" contract here.) */
32
+ /* The width at or below which a Sidebar swaps its grab-bar rail for the sheet
33
+ affordance -- a floating button that opens a panel over the content.
34
+
35
+ Page has to agree with Sidebar about this, because Page is what floats the
36
+ aside out of flow and reserves the strip of padding the sheet button sits
37
+ in. They used to disagree: Sidebar switched at 512px and Page at 600px,
38
+ which left a band between 513 and 600 where Page had already lifted the
39
+ aside out of the layout while the Sidebar inside it was still showing a
40
+ rail -- a grab bar floating on top of the content, which is the affordance
41
+ we deliberately avoid everywhere else.
42
+
43
+ One definition, used by both, so they cannot drift again. */
32
44
  /* Warning: because we define a fallback
33
45
  media query, the media query can override the container
34
46
  if we stack a bunch of these in a row and aren't thoughtful about the order.