lapikit 0.7.2 → 0.7.4

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 (73) hide show
  1. package/dist/@types/components.d.ts +1 -7
  2. package/dist/@types/dom.d.ts +4 -3
  3. package/dist/@types/props.d.ts +3 -3
  4. package/dist/animations/ripple.js +33 -17
  5. package/dist/components/accordion/accordion.svelte +192 -228
  6. package/dist/components/accordion/accordion.types.d.ts +5 -7
  7. package/dist/components/accordion/modules/accordion-item.svelte +144 -140
  8. package/dist/components/alert/alert.svelte +246 -293
  9. package/dist/components/alert/alert.types.d.ts +5 -5
  10. package/dist/components/app/app.svelte +29 -44
  11. package/dist/components/appbar/appbar.svelte +205 -190
  12. package/dist/components/appbar/appbar.types.d.ts +6 -6
  13. package/dist/components/aspect-ratio/aspect-ratio.svelte +43 -63
  14. package/dist/components/avatar/avatar.svelte +169 -161
  15. package/dist/components/avatar/avatar.types.d.ts +3 -4
  16. package/dist/components/btn/btn.svelte +431 -465
  17. package/dist/components/btn/btn.types.d.ts +5 -6
  18. package/dist/components/card/card.svelte +214 -176
  19. package/dist/components/card/card.types.d.ts +6 -3
  20. package/dist/components/card/modules/card-actions.svelte +11 -35
  21. package/dist/components/card/modules/card-container.svelte +9 -33
  22. package/dist/components/card/modules/card-content.svelte +18 -44
  23. package/dist/components/card/modules/card-media.svelte +10 -34
  24. package/dist/components/card/modules/card-title.svelte +22 -48
  25. package/dist/components/chip/chip.svelte +416 -464
  26. package/dist/components/chip/chip.types.d.ts +5 -5
  27. package/dist/components/dialog/dialog.svelte +174 -171
  28. package/dist/components/dialog/dialog.types.d.ts +6 -6
  29. package/dist/components/dropdown/dropdown.svelte +149 -144
  30. package/dist/components/dropdown/dropdown.types.d.ts +4 -11
  31. package/dist/components/field/field.svelte +474 -0
  32. package/dist/components/field/field.svelte.d.ts +4 -0
  33. package/dist/components/field/field.types.d.ts +46 -0
  34. package/dist/components/field/field.types.js +1 -0
  35. package/dist/components/icon/icon.svelte +67 -96
  36. package/dist/components/icon/icon.types.d.ts +2 -1
  37. package/dist/components/index.d.ts +2 -0
  38. package/dist/components/index.js +1 -0
  39. package/dist/components/list/list.svelte +193 -194
  40. package/dist/components/list/list.types.d.ts +5 -7
  41. package/dist/components/list/modules/list-item.svelte +134 -147
  42. package/dist/components/modal/modal.svelte +239 -222
  43. package/dist/components/modal/modal.types.d.ts +6 -6
  44. package/dist/components/popover/popover.svelte +125 -127
  45. package/dist/components/popover/popover.types.d.ts +4 -11
  46. package/dist/components/separator/separator.svelte +56 -87
  47. package/dist/components/separator/separator.types.d.ts +1 -1
  48. package/dist/components/spacer/spacer.svelte +6 -25
  49. package/dist/components/textfield/textfield.svelte +94 -543
  50. package/dist/components/textfield/textfield.types.d.ts +13 -33
  51. package/dist/components/toolbar/toolbar.svelte +216 -211
  52. package/dist/components/toolbar/toolbar.types.d.ts +8 -9
  53. package/dist/components/tooltip/tooltip.svelte +201 -266
  54. package/dist/components/tooltip/tooltip.types.d.ts +3 -10
  55. package/dist/constants.js +1 -0
  56. package/dist/html-mapped.d.ts +1 -15
  57. package/dist/html-mapped.js +0 -19
  58. package/dist/labs/sheet/sheet.svelte +145 -19
  59. package/dist/labs/sheet/sheet.svelte.d.ts +2 -10
  60. package/dist/labs/sheet/sheet.types.d.ts +16 -0
  61. package/dist/labs/sheet/sheet.types.js +1 -0
  62. package/dist/utils/color.d.ts +2 -2
  63. package/dist/utils/color.js +2 -1
  64. package/dist/utils/components.d.ts +10 -10
  65. package/dist/utils/components.js +16 -75
  66. package/dist/utils/floating.d.ts +58 -0
  67. package/dist/utils/floating.js +131 -0
  68. package/dist/utils/index.d.ts +1 -0
  69. package/dist/utils/index.js +1 -0
  70. package/package.json +3 -3
  71. package/dist/components/dropdown/dropdown.svelte.js +0 -148
  72. package/dist/components/popover/popover.svelte.js +0 -134
  73. package/dist/components/tooltip/tooltip.svelte.js +0 -131
