contain-css-svelte 0.0.14 → 0.0.16

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.
@@ -89,6 +89,11 @@ button:disabled {
89
89
  transform: var(--button-disabled-transform, var(--clickable-disabled-transform, var(--disabled-transform, none)));
90
90
  filter: var(--button-disabled-filter, var(--clickable-disabled-filter, var(--disabled-filter, grayscale(0.5))));
91
91
  }
92
+ button:focus-visible {
93
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
94
+ outline-offset: var(--focus-outline-offset, 2px);
95
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
96
+ }
92
97
 
93
98
  button.primary {
94
99
  background: var(--primary-bg, var(--button-bg, var(--control-bg, var(--bg, unset))));
@@ -1,6 +1,4 @@
1
1
  <script>export let checked;
2
- export let value;
3
- export let group;
4
2
  /* Styling properties */
5
3
  import { injectVars } from "../util";
6
4
  export let bg = null;
@@ -15,8 +13,11 @@ let style = injectVars($$props, "checkbox", [
15
13
  "width",
16
14
  "height",
17
15
  ]);
16
+ export let value = undefined;
17
+ // default group to an empty array so code that calls group.indexOf(...) won't throw
18
+ export let group = [];
18
19
  let ref;
19
- let labelContent;
20
+ let labelContent = "";
20
21
  $: {
21
22
  if (ref) {
22
23
  labelContent = ref.innerHTML;
@@ -26,12 +27,23 @@ $: {
26
27
 
27
28
  <div class="label-sizing-box">
28
29
  <label class="checkbox-item">
29
- <input type="checkbox" bind:checked
30
- {...$$restProps} />
30
+ <input
31
+ type="checkbox"
32
+ bind:checked
33
+ bind:group
34
+ {value}
35
+ on:change
36
+ on:click
37
+ on:blur
38
+ on:focus
39
+ on:focusin
40
+ on:focusout
41
+ {...$$restProps}
42
+ />
31
43
  <span bind:this={ref}><slot /></span>
32
44
  </label>
33
45
  <label class="invisible">
34
- <input type="checkbox" checked="true" />
46
+ <input type="checkbox" checked={true} />
35
47
  <span>{@html labelContent}</span>
36
48
  </label>
37
49
  </div>
@@ -97,7 +109,6 @@ label {
97
109
  display: inline-flex;
98
110
  align-items: center;
99
111
  box-sizing: border-box;
100
- user-select: none;
101
112
  gap: var(--checkbox-space, var(--toggle-space, var(--space-md)));
102
113
  cursor: var(--checkbox-cursor, var(--clickable-cursor, var(--cursor, pointer)));
103
114
  transition: filter, transform var(--checkbox-transition, var(--clickable-transition, var(--transition, 300ms)));
@@ -125,7 +136,21 @@ label:has(input:checked) {
125
136
  }
126
137
 
127
138
  input[type=checkbox] {
128
- display: none;
139
+ position: absolute;
140
+ width: 1px;
141
+ height: 1px;
142
+ padding: 0;
143
+ margin: -1px;
144
+ overflow: hidden;
145
+ clip: rect(0 0 0 0);
146
+ clip-path: insert(50%);
147
+ border: 0;
148
+ }
149
+
150
+ label:has(input:focus-visible) {
151
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
152
+ outline-offset: var(--focus-outline-offset, 2px);
153
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
129
154
  }
130
155
 
131
156
  label::before {
@@ -3,15 +3,22 @@ declare const __propDef: {
3
3
  props: {
4
4
  [x: string]: any;
5
5
  checked: boolean;
6
- value: any;
7
- group: string;
8
6
  bg?: string | null | undefined;
9
7
  fg?: string | null | undefined;
10
8
  padding?: string | null | undefined;
11
9
  width?: string | null | undefined;
12
10
  height?: string | null | undefined;
11
+ value?: any;
12
+ group?: any;
13
13
  };
14
14
  events: {
15
+ change: Event;
16
+ click: MouseEvent;
17
+ blur: FocusEvent;
18
+ focus: FocusEvent;
19
+ focusin: FocusEvent;
20
+ focusout: FocusEvent;
21
+ } & {
15
22
  [evt: string]: CustomEvent<any>;
16
23
  };
17
24
  slots: {
@@ -2,8 +2,14 @@
2
2
  export let placeholder = "";
3
3
  </script>
4
4
 
5
- <input {placeholder} bind:value on:input on:change on:blur on:focus
6
- {...$$restProps}
5
+ <input
6
+ {placeholder}
7
+ bind:value
8
+ on:input
9
+ on:change
10
+ on:blur
11
+ on:focus
12
+ {...$$restProps}
7
13
  />
8
14
 
9
15
  <style>/* Warning: because we define a fallback
@@ -41,4 +47,9 @@ input {
41
47
  --link-bg: var(--input-link-bg, var(--ui-link-bg, var(--ui-link-bg, inherit)));
42
48
  --link-fg: var(--input-link-fg, var(--ui-link-fg, var(--ui-link-fg, inherit)));
43
49
  width: var(--input-width);
50
+ }
51
+ input:focus-visible {
52
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
53
+ outline-offset: var(--focus-outline-offset, 2px);
54
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
44
55
  }</style>
@@ -90,6 +90,11 @@ button:disabled {
90
90
  transform: var(--mini-button-disabled-transform, var(--button-disabled-transform, var(--clickable-disabled-transform, var(--disabled-transform, none))));
91
91
  filter: var(--mini-button-disabled-filter, var(--button-disabled-filter, var(--clickable-disabled-filter, var(--disabled-filter, grayscale(0.5)))));
92
92
  }
93
+ button:focus-visible {
94
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
95
+ outline-offset: var(--focus-outline-offset, 2px);
96
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
97
+ }
93
98
 
94
99
  button.primary {
95
100
  background: var(--primary-bg, var(--button-bg, var(--control-bg, var(--bg, unset))));
@@ -25,11 +25,12 @@ $: {
25
25
 
26
26
  <div class="label-sizing-box">
27
27
  <label class="radio-item">
28
- <input {value} type="radio" bind:group
29
- {...$$restProps}/>
28
+ <input {value} type="radio" bind:group {...$$restProps} />
30
29
  <span bind:this={ref}><slot /></span>
31
30
  </label>
32
- <label class="invisible">
31
+ <!-- Hidden label determines how much space we occupy -- that way we can apply e.g. bold font without
32
+ reflowing the UI when checked/unchecked -->
33
+ <label class="invisible radio-item">
33
34
  <input type="radio" checked="true" />
34
35
  <span>{@html labelContent}</span>
35
36
  </label>
@@ -90,7 +91,7 @@ label {
90
91
  position: absolute;
91
92
  }
92
93
 
93
- label {
94
+ label.radio-item {
94
95
  display: inline-flex;
95
96
  align-items: center;
96
97
  box-sizing: border-box;
@@ -100,33 +101,48 @@ label {
100
101
  cursor: var(--radio-button-cursor, var(--clickable-cursor, var(--cursor, pointer)));
101
102
  transition: filter, transform var(--radio-button-transition, var(--clickable-transition, var(--transition, 300ms)));
102
103
  }
103
- label:hover {
104
+ label.radio-item:hover {
104
105
  filter: var(--radio-button-hover-filter, var(--clickable-hover-filter, var(--hover-filter, brightness(1.4))));
105
106
  transform: var(--radio-button-hover-transform, var(--clickable-hover-transform, var(--hover-transform, none)));
106
107
  }
107
- label:active {
108
+ label.radio-item:active {
108
109
  filter: var(--radio-button-active-filter, var(--clickable-active-filter, var(--active-filter, brightness(0.9))));
109
110
  transform: var(--radio-button-active-transform, var(--clickable-active-transform, var(--active-transform, none)));
110
111
  }
111
- label:disabled {
112
+ label.radio-item:disabled {
112
113
  cursor: var(--radio-button-disabled-cursor, var(--clickable-disabled-cursor, var(--disabled-cursor, not-allowed)));
113
114
  transform: var(--radio-button-disabled-transform, var(--clickable-disabled-transform, var(--disabled-transform, none)));
114
115
  filter: var(--radio-button-disabled-filter, var(--clickable-disabled-filter, var(--disabled-filter, grayscale(0.5))));
115
116
  }
116
117
 
117
- label span {
118
+ label.radio-item span {
118
119
  width: var(--label-width);
119
120
  }
120
121
 
121
- label:has(input:checked) {
122
+ label.radio-item:has(input:checked) {
122
123
  font-weight: var(--radio-button-checked-weight, var(--checked-weight, var(--weight, active)));
123
124
  }
124
125
 
125
126
  input[type=radio] {
126
- display: none;
127
+ /* visually hidden but still accessible */
128
+ position: absolute;
129
+ width: 1px;
130
+ height: 1px;
131
+ padding: 0;
132
+ margin: -1px;
133
+ overflow: hidden;
134
+ clip: rect(0 0 0 0);
135
+ clip-path: insert(50%);
136
+ border: 0;
137
+ }
138
+
139
+ label.radio-item:has(input:focus-visible) {
140
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
141
+ outline-offset: var(--focus-outline-offset, 2px);
142
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
127
143
  }
128
144
 
129
- label::before {
145
+ label.radio-item::before {
130
146
  transition: all var(--radio-button-transition, var(--transition, control));
131
147
  display: inline-grid;
132
148
  place-content: center;
@@ -143,7 +159,7 @@ label::before {
143
159
  margin-left: var(--radio-button-padding, var(--padding));
144
160
  }
145
161
 
146
- label:has(input:checked)::before {
162
+ label.radio-item:has(input:checked)::before {
147
163
  background: var(--radio-button-checked-bg, var(--toggle-on-bg, var(--primary-bg, var(--bg, unset))));
148
164
  color: var(--radio-button-checked-fg, var(--toggle-on-fg, var(--primary-fg, var(--fg, unset))));
149
165
  --link-bg: var(--radio-button-checked-link-bg, var(--toggle-on-link-bg, var(--primary-link-bg, var(--primary-link-bg, inherit))));
@@ -17,10 +17,12 @@ onMount(async () => {
17
17
  }
18
18
  });
19
19
  });
20
- observer.observe(selectElement, { childList: true });
20
+ if (selectElement) {
21
+ observer.observe(selectElement, { childList: true });
22
+ }
21
23
  // Observe size changes in option buttons
22
24
  resizeObserver = new ResizeObserver(() => updateTargetWidth());
23
- optionButtons.forEach(button => resizeObserver.observe(button));
25
+ optionButtons.forEach((button) => resizeObserver.observe(button));
24
26
  return () => {
25
27
  observer.disconnect();
26
28
  resizeObserver.disconnect();
@@ -137,6 +139,12 @@ select,
137
139
  font-variant: var(--select-font-variant, var(--input-font-variant, var(--ui-font-variant, var(--font-variant, unset))));
138
140
  text-align: var(--select-text-align, var(--input-text-align, var(--ui-text-align, var(--text-align, unset))));
139
141
  }
142
+ select:focus-visible,
143
+ .dropdown-wrapper > :global(.dropdown-menu > button):focus-visible {
144
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
145
+ outline-offset: var(--focus-outline-offset, 2px);
146
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
147
+ }
140
148
 
141
149
  .select-dropdown-label {
142
150
  overflow: hidden;
@@ -5,42 +5,51 @@
5
5
  export let step = 1;
6
6
  </script>
7
7
 
8
- <input type="range" bind:value {min} {max} {step}
9
- {...$$restProps}/>
8
+ <input type="range" bind:value {min} {max} {step} {...$$restProps} />
10
9
 
11
- <style>
12
- :root {
13
- --slider-button-color: var(--primary-bg);
14
- --slider-button-radius: 50%;
15
- --slider-line-color: var(--fg);
16
- /* Add more variables and styles as needed */
17
- }
10
+ <style>/* Warning: because we define a fallback
11
+ media query, the media query can override the container
12
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
13
+ Put min-width queries *after* max-width queries so that smaller
14
+ container queries don't get their styles overridden by large media queries.
15
+ */
16
+ /* Convenience groupings */
17
+ :root {
18
+ --slider-button-color: var(--primary-bg);
19
+ --slider-button-radius: 50%;
20
+ --slider-line-color: var(--fg);
21
+ /* Add more variables and styles as needed */
22
+ }
18
23
 
19
- input[type="range"] {
20
- /* Apply your custom styles here */
21
- background: transparent;
22
- }
24
+ input[type=range] {
25
+ /* Apply your custom styles here */
26
+ background: transparent;
27
+ }
28
+ input[type=range]:focus-visible {
29
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
30
+ outline-offset: var(--focus-outline-offset, 2px);
31
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
32
+ }
23
33
 
24
- /* Slider Thumb */
25
- input[type="range"]::-webkit-slider-thumb {
26
- -webkit-appearance: none;
27
- background: var(--slider-button-color);
28
- border-radius: 3px;
29
- width: 18px;
30
- /* More styles for the thumb */
31
- }
34
+ /* Slider Thumb */
35
+ input[type=range]::-webkit-slider-thumb {
36
+ -webkit-appearance: none;
37
+ background: var(--slider-button-color);
38
+ border-radius: 3px;
39
+ width: 18px;
40
+ /* More styles for the thumb */
41
+ }
32
42
 
33
- input[type="range"]::-moz-range-thumb {
34
- /* Styles for Firefox */
35
- }
43
+ input[type=range]::-moz-range-thumb {
44
+ /* Styles for Firefox */
45
+ }
36
46
 
37
- /* Slider Track */
38
- input[type="range"]::-webkit-slider-runnable-track {
39
- background: var(--slider-line-color);
40
- /* More styles for the track */
41
- }
47
+ /* Slider Track */
48
+ input[type=range]::-webkit-slider-runnable-track {
49
+ background: var(--slider-line-color);
50
+ /* More styles for the track */
51
+ }
42
52
 
43
- input[type="range"]::-moz-range-track {
44
- /* Styles for Firefox */
45
- }
46
- </style>
53
+ input[type=range]::-moz-range-track {
54
+ /* Styles for Firefox */
55
+ }</style>
@@ -54,6 +54,12 @@ div > :global(div > button) {
54
54
  border-radius: var(--tab-border-radius, var(--border-radius) var(--border-radius) 0 0);
55
55
  margin: 0;
56
56
  }
57
+ div > :global(button):focus-visible,
58
+ div > :global(div > button):focus-visible {
59
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
60
+ outline-offset: var(--focus-outline-offset, 2px);
61
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
62
+ }
57
63
 
58
64
  div.active > :global(button),
59
65
  div.active > :global(div > button) {
@@ -176,6 +176,11 @@ button:disabled {
176
176
  transform: var(--menu-disabled-transform, var(--button-disabled-transform, var(--control-disabled-transform, var(--disabled-transform, none))));
177
177
  filter: var(--menu-disabled-filter, var(--button-disabled-filter, var(--control-disabled-filter, var(--disabled-filter, grayscale(0.5)))));
178
178
  }
179
+ button:focus-visible {
180
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
181
+ outline-offset: var(--focus-outline-offset, 2px);
182
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
183
+ }
179
184
 
180
185
  .menu {
181
186
  background: var(--menu-bg, var(--container-bg, var(--bg, unset)));
@@ -220,6 +225,11 @@ button:disabled {
220
225
  transform: var(--menu-disabled-transform, var(--button-disabled-transform, var(--control-disabled-transform, var(--disabled-transform, none))));
221
226
  filter: var(--menu-disabled-filter, var(--button-disabled-filter, var(--control-disabled-filter, var(--disabled-filter, grayscale(0.5)))));
222
227
  }
228
+ .menu:focus-visible {
229
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
230
+ outline-offset: var(--focus-outline-offset, 2px);
231
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
232
+ }
223
233
 
224
234
  .dropdown-menu {
225
235
  font-family: var(--menu-font-family, var(--container-font-family, var(--font-family, unset)));
package/dist/index.d.ts CHANGED
@@ -25,11 +25,17 @@ import Code from "./misc/Code.svelte";
25
25
  import TextLayout from "./typography/TextLayout.svelte";
26
26
  import Sidebar from "./layout/Sidebar.svelte";
27
27
  import Dialog from "./overlays/Dialog.svelte";
28
+ import Progress from "./misc/Progress.svelte";
29
+ import Tooltip from "./overlays/Tooltip.svelte";
30
+ import Table from "./layout/Table.svelte";
31
+ import Accordion from "./layout/Accordion.svelte";
28
32
  export { Hero };
29
33
  export { TabItem };
30
34
  export { Button, Checkbox, Input, Slider, RadioButton, MiniButton, Select };
31
35
  export { Bar, Container, GridLayout, MenuList, Page, ResponsiveText, TabBar };
32
- export { TextLayout, Code };
36
+ export { TextLayout, Code, Accordion };
33
37
  export { Card, Tile, FormItem };
34
38
  export { Row, Column, Columns, SplitPane, Sidebar };
35
39
  export { Dialog };
40
+ export { Progress, Tooltip };
41
+ export { Table };
package/dist/index.js CHANGED
@@ -26,11 +26,17 @@ import Code from "./misc/Code.svelte";
26
26
  import TextLayout from "./typography/TextLayout.svelte";
27
27
  import Sidebar from "./layout/Sidebar.svelte";
28
28
  import Dialog from "./overlays/Dialog.svelte";
29
+ import Progress from "./misc/Progress.svelte";
30
+ import Tooltip from "./overlays/Tooltip.svelte";
31
+ import Table from "./layout/Table.svelte";
32
+ import Accordion from "./layout/Accordion.svelte";
29
33
  export { Hero };
30
34
  export { TabItem };
31
35
  export { Button, Checkbox, Input, Slider, RadioButton, MiniButton, Select };
32
36
  export { Bar, Container, GridLayout, MenuList, Page, ResponsiveText, TabBar };
33
- export { TextLayout, Code };
37
+ export { TextLayout, Code, Accordion };
34
38
  export { Card, Tile, FormItem };
35
39
  export { Row, Column, Columns, SplitPane, Sidebar };
36
40
  export { Dialog };
41
+ export { Progress, Tooltip };
42
+ export { Table };
@@ -0,0 +1,215 @@
1
+ <script>import { onMount } from "svelte";
2
+ export let highlanderMode = true;
3
+ let wrapper;
4
+ function onAccordionClicked(e) {
5
+ if (!highlanderMode) {
6
+ return;
7
+ }
8
+ const target = e.target;
9
+ // Ensure the click is within the current accordion wrapper
10
+ if (target.closest(".accordion-wrapper") !== wrapper) {
11
+ return;
12
+ }
13
+ // Check if the clicked element is a <summary>
14
+ if (target.tagName === "SUMMARY") {
15
+ const details = target.parentElement;
16
+ // Check if this <details> is nested inside another <details>
17
+ const parentDetails = details.parentElement?.closest("details");
18
+ if (parentDetails &&
19
+ parentDetails.closest(".accordion-wrapper") === wrapper) {
20
+ return;
21
+ }
22
+ // Close all other <details> within the same wrapper
23
+ const allDetails = wrapper.querySelectorAll("details");
24
+ allDetails.forEach((d) => {
25
+ if (d !== details) {
26
+ if (d.closest(".accordion-wrapper") === wrapper) {
27
+ d.open = false;
28
+ }
29
+ }
30
+ });
31
+ }
32
+ }
33
+ </script>
34
+
35
+ <div
36
+ class="accordion-wrapper"
37
+ on:click={onAccordionClicked}
38
+ bind:this={wrapper}
39
+ >
40
+ <slot />
41
+ </div>
42
+
43
+ <style>/* Warning: because we define a fallback
44
+ media query, the media query can override the container
45
+ if we stack a bunch of these in a row and aren't thoughtful about the order.
46
+ Put min-width queries *after* max-width queries so that smaller
47
+ container queries don't get their styles overridden by large media queries.
48
+ */
49
+ /* Convenience groupings */
50
+ div {
51
+ background: var(--accordion-bg, var(--container-bg, var(--bg, unset)));
52
+ color: var(--accordion-fg, var(--container-fg, var(--fg, unset)));
53
+ --link-bg: var(--accordion-link-bg, var(--container-link-bg, var(--container-link-bg, inherit)));
54
+ --link-fg: var(--accordion-link-fg, var(--container-link-fg, var(--container-link-fg, inherit)));
55
+ font-family: var(--accordion-font-family, var(--header-font-family, var(--font-family, unset)));
56
+ text-transform: var(--accordion-text-transform, var(--header-text-transform, var(--text-transform, unset)));
57
+ text-decoration: var(--accordion-text-decoration, var(--header-text-decoration, var(--text-decoration, unset)));
58
+ font-size: var(--accordion-font-size, var(--header-font-size, var(--font-size, unset)));
59
+ font-weight: var(--accordion-font-weight, var(--header-font-weight, var(--font-weight, unset)));
60
+ line-height: var(--accordion-line-height, var(--header-line-height, var(--line-height, unset)));
61
+ letter-spacing: var(--accordion-letter-spacing, var(--header-letter-spacing, var(--letter-spacing, unset)));
62
+ margin-top: var(--accordion-margin, var(--header-margin, var(--margin, unset)));
63
+ margin-top: var(--accordion-margin-top, var(--header-margin-top, var(--margin-top, unset)));
64
+ margin-bottom: var(--accordion-margin, var(--header-margin, var(--margin, unset)));
65
+ margin-bottom: var(--accordion-margin-bottom, var(--header-margin-bottom, var(--margin-bottom, unset)));
66
+ text-indent: var(--accordion-indent, var(--header-indent, var(--indent, unset)));
67
+ font-variant: var(--accordion-font-variant, var(--header-font-variant, var(--font-variant, unset)));
68
+ text-align: var(--accordion-text-align, var(--header-text-align, var(--text-align, unset)));
69
+ box-sizing: border-box;
70
+ border: var(--accordion-wrapper-border, var(--container-border, var(--border, var(--border-width, 1px) var(--border-style, solid) var(--border-color, var(--fg)))));
71
+ /* border-top: fn.var-with-fallbacks(--border-top,
72
+ append($prefixes,
73
+ fn.var-with-fallbacks(--border,$prefixes...)
74
+ )...) */
75
+ /* border-right: fn.var-with-fallbacks(--border-right,
76
+ append($prefixes,
77
+ fn.var-with-fallbacks(--border,$prefixes...)
78
+ )...) */
79
+ /* border-bottom: fn.var-with-fallbacks(--border-bottom,
80
+ append($prefixes,
81
+ fn.var-with-fallbacks(--border,$prefixes...)
82
+ )...) */
83
+ /* border-left: fn.var-with-fallbacks(--border-left,
84
+ append($prefixes,
85
+ fn.var-with-fallbacks(--border,$prefixes...)
86
+ )...) */
87
+ padding: var(--accordion-wrapper-padding, var(--container-padding, var(--padding, 4px)));
88
+ border-radius: var(--accordion-wrapper-square-radius, var(--container-square-radius, var(--square-radius, 0)));
89
+ display: flex;
90
+ flex-direction: column;
91
+ gap: var(--accordion-gap, var(--gap));
92
+ }
93
+
94
+ div :global(details > summary) {
95
+ background: var(--accordion-summary-bg, var(--secondary-bg, var(--bg, unset)));
96
+ color: var(--accordion-summary-fg, var(--secondary-fg, var(--fg, unset)));
97
+ --link-bg: var(--accordion-summary-link-bg, var(--secondary-link-bg, var(--secondary-link-bg, inherit)));
98
+ --link-fg: var(--accordion-summary-link-fg, var(--secondary-link-fg, var(--secondary-link-fg, inherit)));
99
+ box-sizing: border-box;
100
+ border: var(--accordion-summary-border, var(--container-border, var(--border, var(--border-width, 1px) var(--border-style, solid) var(--border-color, var(--fg)))));
101
+ /* border-top: fn.var-with-fallbacks(--border-top,
102
+ append($prefixes,
103
+ fn.var-with-fallbacks(--border,$prefixes...)
104
+ )...) */
105
+ /* border-right: fn.var-with-fallbacks(--border-right,
106
+ append($prefixes,
107
+ fn.var-with-fallbacks(--border,$prefixes...)
108
+ )...) */
109
+ /* border-bottom: fn.var-with-fallbacks(--border-bottom,
110
+ append($prefixes,
111
+ fn.var-with-fallbacks(--border,$prefixes...)
112
+ )...) */
113
+ /* border-left: fn.var-with-fallbacks(--border-left,
114
+ append($prefixes,
115
+ fn.var-with-fallbacks(--border,$prefixes...)
116
+ )...) */
117
+ padding: var(--accordion-summary-padding, var(--container-padding, var(--padding, 4px)));
118
+ border-radius: var(--accordion-summary-square-radius, var(--container-square-radius, var(--square-radius, 0)));
119
+ cursor: var(--accordion-cursor, var(--cursor, pointer));
120
+ transition: filter, transform var(--accordion-transition, var(--transition, 300ms));
121
+ cursor: pointer;
122
+ font-family: var(--accordion-summary-font-family, var(--accordion-summary-font-family, inherit));
123
+ text-transform: var(--accordion-summary-text-transform, var(--accordion-summary-text-transform, inherit));
124
+ text-decoration: var(--accordion-summary-text-decoration, var(--accordion-summary-text-decoration, inherit));
125
+ font-size: var(--accordion-summary-font-size, var(--accordion-summary-font-size, inherit));
126
+ font-weight: var(--accordion-summary-font-weight, var(--accordion-summary-font-weight, inherit));
127
+ line-height: var(--accordion-summary-line-height, var(--accordion-summary-line-height, inherit));
128
+ letter-spacing: var(--accordion-summary-letter-spacing, var(--accordion-summary-letter-spacing, inherit));
129
+ text-indent: var(--accordion-summary-indent, var(--accordion-summary-indent, inherit));
130
+ font-variant: var(--accordion-summary-font-variant, var(--accordion-summary-font-variant, inherit));
131
+ text-align: var(--accordion-summary-text-align, var(--accordion-summary-text-align, inherit));
132
+ }
133
+ div :global(details > summary):hover {
134
+ filter: var(--accordion-hover-filter, var(--hover-filter, brightness(1.4)));
135
+ transform: var(--accordion-hover-transform, var(--hover-transform, none));
136
+ }
137
+ div :global(details > summary):active {
138
+ filter: var(--accordion-active-filter, var(--active-filter, brightness(0.9)));
139
+ transform: var(--accordion-active-transform, var(--active-transform, none));
140
+ }
141
+ div :global(details > summary):disabled {
142
+ cursor: var(--accordion-disabled-cursor, var(--disabled-cursor, not-allowed));
143
+ transform: var(--accordion-disabled-transform, var(--disabled-transform, none));
144
+ filter: var(--accordion-disabled-filter, var(--disabled-filter, grayscale(0.5)));
145
+ }
146
+ div :global(details > summary):focus-visible {
147
+ outline: var(--focus-color, -webkit-focus-ring-color) auto 1px;
148
+ outline-offset: var(--focus-outline-offset, 2px);
149
+ box-shadow: var(--focus-ring-box-shadow, 0 0 0 3px var(--focus-shadow-color, rgba(100, 150, 250, 0.5)));
150
+ }
151
+
152
+ div :global(details[open] > summary) {
153
+ background: var(--accordion-summary-open-bg, var(--primary-bg, var(--bg, unset)));
154
+ color: var(--accordion-summary-open-fg, var(--primary-fg, var(--fg, unset)));
155
+ --link-bg: var(--accordion-summary-open-link-bg, var(--primary-link-bg, var(--primary-link-bg, inherit)));
156
+ --link-fg: var(--accordion-summary-open-link-fg, var(--primary-link-fg, var(--primary-link-fg, inherit)));
157
+ font-family: var(--accordion-summary-open-font-family, var(--accordion-summary-font-family, var(--accordion-summary-font-family, inherit)));
158
+ text-transform: var(--accordion-summary-open-text-transform, var(--accordion-summary-text-transform, var(--accordion-summary-text-transform, inherit)));
159
+ text-decoration: var(--accordion-summary-open-text-decoration, var(--accordion-summary-text-decoration, var(--accordion-summary-text-decoration, inherit)));
160
+ font-size: var(--accordion-summary-open-font-size, var(--accordion-summary-font-size, var(--accordion-summary-font-size, inherit)));
161
+ font-weight: var(--accordion-summary-open-font-weight, var(--accordion-summary-font-weight, var(--accordion-summary-font-weight, inherit)));
162
+ line-height: var(--accordion-summary-open-line-height, var(--accordion-summary-line-height, var(--accordion-summary-line-height, inherit)));
163
+ letter-spacing: var(--accordion-summary-open-letter-spacing, var(--accordion-summary-letter-spacing, var(--accordion-summary-letter-spacing, inherit)));
164
+ text-indent: var(--accordion-summary-open-indent, var(--accordion-summary-indent, var(--accordion-summary-indent, inherit)));
165
+ font-variant: var(--accordion-summary-open-font-variant, var(--accordion-summary-font-variant, var(--accordion-summary-font-variant, inherit)));
166
+ text-align: var(--accordion-summary-open-text-align, var(--accordion-summary-text-align, var(--accordion-summary-text-align, inherit)));
167
+ }
168
+
169
+ div :global(details) {
170
+ interpolate-size: allow-keywords;
171
+ }
172
+
173
+ div :global(details::details-content) {
174
+ opacity: 0;
175
+ block-size: 0;
176
+ box-sizing: border-box;
177
+ overflow-y: clip;
178
+ transition: var(--details-transition, content-visibility 300ms allow-discrete, opacity 300ms, block-size 300ms);
179
+ }
180
+
181
+ div :global(details[open]::details-content) {
182
+ opacity: 1;
183
+ block-size: auto;
184
+ }
185
+
186
+ div :global(details::placeholder) {
187
+ display: none;
188
+ }
189
+
190
+ div :global(summary) {
191
+ list-style: var(--details-list-style, none);
192
+ background: var(--accordion-summary-bg, var(--secondary-bg, var(--bg, unset)));
193
+ color: var(--accordion-summary-fg, var(--secondary-fg, var(--fg, unset)));
194
+ --link-bg: var(--accordion-summary-link-bg, var(--secondary-link-bg, var(--secondary-link-bg, inherit)));
195
+ --link-fg: var(--accordion-summary-link-fg, var(--secondary-link-fg, var(--secondary-link-fg, inherit)));
196
+ box-sizing: border-box;
197
+ border: var(--accordion-summary-border, var(--container-border, var(--border, inherit)));
198
+ border-top: var(--accordion-summary-border-top, var(--container-border-top, var(--border-top, var(--accordion-summary-border, var(--container-border, var(--border, none))))));
199
+ border-right: var(--accordion-summary-border-right, var(--container-border-right, var(--border-right, var(--accordion-summary-border, var(--container-border, var(--border, none))))));
200
+ border-bottom: var(--accordion-summary-border-bottom, var(--container-border-bottom, var(--border-bottom, var(--accordion-summary-border, var(--container-border, var(--border, none))))));
201
+ border-left: var(--accordion-summary-border-left, var(--container-border-left, var(--border-left, var(--accordion-summary-border, var(--container-border, var(--border, none))))));
202
+ padding: var(--accordion-summary-padding, var(--container-padding, var(--padding, 4px)));
203
+ border-radius: var(--accordion-summary-square-radius, var(--container-square-radius, var(--square-radius, 0)));
204
+ }
205
+
206
+ div :global(summary::after) {
207
+ content: var(--accordion-icon, "+");
208
+ float: right;
209
+ transition: transform 0.3s;
210
+ }
211
+
212
+ div :global(details[open] > summary::after) {
213
+ transform: var(--accordion-icon-transform, rotateZ(45deg));
214
+ content: var(--accordion-open-icon, var(--accordion-icon, "+"));
215
+ }</style>