@@ -1,12 +1,6 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { ClassNameType, IdElementType, KitClassNameType, KitStylePropertiesType, PropValue, SClassProp, SStyleProp, StylePropertiesType } from './';
2
+ import type { ClassNameType, IdElementType, KitClassNameType, KitStylePropertiesType, PropValue, SStyleProp, StylePropertiesType } from './';
3
3
  import type { ClassValue } from 'svelte/elements';
4
- export interface useClassNameProps {
5
- baseClass?: string;
6
- className?: string;
7
- sClass?: SClassProp;
8
- classProps?: Record<string, PropValue>;
9
- }
10
4
  export interface useStylesProps {
11
5
  styleAttr?: string;
12
6
  sStyle?: SStyleProp;
@@ -1,7 +1,8 @@
1
+ import type { ClassValue } from 'svelte/elements';
1
2
  export type IdElementType = string | undefined;
2
- export type ClassNameType = string | string[] | undefined;
3
+ export type ClassNameType = ClassValue | undefined;
3
4
  export type StylePropertiesType = string | undefined;
4
- export type KitClassNameType = string | string[] | undefined;
5
+ export type KitClassNameType = ClassValue | undefined;
5
6
  export type KitStylePropertiesType = Record<string, boolean | string> | undefined;
6
- export type SClassProp = string | string[] | Record<string, boolean | string> | undefined;
7
+ export type SClassProp = ClassValue | Record<string, boolean | string> | undefined;
7
8
  export type SStyleProp = Record<string, boolean | string> | undefined;
@@ -10,7 +10,7 @@ export interface ElevationState {
10
10
  }
11
11
  export type ElevationProps = ElevationType | ElevationState;
12
12
  export interface ColorState {
13
- base?: string;
14
- active?: string;
13
+ base?: string | false;
14
+ active?: string | false;
15
15
  }
16
- export type ColorProps = string | ColorState;
16
+ export type ColorProps = string | false | ColorState;
@@ -1,14 +1,14 @@
1
- const triggerEvents = ['pointerdown', 'touchstart', 'keydown'];
2
- const cancelEvents = ['mouseleave', 'dragleave', 'touchmove', 'touchcancel', 'pointerup', 'keyup'];
1
+ const triggerEvents = ['pointerdown', 'keydown'];
2
+ const cancelEvents = ['pointerleave', 'pointercancel', 'dragleave', 'pointerup', 'keyup', 'blur'];
3
+ const activationKeys = ['Enter', ' '];
4
+ const nestedControls = 'a[href], button, input, select, textarea, summary, [role="button"], [role="link"]';
5
+ const hosts = new WeakMap();
6
+ function isHostControl(node) {
7
+ return node instanceof Element && node.hasAttribute('data-ripple-host');
8
+ }
3
9
  function resolveDuration(options) {
4
10
  return options.duration && options.duration > 0 ? options.duration : undefined;
5
11
  }
6
- function getCoords(e) {
7
- if (window.TouchEvent && e instanceof TouchEvent) {
8
- return { x: e.touches[0].clientX, y: e.touches[0].clientY };
9
- }
10
- return { x: e.clientX, y: e.clientY };
11
- }
12
12
  export function ripple(el, options = {}) {
13
13
  // created on first interaction, removed once every ripple has faded out
14
14
  let rippleContainer;
@@ -16,6 +16,18 @@ export function ripple(el, options = {}) {
16
16
  function isAriaDisabled() {
17
17
  return el.getAttribute('aria-disabled') === 'true';
18
18
  }
19
+ /** The click starts in a child that handles it itself: an enabled ripple (a btn in a card) or a native control */
20
+ function isFromNestedControl(target) {
21
+ let node = target instanceof Element ? target : null;
22
+ while (node && node !== el) {
23
+ if (hosts.get(node)?.())
24
+ return true;
25
+ if (node.matches(nestedControls) && !isHostControl(node))
26
+ return true;
27
+ node = node.parentElement;
28
+ }
29
+ return false;
30
+ }
19
31
  function applyOptions(container) {
20
32
  if (options.component) {
21
33
  container.style.setProperty('--system-ripple-radius', `var(--kit-${options.component}-radius)`);
@@ -55,22 +67,24 @@ export function ripple(el, options = {}) {
55
67
  applyOptions(rippleContainer);
56
68
  }
57
69
  }
58
- function createRipple(e, center) {
70
+ function createRipple(e) {
59
71
  if (options.disabled || isAriaDisabled()) {
60
72
  return;
61
73
  }
62
- if (e instanceof KeyboardEvent) {
63
- if (!['Enter', 'Space'].includes(e.code) || e.repeat) {
74
+ const isKeyboard = e instanceof KeyboardEvent;
75
+ if (isKeyboard) {
76
+ const isOwnTarget = e.target === el || isHostControl(e.target);
77
+ if (!activationKeys.includes(e.key) || e.repeat || !isOwnTarget) {
64
78
  return;
65
79
  }
66
- e.preventDefault();
67
- const click = new PointerEvent('pointerdown');
68
- createRipple(click, true);
80
+ }
81
+ else if (e.button !== 0 || isFromNestedControl(e.target)) {
69
82
  return;
70
83
  }
71
- const container = mountContainer(center);
84
+ const container = mountContainer(isKeyboard);
72
85
  const rect = el.getBoundingClientRect();
73
- const { x: clientX, y: clientY } = getCoords(e);
86
+ const clientX = isKeyboard ? rect.left + rect.width / 2 : e.clientX;
87
+ const clientY = isKeyboard ? rect.top + rect.height / 2 : e.clientY;
74
88
  const x = clientX - rect.left > el.offsetWidth / 2 ? 0 : el.offsetWidth;
75
89
  const y = clientY - rect.top > el.offsetHeight / 2 ? 0 : el.offsetHeight;
76
90
  const radius = Math.hypot(x - (clientX - rect.left), y - (clientY - rect.top));
@@ -105,9 +119,11 @@ export function ripple(el, options = {}) {
105
119
  activeRipples.add(cleanup);
106
120
  cancelEvents.forEach((event) => el.addEventListener(event, removeRipple, { passive: true }));
107
121
  }
108
- triggerEvents.forEach((event) => el.addEventListener(event, createRipple, { passive: event === 'touchstart' }));
122
+ hosts.set(el, () => !options.disabled && !isAriaDisabled());
123
+ triggerEvents.forEach((event) => el.addEventListener(event, createRipple, { passive: true }));
109
124
  return {
110
125
  destroy() {
126
+ hosts.delete(el);
111
127
  triggerEvents.forEach((event) => {
112
128
  el.removeEventListener(event, createRipple);
113
129
  });
@@ -1,14 +1,13 @@
1
1
  <script lang="ts">
2
- import { useClassName, useStyles } from '../../utils';
3
- import { makeComponentProps } from '../../html-mapped';
2
+ import { useComponentAttrs } from '../../utils';
4
3
  import type { AccordionProps } from './accordion.types.js';
5
4
 
6
5
  let {
7
6
  ref = $bindable(),
8
7
  is = 'div',
9
8
  children,
10
- class: className = '',
11
- style: styleAttr = '',
9
+ class: className,
10
+ style: styleAttr,
12
11
  's-class': sClass,
13
12
  's-style': sStyle,
14
13
  size = 'md',
@@ -17,49 +16,21 @@
17
16
  rounded = 'md',
18
17
  text,
19
18
  color,
20
- background,
21
19
  spacer,
22
20
  hideIcon,
23
21
  ...rest
24
22
  }: AccordionProps = $props();
25
23
 
26
- let { classProps, styleProps, restProps } = $derived(
27
- makeComponentProps(rest as Record<string, unknown>)
28
- );
29
-
30
- let componentClass = $derived(
31
- useClassName({
32
- baseClass: 'kit-accordion',
33
- className: `${className ?? ''}`.trim(),
34
- sClass,
35
- classProps
36
- })
37
- );
38
-
39
- let componentStyle = $derived(
40
- useStyles({
41
- styleAttr,
42
- sStyle,
43
- styleProps
44
- })
45
- );
46
-
47
- let resolvedStyle = $derived(
48
- [
49
- componentStyle,
50
- color ? `--kit-accordion-item-fg:${color && `var(--kit-color-${color})`}` : '',
51
- background ? `--kit-accordion-item-bg:${background && `var(--kit-color-${background})`}` : ''
52
- ]
53
- .filter(Boolean)
54
- .join('; ')
24
+ let attrs = $derived(
25
+ useComponentAttrs('kit-accordion', { className, sClass, styleAttr, sStyle, color }, rest)
55
26
  );
56
27
  </script>
57
28
 
58
29
  <svelte:element
59
30
  this={is}
60
31
  bind:this={ref}
61
- class={componentClass}
62
- style={resolvedStyle}
32
+ class={attrs.class}
33
+ style={attrs.style}
63
34
  data-text={text ? true : undefined}
64
35
  data-spacer={spacer}
65
36
  data-hide-icon={hideIcon}
@@ -67,199 +38,192 @@
67
38
  data-variant={variant}
68
39
  data-density={density}
69
40
  data-rounded={rounded}
70
- {...restProps}
41
+ {...attrs.rest}
71
42
  >
72
43
  {@render children?.()}
73
44
  </svelte:element>
74
45
 
75
- <style>
76
- .kit-accordion {
77
- display: flex;
78
- flex-wrap: wrap;
79
- justify-content: center;
80
- width: 100%;
81
- padding: 0;
82
- list-style: none;
83
- position: relative;
84
- gap: var(--kit-accordion-gap, 0);
85
- border: 0;
86
- box-sizing: border-box;
87
- transition:
88
- background 140ms ease,
89
- color 140ms ease,
90
- box-shadow 140ms ease,
91
- translate 140ms ease;
92
- }
93
-
94
- .kit-accordion[data-spacer='true'] {
95
- --kit-accordion-gap: 0.5rem;
96
- }
97
-
98
- .kit-accordion[data-spacer='true'] :global(.kit-accordion-item) {
99
- border-radius: var(--kit-accordion-item-radius);
100
- }
101
-
102
- .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item:first-child) {
103
- border-top-left-radius: var(--kit-accordion-item-radius);
104
- border-top-right-radius: var(--kit-accordion-item-radius);
105
- border-bottom-left-radius: 0;
106
- border-bottom-right-radius: 0;
107
- }
108
-
109
- .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item) {
110
- border-radius: 0;
111
- }
112
-
113
- .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item:last-child) {
114
- border-top-left-radius: 0;
115
- border-top-right-radius: 0;
116
- border-bottom-left-radius: var(--kit-accordion-item-radius);
117
- border-bottom-right-radius: var(--kit-accordion-item-radius);
118
- }
119
-
120
- .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item:first-child:last-child) {
121
- border-radius: var(--kit-accordion-item-radius);
122
- }
123
-
124
- .kit-accordion[data-hide-icon='true'] :global(.kit-accordion-item__indicator) {
125
- display: none;
126
- }
127
-
128
- .kit-accordion[data-variant='text'] :global(.kit-accordion-item),
129
- .kit-accordion[data-variant='text'] :global(.kit-accordion-item:first-child:last-child) {
130
- border-radius: 0 !important;
131
- }
132
-
133
- .kit-accordion:not([data-variant='text'])
134
- :global(.kit-accordion-item[data-read-only='false'][data-disabled='false'] > button:hover) {
135
- background: var(--kit-accordion-item-hover-bg);
136
- }
137
-
138
- /**
139
- * rounded
140
- * @link ...
141
- */
142
- .kit-accordion[data-rounded='0'] :global(.kit-accordion-item) {
143
- --kit-accordion-item-radius: var(--kit-shape-none);
144
- }
145
- .kit-accordion[data-rounded='xs'] :global(.kit-accordion-item) {
146
- --kit-accordion-item-radius: var(--kit-shape-xs);
147
- }
148
- .kit-accordion[data-rounded='sm'] :global(.kit-accordion-item) {
149
- --kit-accordion-item-radius: var(--kit-shape-sm);
150
- }
151
- .kit-accordion[data-rounded='md'] :global(.kit-accordion-item) {
152
- --kit-accordion-item-radius: var(--kit-shape-md);
153
- }
154
- .kit-accordion[data-rounded='lg'] :global(.kit-accordion-item) {
155
- --kit-accordion-item-radius: var(--kit-shape-lg);
156
- }
157
- .kit-accordion[data-rounded='xl'] :global(.kit-accordion-item) {
158
- --kit-accordion-item-radius: var(--kit-shape-xl);
159
- }
160
- .kit-accordion[data-rounded='full'] :global(.kit-accordion-item) {
161
- --kit-accordion-item-radius: var(--kit-shape-full);
162
- }
163
-
164
- /**
165
- * density
166
- * @link no links
167
- */
168
- .kit-accordion[data-density='compact'] {
169
- --kit-accordion-density-offset: var(--kit-density-compact);
170
- }
171
- .kit-accordion[data-density='default'] {
172
- --kit-accordion-density-offset: var(--kit-density-default);
173
- }
174
- .kit-accordion[data-density='comfortable'] {
175
- --kit-accordion-density-offset: var(--kit-density-comfortable);
176
- }
177
-
178
- /**
179
- * variant
180
- * @link no links...
181
- */
182
- .kit-accordion[data-variant='filled'] :global(.kit-accordion-item) {
183
- --kit-accordion-item-bg: var(--kit-color-surface-1);
184
- --kit-accordion-item-fg: var(--kit-color-text);
185
-
186
- --kit-accordion-item-hover-bg: color-mix(in oklab, var(--kit-accordion-item-bg), black 10%);
187
- --kit-accordion-item-active-bg: color-mix(in oklab, var(--kit-accordion-item-bg), black 16%);
188
- }
189
- .kit-accordion[data-variant='outline'] :global(.kit-accordion-item) {
190
- --kit-accordion-item-bg: transparent;
191
- --kit-accordion-item-fg: var(--kit-color-text);
192
- --kit-accordion-item-bd: var(--kit-accordion-item-fg);
193
-
194
- --kit-accordion-item-hover-bg: color-mix(
195
- in oklab,
196
- var(--kit-accordion-item-fg),
197
- transparent 80%
198
- );
199
- --kit-accordion-item-active-bg: color-mix(
200
- in oklab,
201
- var(--kit-accordion-item-fg),
202
- transparent 92%
203
- );
204
- }
205
- .kit-accordion[data-variant='text'] :global(.kit-accordion-item) {
206
- --kit-accordion-item-bg: transparent;
207
- --kit-accordion-item-fg: var(--kit-color-text);
208
-
209
- --kit-accordion-item-hover-bg: color-mix(
210
- in oklab,
211
- var(--kit-accordion-item-fg),
212
- transparent 80%
213
- );
214
- --kit-accordion-item-active-bg: color-mix(
215
- in oklab,
216
- var(--kit-accordion-item-fg),
217
- transparent 92%
218
- );
219
- }
220
-
221
- .kit-accordion[data-variant='text'] :global(.kit-accordion-item .outline),
222
- .kit-accordion[data-variant='filled'] :global(.kit-accordion-item .outline) {
223
- display: none;
224
- }
225
-
226
- .kit-accordion[data-variant='filled']
227
- :global(.kit-accordion-item .kit-accordion-item__separator) {
228
- display: none;
229
- }
230
-
231
- /**
232
- * size
233
- * @link nothing...
234
- */
235
- .kit-accordion[data-size='xs'] :global(.kit-accordion-item) {
236
- --kit-accordion-item-h: 32px;
237
- --kit-accordion-item-p: 8px;
238
- --kit-accordion-item-gap: var(--kit-space-compact);
239
- --kit-accordion-item-font: var(--kit-font-xs);
240
- }
241
- .kit-accordion[data-size='sm'] :global(.kit-accordion-item) {
242
- --kit-accordion-item-h: 40px;
243
- --kit-accordion-item-p: 10px;
244
- --kit-accordion-item-gap: var(--kit-space-default);
245
- --kit-accordion-item-font: var(--kit-font-sm);
246
- }
247
- .kit-accordion[data-size='md'] :global(.kit-accordion-item) {
248
- --kit-accordion-item-h: 48px;
249
- --kit-accordion-item-p: 12px;
250
- --kit-accordion-item-gap: var(--kit-space-default);
251
- --kit-accordion-item-font: var(--kit-font-md);
252
- }
253
- .kit-accordion[data-size='lg'] :global(.kit-accordion-item) {
254
- --kit-accordion-item-h: 56px;
255
- --kit-accordion-item-p: 16px;
256
- --kit-accordion-item-gap: var(--kit-space-default);
257
- --kit-accordion-item-font: var(--kit-font-lg);
258
- }
259
- .kit-accordion[data-size='xl'] :global(.kit-accordion-item) {
260
- --kit-accordion-item-h: 64px;
261
- --kit-accordion-item-p: 20px;
262
- --kit-accordion-item-gap: var(--kit-space-comfortable);
263
- --kit-accordion-item-font: var(--kit-font-xl);
264
- }
265
- </style>
46
+ <style>:where(.kit-accordion) {
47
+ --kit-accordion-color: initial;
48
+ --kit-accordion-on-color: initial;
49
+ --kit-accordion-item-radius: var(--kit-accordion-radius);
50
+ --kit-accordion-gap: 0;
51
+ }
52
+
53
+ .kit-accordion {
54
+ position: relative;
55
+ display: flex;
56
+ flex-wrap: wrap;
57
+ justify-content: center;
58
+ gap: var(--kit-accordion-gap);
59
+ box-sizing: border-box;
60
+ width: 100%;
61
+ padding: 0;
62
+ border: 0;
63
+ list-style: none;
64
+ }
65
+ .kit-accordion[data-spacer=true] {
66
+ --kit-accordion-gap: 0.5rem;
67
+ }
68
+ .kit-accordion[data-spacer=true] :global(.kit-accordion-item) {
69
+ border-radius: var(--kit-accordion-item-radius);
70
+ }
71
+ .kit-accordion:not([data-spacer=true]) :global(.kit-accordion-item) {
72
+ border-radius: 0;
73
+ }
74
+ .kit-accordion:not([data-spacer=true]) :global(.kit-accordion-item:first-child) {
75
+ border-start-start-radius: var(--kit-accordion-item-radius);
76
+ border-start-end-radius: var(--kit-accordion-item-radius);
77
+ }
78
+ .kit-accordion:not([data-spacer=true]) :global(.kit-accordion-item:last-child) {
79
+ border-end-start-radius: var(--kit-accordion-item-radius);
80
+ border-end-end-radius: var(--kit-accordion-item-radius);
81
+ }
82
+ .kit-accordion[data-hide-icon=true] :global(.kit-accordion-item__indicator) {
83
+ display: none;
84
+ }
85
+ .kit-accordion:not([data-variant=outline], [data-variant=surface]) :global(.kit-accordion-item .outline) {
86
+ display: none;
87
+ }
88
+ .kit-accordion:is([data-variant=filled], [data-variant=tonal]) :global(.kit-accordion-item .kit-accordion-item__separator) {
89
+ display: none;
90
+ }
91
+ .kit-accordion:not([data-variant=text]) :global(.kit-accordion-item[data-read-only='false'][data-disabled='false']
92
+ > .kit-accordion-item__trigger:hover) {
93
+ background-color: var(--kit-accordion-item-hover);
94
+ }
95
+
96
+ :where(.kit-accordion[data-variant=text]) {
97
+ --kit-accordion-item-radius: 0;
98
+ }
99
+
100
+ /**
101
+ * size: read by the items
102
+ * @link https://lapikit.dev/docs/components/accordion#size
103
+ */
104
+ :where(.kit-accordion[data-size=xs]) {
105
+ --kit-accordion-item-h: 2rem;
106
+ --kit-accordion-item-p: 0.5rem;
107
+ --kit-accordion-item-gap: 0.125rem;
108
+ --kit-accordion-item-font: var(--kit-font-xs);
109
+ }
110
+
111
+ :where(.kit-accordion[data-size=sm]) {
112
+ --kit-accordion-item-h: 2.5rem;
113
+ --kit-accordion-item-p: 0.625rem;
114
+ --kit-accordion-item-gap: 0.25rem;
115
+ --kit-accordion-item-font: var(--kit-font-sm);
116
+ }
117
+
118
+ :where(.kit-accordion[data-size=md]) {
119
+ --kit-accordion-item-h: 3rem;
120
+ --kit-accordion-item-p: 0.75rem;
121
+ --kit-accordion-item-gap: 0.25rem;
122
+ --kit-accordion-item-font: var(--kit-font-md);
123
+ }
124
+
125
+ :where(.kit-accordion[data-size=lg]) {
126
+ --kit-accordion-item-h: 3.5rem;
127
+ --kit-accordion-item-p: 1rem;
128
+ --kit-accordion-item-gap: 0.25rem;
129
+ --kit-accordion-item-font: var(--kit-font-lg);
130
+ }
131
+
132
+ :where(.kit-accordion[data-size=xl]) {
133
+ --kit-accordion-item-h: 4rem;
134
+ --kit-accordion-item-p: 1.25rem;
135
+ --kit-accordion-item-gap: 0.375rem;
136
+ --kit-accordion-item-font: var(--kit-font-xl);
137
+ }
138
+
139
+ /**
140
+ * variant: applied on the items, (0,1,0) to win over the base of the item whatever the order of the styles
141
+ * @link https://lapikit.dev/docs/components/accordion#variants
142
+ */
143
+ :where(.kit-accordion[data-variant=tonal]) :global(.kit-accordion-item) {
144
+ --kit-accordion-item-bg: color-mix(in oklab, var(--kit-accordion-item-ink) 16%, transparent);
145
+ --kit-accordion-item-fg: var(--kit-accordion-item-ink);
146
+ --kit-accordion-item-border: transparent;
147
+ --kit-accordion-item-active: color-mix(in oklab, var(--kit-accordion-item-ink) 28%, transparent);
148
+ --kit-accordion-item-active-fg: var(--kit-accordion-item-ink);
149
+ }
150
+
151
+ :where(.kit-accordion[data-variant=outline]) :global(.kit-accordion-item) {
152
+ --kit-accordion-item-bg: transparent;
153
+ --kit-accordion-item-fg: var(--kit-accordion-item-ink);
154
+ --kit-accordion-item-border: var(--kit-accordion-item-color, var(--kit-color-border));
155
+ --kit-accordion-item-active: color-mix(in oklab, var(--kit-accordion-item-ink) 14%, transparent);
156
+ --kit-accordion-item-active-fg: var(--kit-accordion-item-ink);
157
+ }
158
+
159
+ :where(.kit-accordion[data-variant=surface]) :global(.kit-accordion-item) {
160
+ --kit-accordion-item-bg: color-mix(in oklab, var(--kit-accordion-item-ink) 8%, transparent);
161
+ --kit-accordion-item-fg: var(--kit-accordion-item-ink);
162
+ --kit-accordion-item-border: color-mix(in oklab, var(--kit-accordion-item-ink) 35%, transparent);
163
+ --kit-accordion-item-active: color-mix(in oklab, var(--kit-accordion-item-ink) 18%, transparent);
164
+ --kit-accordion-item-active-fg: var(--kit-accordion-item-ink);
165
+ }
166
+
167
+ :where(.kit-accordion[data-variant=text]) :global(.kit-accordion-item) {
168
+ --kit-accordion-item-bg: transparent;
169
+ --kit-accordion-item-fg: var(--kit-accordion-item-ink);
170
+ --kit-accordion-item-border: transparent;
171
+ --kit-accordion-item-active: color-mix(in oklab, var(--kit-accordion-item-ink) 14%, transparent);
172
+ --kit-accordion-item-active-fg: var(--kit-accordion-item-ink);
173
+ }
174
+
175
+ /**
176
+ * rounded
177
+ * @link https://lapikit.dev/docs/customize
178
+ */
179
+ :where(.kit-accordion[data-rounded="0"]) {
180
+ --kit-accordion-radius: var(--kit-shape-none);
181
+ }
182
+
183
+ :where(.kit-accordion[data-rounded=xs]) {
184
+ --kit-accordion-radius: var(--kit-shape-xs);
185
+ }
186
+
187
+ :where(.kit-accordion[data-rounded=sm]) {
188
+ --kit-accordion-radius: var(--kit-shape-sm);
189
+ }
190
+
191
+ :where(.kit-accordion[data-rounded=md]) {
192
+ --kit-accordion-radius: var(--kit-shape-md);
193
+ }
194
+
195
+ :where(.kit-accordion[data-rounded=lg]) {
196
+ --kit-accordion-radius: var(--kit-shape-lg);
197
+ }
198
+
199
+ :where(.kit-accordion[data-rounded=xl]) {
200
+ --kit-accordion-radius: var(--kit-shape-xl);
201
+ }
202
+
203
+ :where(.kit-accordion[data-rounded=full]) {
204
+ --kit-accordion-radius: var(--kit-shape-full);
205
+ }
206
+
207
+ /**
208
+ * density
209
+ * @link https://lapikit.dev/docs/components/accordion#density
210
+ */
211
+ :where(.kit-accordion[data-density=dense]) {
212
+ --kit-accordion-density-offset: var(--kit-density-dense);
213
+ }
214
+
215
+ :where(.kit-accordion[data-density=compact]) {
216
+ --kit-accordion-density-offset: var(--kit-density-compact);
217
+ }
218
+
219
+ :where(.kit-accordion[data-density=default]) {
220
+ --kit-accordion-density-offset: var(--kit-density-default);
221
+ }
222
+
223
+ :where(.kit-accordion[data-density=comfortable]) {
224
+ --kit-accordion-density-offset: var(--kit-density-comfortable);
225
+ }
226
+
227
+ :where(.kit-accordion[data-density=spacious]) {
228
+ --kit-accordion-density-offset: var(--kit-density-spacious);
229
+ }</style>
@@ -1,6 +1,6 @@
1
- import type { RoundedType, Component, SizeType, DensityType, ElevationProps } from '../../@types';
1
+ import type { ColorProps, Component, ElevationProps, RoundedType, SizeType } from '../../@types';
2
2
  import type { Snippet } from 'svelte';
3
- type AccordionVariant = 'filled' | 'outline' | 'text';
3
+ type AccordionVariant = 'filled' | 'tonal' | 'outline' | 'surface' | 'text';
4
4
  export type ModelAccordionItemProps = {
5
5
  open: boolean;
6
6
  };
@@ -8,12 +8,11 @@ export interface AccordionProps extends Component {
8
8
  ref?: HTMLElement | null;
9
9
  is?: 'div';
10
10
  text?: string;
11
- color?: string;
12
- background?: string;
11
+ color?: string | false;
13
12
  rounded?: RoundedType | 'full';
14
13
  size?: SizeType;
15
14
  variant?: AccordionVariant;
16
- density?: DensityType;
15
+ density?: 'dense' | 'compact' | 'default' | 'comfortable' | 'spacious';
17
16
  spacer?: boolean;
18
17
  hideIcon?: boolean;
19
18
  }
@@ -25,8 +24,7 @@ export interface AccordionItemProps extends Component {
25
24
  is?: 'div';
26
25
  index: number | string;
27
26
  text?: string;
28
- color?: string;
29
- background?: string;
27
+ color?: ColorProps;
30
28
  readOnly?: boolean;
31
29
  open?: boolean;
32
30
  disabled?: boolean;