lapikit 0.6.2 → 0.6.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 (38) hide show
  1. package/dist/components/accordion/accordion.svelte +172 -42
  2. package/dist/components/accordion/accordion.types.d.ts +8 -3
  3. package/dist/components/accordion/modules/accordion-item.svelte +71 -72
  4. package/dist/components/alert/alert.svelte +201 -118
  5. package/dist/components/alert/alert.types.d.ts +8 -6
  6. package/dist/components/app/app.svelte +36 -27
  7. package/dist/components/appbar/appbar.svelte +115 -64
  8. package/dist/components/appbar/appbar.types.d.ts +4 -4
  9. package/dist/components/aspect-ratio/aspect-ratio.svelte +4 -12
  10. package/dist/components/aspect-ratio/aspect-ratio.types.d.ts +2 -1
  11. package/dist/components/avatar/avatar.svelte +108 -66
  12. package/dist/components/avatar/avatar.types.d.ts +7 -5
  13. package/dist/components/btn/btn.svelte +167 -169
  14. package/dist/components/btn/btn.types.d.ts +5 -2
  15. package/dist/components/card/card.svelte +9 -10
  16. package/dist/components/chip/chip.svelte +162 -140
  17. package/dist/components/chip/chip.types.d.ts +7 -3
  18. package/dist/components/dialog/dialog.svelte +84 -81
  19. package/dist/components/dialog/dialog.types.d.ts +7 -5
  20. package/dist/components/dropdown/dropdown.svelte +46 -36
  21. package/dist/components/dropdown/dropdown.types.d.ts +4 -2
  22. package/dist/components/icon/icon.svelte +28 -52
  23. package/dist/components/list/list.svelte +126 -93
  24. package/dist/components/list/list.types.d.ts +4 -5
  25. package/dist/components/list/modules/list-item.svelte +82 -99
  26. package/dist/components/modal/modal.svelte +104 -98
  27. package/dist/components/modal/modal.types.d.ts +7 -5
  28. package/dist/components/popover/popover.svelte +46 -34
  29. package/dist/components/popover/popover.types.d.ts +3 -1
  30. package/dist/components/separator/separator.svelte +11 -30
  31. package/dist/components/separator/separator.types.d.ts +1 -2
  32. package/dist/components/textfield/textfield.svelte +180 -157
  33. package/dist/components/textfield/textfield.types.d.ts +4 -3
  34. package/dist/components/toolbar/toolbar.svelte +126 -108
  35. package/dist/components/toolbar/toolbar.types.d.ts +6 -7
  36. package/dist/components/tooltip/tooltip.svelte +39 -45
  37. package/dist/components/tooltip/tooltip.types.d.ts +3 -3
  38. package/package.json +1 -1
@@ -1,16 +1,18 @@
1
- import type { Component, RoundedType } from '../../@types';
2
- export type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
- export type DialogPosition = 'top' | 'center' | 'bottom';
4
- export type DialogDensity = 'compact' | 'comfortable' | 'default';
1
+ import type { Component, DensityType, ElevationProps, RoundedType } from '../../@types';
2
+ type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ type DialogPosition = 'top' | 'center' | 'bottom' | 'top-left' | 'top-right' | 'center-left' | 'center-right' | 'bottom-left' | 'bottom-right';
5
4
  export interface DialogProps extends Component {
6
5
  ref?: HTMLDialogElement | null;
7
6
  open?: boolean;
8
7
  persistent?: boolean;
9
8
  size?: DialogSize;
10
9
  position?: DialogPosition;
11
- density?: DialogDensity;
10
+ density?: DensityType;
12
11
  rounded?: RoundedType;
13
12
  classContent?: string | string[] | undefined;
14
13
  color?: string;
15
14
  background?: string;
15
+ elevation?: ElevationProps;
16
+ space?: string;
16
17
  }
18
+ export {};
@@ -1,6 +1,6 @@
1
1
  <script lang="ts">
2
2
  import { onDestroy } from 'svelte';
3
- import { useClassName, useStyles, clickOutside } from '../../utils';
3
+ import { useClassName, useStyles, clickOutside, useElevation } from '../../utils';
4
4
  import { makeComponentProps } from '../../html-mapped';
5
5
  import { getPositions } from './dropdown.svelte.js';
6
6
  import type { DropdownProps, ModelDropdownProps } from './dropdown.types.js';
@@ -9,29 +9,27 @@
9
9
  ref = $bindable(),
10
10
  children,
11
11
  activator,
12
- rounded,
12
+ rounded = 'md',
13
13
  position = 'bottom',
14
14
  closeOnClick = false,
15
15
  openOnHover = false,
16
16
  color,
17
17
  background,
18
+ density = 'default',
18
19
  class: className = '',
19
20
  style: styleAttr = '',
20
21
  's-class': sClass,
21
22
  's-style': sStyle,
23
+ elevation,
22
24
  ...rest
23
25
  }: DropdownProps = $props();
24
26
 
25
- let safePosition = $derived(
26
- position === 'top' || position === 'bottom' || position === 'left' || position === 'right'
27
- ? position
28
- : 'bottom'
29
- );
30
-
31
27
  let { classProps, styleProps, restProps } = $derived(
32
28
  makeComponentProps(rest as Record<string, unknown>)
33
29
  );
34
30
 
31
+ let elevationState = $derived(useElevation(elevation));
32
+
35
33
  let componentClass = $derived(
36
34
  useClassName({
37
35
  baseClass: 'kit-dropdown-content',
@@ -49,18 +47,7 @@
49
47
  })
50
48
  );
51
49
 
52
- let mergedStyle = $derived(
53
- [
54
- componentStyle,
55
- background ? `--kit-dropdown-bg:${background}` : '',
56
- color ? `--kit-dropdown-fg:${color}` : '',
57
- typeof rounded === 'string' && rounded.includes('px')
58
- ? `--kit-dropdown-radius:${rounded}`
59
- : ''
60
- ]
61
- .filter(Boolean)
62
- .join('; ')
63
- );
50
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
64
51
 
65
52
  const positioner = getPositions();
66
53
 
@@ -83,7 +70,7 @@
83
70
 
84
71
  const updatePosition = () => {
85
72
  if (!contentRef || !activatorRef) return;
86
- positioner.update(activatorRef, contentRef, safePosition, false, true);
73
+ positioner.update(activatorRef, contentRef, position, false, true);
87
74
  axis = positioner.values;
88
75
  };
89
76
 
@@ -170,14 +157,20 @@
170
157
  style={`left:${axis.x}px; top:${axis.y}px; ${mergedStyle}`}
171
158
  role="menu"
172
159
  data-rounded={rounded}
173
- data-position={axis.location ?? safePosition}
160
+ data-position={axis.location ?? position}
161
+ data-density={density}
174
162
  onmouseover={() => handleMouseEvent('open', activatorRef)}
175
163
  onmouseleave={() => handleMouseEvent('close', activatorRef)}
176
164
  onclick={(event) => {
177
165
  event.stopPropagation();
178
166
  handleContentClick();
179
167
  }}
168
+ data-elevation={elevationState.base}
169
+ data-elevation-hover={elevationState.hover}
170
+ data-elevation-active={elevationState.active}
180
171
  use:clickOutside={{ exclude: [contentRef, activatorRef], onClose: handleClose }}
172
+ style:--kit-dropdown-fg={color && `var(--kit-color-${color})`}
173
+ style:--kit-dropdown-bg={background && `var(--kit-color-${background})`}
181
174
  {...restProps}
182
175
  >
183
176
  {@render children?.()}
@@ -186,43 +179,60 @@
186
179
 
187
180
  <style>
188
181
  .kit-dropdown-content {
189
- --kit-dropdown-bg: var(--kit-surface-1);
190
- --kit-dropdown-fg: var(--kit-fg);
191
- --kit-dropdown-radius: 12px;
192
- --kit-dropdown-bd: color-mix(in oklab, var(--kit-fg), transparent 88%);
193
- --kit-dropdown-shadow: 0 18px 40px -18px color-mix(in oklab, black 24%, transparent);
182
+ --kit-dropdown-bg: var(--kit-color-surface-3);
183
+ --kit-dropdown-fg: var(--kit-color-text);
194
184
 
195
185
  position: fixed;
196
186
  z-index: 1800;
197
187
  min-width: 12rem;
198
188
  max-width: min(22rem, calc(100vw - 1rem));
199
- padding: 0.375rem;
200
- border: 1px solid var(--kit-dropdown-bd);
189
+ padding: 0.375rem calc(0.375rem * var(--kit-dropdown-density-scale));
190
+ border: 0;
201
191
  border-radius: var(--kit-dropdown-radius);
202
192
  background: var(--kit-dropdown-bg);
203
193
  color: var(--kit-dropdown-fg);
204
- box-shadow: var(--kit-dropdown-shadow);
205
194
  transform-origin: top left;
206
195
  animation: kit-dropdown-enter 140ms ease;
207
196
  }
208
197
 
198
+ /**
199
+ * rounded
200
+ * @link ...
201
+ */
209
202
  .kit-dropdown-content[data-rounded='0'] {
210
- --kit-dropdown-radius: 0;
203
+ --kit-dropdown-radius: var(--kit-shape-none);
211
204
  }
212
205
  .kit-dropdown-content[data-rounded='xs'] {
213
- --kit-dropdown-radius: 2px;
206
+ --kit-dropdown-radius: var(--kit-shape-xs);
214
207
  }
215
208
  .kit-dropdown-content[data-rounded='sm'] {
216
- --kit-dropdown-radius: 4px;
209
+ --kit-dropdown-radius: var(--kit-shape-sm);
217
210
  }
218
211
  .kit-dropdown-content[data-rounded='md'] {
219
- --kit-dropdown-radius: 8px;
212
+ --kit-dropdown-radius: var(--kit-shape-md);
220
213
  }
221
214
  .kit-dropdown-content[data-rounded='lg'] {
222
- --kit-dropdown-radius: 16px;
215
+ --kit-dropdown-radius: var(--kit-shape-lg);
223
216
  }
224
217
  .kit-dropdown-content[data-rounded='xl'] {
225
- --kit-dropdown-radius: 99999px;
218
+ --kit-dropdown-radius: var(--kit-shape-xl);
219
+ }
220
+
221
+ /**
222
+ * density
223
+ * @link no url
224
+ */
225
+ .kit-dropdown-content[data-density='none'] {
226
+ --kit-dropdown-density-scale: 0;
227
+ }
228
+ .kit-dropdown-content[data-density='compact'] {
229
+ --kit-dropdown-density-scale: 0.8;
230
+ }
231
+ .kit-dropdown-content[data-density='default'] {
232
+ --kit-dropdown-density-scale: 1;
233
+ }
234
+ .kit-dropdown-content[data-density='comfortable'] {
235
+ --kit-dropdown-density-scale: 1.15;
226
236
  }
227
237
 
228
238
  @keyframes kit-dropdown-enter {
@@ -1,4 +1,4 @@
1
- import type { Component, PropValue, RoundedType } from '../../@types/index';
1
+ import type { Component, DensityType, ElevationProps, PropValue, RoundedType } from '../../@types/index';
2
2
  import type { Snippet } from 'svelte';
3
3
  export type PositionElement = {
4
4
  x: number;
@@ -13,15 +13,17 @@ export type ModelDropdownProps = {
13
13
  export type ModelDropdownHandleProps = (state: 'open' | 'close', element: HTMLElement | PointerEvent | null) => void;
14
14
  export interface DropdownProps extends Component {
15
15
  ref?: HTMLElement | null;
16
- rounded?: RoundedType | string;
16
+ rounded?: RoundedType;
17
17
  position?: 'top' | 'bottom' | 'left' | 'right';
18
18
  openOnHover?: boolean;
19
19
  closeOnClick?: boolean;
20
20
  color?: string;
21
21
  background?: string;
22
+ density?: DensityType;
22
23
  activator?: Snippet<[
23
24
  ModelDropdownProps,
24
25
  (state: 'open' | 'close', element: HTMLElement | PointerEvent | null) => void
25
26
  ]>;
26
27
  [key: string]: PropValue | Record<string, PropValue> | unknown;
28
+ elevation?: ElevationProps;
27
29
  }
@@ -47,14 +47,6 @@
47
47
  })
48
48
  );
49
49
 
50
- let safeSize = $derived(
51
- size === 'default' || size === undefined
52
- ? undefined
53
- : size === 'xs' || size === 'sm' || size === 'md' || size === 'lg' || size === 'xl'
54
- ? size
55
- : 'md'
56
- );
57
-
58
50
  let resolvedSrc = $derived(src ?? (icon?.includes('/') ? icon : undefined));
59
51
  let resolvedName = $derived(name ?? (!icon?.includes('/') ? icon : undefined));
60
52
  let hasChildren = $derived(!!children);
@@ -65,33 +57,18 @@
65
57
  : componentClass
66
58
  );
67
59
 
68
- let safeLoading = $derived(loading === 'lazy' || loading === 'eager' ? loading : 'eager');
69
- let safeDecoding = $derived(
70
- decoding === 'async' || decoding === 'sync' || decoding === 'auto' ? decoding : 'async'
71
- );
72
- let safeColorMode = $derived(
73
- colorMode === 'auto' || colorMode === 'none' || colorMode === 'mask' || colorMode === 'filter'
74
- ? colorMode
75
- : 'auto'
76
- );
77
-
78
60
  let iconRole = $derived(!decorative && (label || alt) ? 'img' : undefined);
79
61
  let iconAriaLabel = $derived(!decorative ? label || alt || undefined : undefined);
80
62
  let iconAriaHidden = $derived(decorative ? true : undefined);
81
63
  let imgAlt = $derived(decorative ? '' : alt || label || '');
82
64
  let isSvgSrc = $derived(!!resolvedSrc && /\.svg($|\?)/i.test(resolvedSrc));
83
65
  let useMaskMode = $derived(
84
- !!resolvedSrc &&
85
- (color ? safeColorMode === 'mask' || (safeColorMode === 'auto' && isSvgSrc) : false)
66
+ !!resolvedSrc && (color ? colorMode === 'mask' || (colorMode === 'auto' && isSvgSrc) : false)
86
67
  );
87
68
  let useFilterMode = $derived(
88
- !!resolvedSrc && !!imgFilter && (safeColorMode === 'filter' || safeColorMode === 'auto')
89
- );
90
- let mergedStyle = $derived(
91
- [componentStyle, color ? `color:${color}` : '', color ? `--kit-icon-color:${color}` : '']
92
- .filter(Boolean)
93
- .join('; ')
69
+ !!resolvedSrc && !!imgFilter && (colorMode === 'filter' || colorMode === 'auto')
94
70
  );
71
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
95
72
  </script>
96
73
 
97
74
  {#if hasContent}
@@ -100,10 +77,12 @@
100
77
  bind:this={ref}
101
78
  class={classWithIconName}
102
79
  style={mergedStyle}
103
- data-size={safeSize}
80
+ data-size={size}
104
81
  role={iconRole}
105
82
  aria-label={iconAriaLabel}
106
83
  aria-hidden={iconAriaHidden}
84
+ style:--kit-icon-color={color && `var(--kit-color-${color})`}
85
+ style:color={color && `var(--kit-color-${color})`}
107
86
  {...restProps}
108
87
  >
109
88
  {#if hasChildren}
@@ -119,8 +98,8 @@
119
98
  <img
120
99
  src={resolvedSrc}
121
100
  alt={imgAlt}
122
- loading={safeLoading}
123
- decoding={safeDecoding}
101
+ {loading}
102
+ {decoding}
124
103
  style={useFilterMode ? `filter:${imgFilter}` : undefined}
125
104
  />
126
105
  {/if}
@@ -130,13 +109,6 @@
130
109
 
131
110
  <style>
132
111
  .kit-icon {
133
- --kit-icon-size-xs: 0.875rem;
134
- --kit-icon-size-sm: 1rem;
135
- --kit-icon-size-md: 1.125rem;
136
- --kit-icon-size-lg: 1.25rem;
137
- --kit-icon-size-xl: 1.375rem;
138
- --kit-icon-current-size: var(--kit-icon-size-md);
139
-
140
112
  display: inline-flex;
141
113
  align-items: center;
142
114
  justify-content: center;
@@ -146,22 +118,6 @@
146
118
  vertical-align: middle;
147
119
  }
148
120
 
149
- .kit-icon[data-size='xs'] {
150
- --kit-icon-current-size: var(--kit-icon-size-xs);
151
- }
152
- .kit-icon[data-size='sm'] {
153
- --kit-icon-current-size: var(--kit-icon-size-sm);
154
- }
155
- .kit-icon[data-size='md'] {
156
- --kit-icon-current-size: var(--kit-icon-size-md);
157
- }
158
- .kit-icon[data-size='lg'] {
159
- --kit-icon-current-size: var(--kit-icon-size-lg);
160
- }
161
- .kit-icon[data-size='xl'] {
162
- --kit-icon-current-size: var(--kit-icon-size-xl);
163
- }
164
-
165
121
  .kit-icon :global(svg),
166
122
  .kit-icon img,
167
123
  .kit-icon .kit-icon__mask {
@@ -183,4 +139,24 @@
183
139
  -webkit-mask-size: contain;
184
140
  -webkit-mask-position: center;
185
141
  }
142
+
143
+ /**
144
+ * size
145
+ * @link https://lapikit.dev/docs/components/icon#size
146
+ */
147
+ .kit-icon[data-size='xs'] {
148
+ --kit-icon-current-size: 0.875rem;
149
+ }
150
+ .kit-icon[data-size='sm'] {
151
+ --kit-icon-current-size: 1rem;
152
+ }
153
+ .kit-icon[data-size='md'] {
154
+ --kit-icon-current-size: 1.125rem;
155
+ }
156
+ .kit-icon[data-size='lg'] {
157
+ --kit-icon-current-size: 1.25rem;
158
+ }
159
+ .kit-icon[data-size='xl'] {
160
+ --kit-icon-current-size: 1.375rem;
161
+ }
186
162
  </style>
@@ -1,17 +1,7 @@
1
1
  <script lang="ts">
2
2
  import { makeComponentProps } from '../../html-mapped';
3
3
  import { useClassName, useStyles } from '../../utils';
4
- import type { ListDensity, ListProps, ListVariant } from './list.types.js';
5
-
6
- function resolveVariant(value: ListVariant | undefined): ListVariant {
7
- return value === 'filled' || value === 'outline' || value === 'text' ? value : 'filled';
8
- }
9
-
10
- function resolveDensity(value: ListDensity | undefined): ListDensity {
11
- return value === 'compact' || value === 'comfortable' || value === 'default'
12
- ? value
13
- : 'default';
14
- }
4
+ import type { ListProps } from './list.types.js';
15
5
 
16
6
  let {
17
7
  ref = $bindable(),
@@ -26,8 +16,8 @@
26
16
  density = 'default',
27
17
  rounded = 'md',
28
18
  nav = false,
29
- color = undefined,
30
- background = undefined,
19
+ color,
20
+ background,
31
21
  ...rest
32
22
  }: ListProps = $props();
33
23
 
@@ -52,24 +42,7 @@
52
42
  })
53
43
  );
54
44
 
55
- let safeVariant = $derived(resolveVariant(variant));
56
- let safeDensity = $derived(resolveDensity(density));
57
- let safeSize = $derived(
58
- size === 'default'
59
- ? 'md'
60
- : size === 'xs' || size === 'sm' || size === 'md' || size === 'lg' || size === 'xl'
61
- ? size
62
- : 'md'
63
- );
64
- let mergedStyle = $derived(
65
- [
66
- componentStyle,
67
- color ? `--kit-list-fg:${color}` : '',
68
- background ? `--kit-list-bg:${background}` : ''
69
- ]
70
- .filter(Boolean)
71
- .join('; ')
72
- );
45
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
73
46
  </script>
74
47
 
75
48
  <svelte:element
@@ -77,12 +50,14 @@
77
50
  bind:this={ref}
78
51
  class={componentClass}
79
52
  style={mergedStyle}
80
- data-size={safeSize}
81
- data-variant={safeVariant}
82
- data-density={safeDensity}
53
+ data-size={size}
54
+ data-variant={variant}
55
+ data-density={density}
83
56
  data-rounded={rounded}
84
57
  data-nav={nav}
85
58
  role={nav ? 'navigation' : is === 'ul' ? undefined : 'list'}
59
+ style:--kit-list-item-fg={color && `var(--kit-color-${color})`}
60
+ style:--kit-list-item-bg={background && `var(--kit-color-${background})`}
86
61
  {...restProps}
87
62
  >
88
63
  {@render children?.()}
@@ -90,87 +65,145 @@
90
65
 
91
66
  <style>
92
67
  .kit-list {
93
- --kit-list-bg: var(--kit-surface-1);
94
- --kit-list-fg: var(--kit-fg);
95
- --kit-list-bd: var(--kit-border);
96
- --kit-list-radius: 10px;
97
- --kit-list-item-h-xs: 2.125rem;
98
- --kit-list-item-h-sm: 2.375rem;
99
- --kit-list-item-h-md: 2.75rem;
100
- --kit-list-item-h-lg: 3.125rem;
101
- --kit-list-item-h-xl: 3.5rem;
102
- --kit-list-item-px-xs: 0.625rem;
103
- --kit-list-item-px-sm: 0.75rem;
104
- --kit-list-item-px-md: 0.875rem;
105
- --kit-list-item-px-lg: 1rem;
106
- --kit-list-item-px-xl: 1.125rem;
107
- --kit-list-item-gap-xs: 0.5rem;
108
- --kit-list-item-gap-sm: 0.5rem;
109
- --kit-list-item-gap-md: 0.625rem;
110
- --kit-list-item-gap-lg: 0.75rem;
111
- --kit-list-item-gap-xl: 0.875rem;
112
- --kit-list-item-font-xs: 0.75rem;
113
- --kit-list-item-font-sm: 0.875rem;
114
- --kit-list-item-font-md: 0.9375rem;
115
- --kit-list-item-font-lg: 1rem;
116
- --kit-list-item-font-xl: 1.0625rem;
117
- --kit-list-item-h: var(--kit-list-item-h-md);
118
- --kit-list-item-px: var(--kit-list-item-px-md);
119
- --kit-list-item-gap: var(--kit-list-item-gap-md);
120
- --kit-list-item-font: var(--kit-list-item-font-md);
121
- --kit-list-density-offset: 0rem;
122
-
68
+ width: 100%;
123
69
  display: flex;
70
+ position: relative;
124
71
  flex-direction: column;
125
- width: 100%;
126
- padding: 0.25rem;
127
- gap: 0.125rem;
128
- color: var(--kit-list-fg);
129
- background: transparent;
130
- border-radius: var(--kit-list-radius);
72
+ gap: 0;
73
+ border: 0;
74
+ box-sizing: border-box;
75
+ transition:
76
+ background 140ms ease,
77
+ color 140ms ease,
78
+ box-shadow 140ms ease,
79
+ translate 140ms ease;
131
80
  }
132
81
 
133
- .kit-list[data-nav='true'] {
134
- padding: 0.5rem;
82
+ .kit-list[data-variant='text']
83
+ :global(.kit-list-item[data-interactive='true'][data-active='true'][data-disabled='false']),
84
+ .kit-list[data-variant='text']
85
+ :global(.kit-list-item[data-interactive='true'][data-disabled='false']:active) {
86
+ background: var(--kit-list-item-active-bg);
135
87
  }
136
88
 
89
+ /**
90
+ * density
91
+ * @link https://lapikit.dev/docs/components/list#density
92
+ */
93
+ .kit-list[data-density='none'] {
94
+ --kit-list-density-scale: 0;
95
+ --kit-list-density-h-scale: 0;
96
+ }
137
97
  .kit-list[data-density='compact'] {
138
- --kit-list-density-offset: -0.25rem;
98
+ --kit-list-density-scale: 0.9;
99
+ --kit-list-density-h-scale: 0.92;
100
+ }
101
+ .kit-list[data-density='default'] {
102
+ --kit-list-density-scale: 1;
103
+ --kit-list-density-h-scale: 1;
139
104
  }
140
-
141
105
  .kit-list[data-density='comfortable'] {
142
- --kit-list-density-offset: 0.25rem;
106
+ --kit-list-density-scale: 1.1;
107
+ --kit-list-density-h-scale: 1.15;
143
108
  }
144
109
 
145
- .kit-list[data-rounded='0'] {
146
- --kit-list-radius: 0;
110
+ /**
111
+ * rounded
112
+ * @link ...
113
+ */
114
+ .kit-list[data-rounded='0'] :global(.kit-list-item) {
115
+ --kit-list-item-radius: var(--kit-shape-none);
147
116
  }
148
-
149
- .kit-list[data-rounded='xs'] {
150
- --kit-list-radius: 2px;
117
+ .kit-list[data-rounded='xs'] :global(.kit-list-item) {
118
+ --kit-list-item-radius: var(--kit-shape-xs);
151
119
  }
152
-
153
- .kit-list[data-rounded='sm'] {
154
- --kit-list-radius: 6px;
120
+ .kit-list[data-rounded='sm'] :global(.kit-list-item) {
121
+ --kit-list-item-radius: var(--kit-shape-sm);
122
+ }
123
+ .kit-list[data-rounded='md'] :global(.kit-list-item) {
124
+ --kit-list-item-radius: var(--kit-shape-md);
125
+ }
126
+ .kit-list[data-rounded='lg'] :global(.kit-list-item) {
127
+ --kit-list-item-radius: var(--kit-shape-lg);
155
128
  }
129
+ .kit-list[data-rounded='xl'] :global(.kit-list-item) {
130
+ --kit-list-item-radius: var(--kit-shape-xl);
131
+ }
132
+ .kit-list[data-rounded='full'] :global(.kit-list-item) {
133
+ --kit-list-item-radius: var(--kit-shape-full);
134
+ }
135
+
136
+ /**
137
+ * variant
138
+ * @link https://lapikit.dev/docs/components/list#variants
139
+ */
140
+ .kit-list[data-variant='filled'] :global(.kit-list-item) {
141
+ --kit-list-item-bg: var(--kit-color-surface-2);
142
+ --kit-list-item-fg: var(--kit-color-text);
156
143
 
157
- .kit-list[data-rounded='md'] {
158
- --kit-list-radius: 10px;
144
+ --kit-list-item-hover-bg: color-mix(in oklab, var(---kit-list-item-bg), black 10%);
145
+ --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-bg), black 16%);
159
146
  }
147
+ .kit-list[data-variant='outline'] :global(.kit-list-item) {
148
+ --kit-list-item-bg: transparent;
149
+ --kit-list-item-fg: var(--kit-color-text);
150
+ --kit-list-item-bd: var(--kit-list-item-fg);
160
151
 
161
- .kit-list[data-rounded='lg'] {
162
- --kit-list-radius: 16px;
152
+ --kit-list-item-hover-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 80%);
153
+ --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 92%);
163
154
  }
155
+ .kit-list[data-variant='text'] :global(.kit-list-item) {
156
+ --kit-list-item-bg: transparent;
157
+ --kit-list-item-fg: var(--kit-color-text);
164
158
 
165
- .kit-list[data-rounded='xl'] {
166
- --kit-list-radius: 9999px;
159
+ --kit-list-item-hover-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 80%);
160
+ --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 92%);
161
+ }
162
+ .kit-list[data-variant='text'] :global(.kit-list-item .outline),
163
+ .kit-list[data-variant='filled'] :global(.kit-list-item .outline) {
164
+ display: none;
167
165
  }
168
166
 
169
- .kit-list[data-variant='filled'] {
170
- background: color-mix(in oklab, var(--kit-list-bg), transparent 12%);
167
+ /**
168
+ * nav
169
+ * @link https://lapikit.dev/docs/components/list#nav
170
+ */
171
+ .kit-list[data-nav='true'] {
172
+ padding: 0.5rem;
171
173
  }
172
174
 
173
- .kit-list[data-variant='outline'] {
174
- border: 1px solid var(--kit-list-bd);
175
+ /**
176
+ * size
177
+ * @link nothing...
178
+ */
179
+ .kit-list[data-size='xs'] :global(.kit-list-item) {
180
+ --kit-list-item-h: 28px;
181
+ --kit-list-item-px: 10px;
182
+ --kit-list-item-gap: 4px;
183
+ --kit-list-item-font: 0.75rem;
184
+ }
185
+ .kit-list[data-size='sm'] :global(.kit-list-item) {
186
+ --kit-list-item-h: 32px;
187
+ --kit-list-item-px: 12px;
188
+ --kit-list-item-gap: 6px;
189
+ --kit-list-item-font: 0.875rem;
190
+ }
191
+ .kit-list[data-size='md'] :global(.kit-list-item) {
192
+ --kit-list-item-h: 40px;
193
+ --kit-list-item-px: 16px;
194
+ --kit-list-item-gap: 8px;
195
+ --kit-list-item-font: 1rem;
196
+ }
197
+ .kit-list[data-size='lg'] :global(.kit-list-item) {
198
+ --kit-list-item-h: 48px;
199
+ --kit-list-item-px: 20px;
200
+ --kit-list-item-gap: 10px;
201
+ --kit-list-item-font: 1.125rem;
202
+ }
203
+ .kit-list[data-size='xl'] :global(.kit-list-item) {
204
+ --kit-list-item-h: 56px;
205
+ --kit-list-item-px: 24px;
206
+ --kit-list-item-gap: 12px;
207
+ --kit-list-item-font: 1.25rem;
175
208
  }
176
209
  </style>
@@ -1,7 +1,6 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { Component, RoundedType, SizeType } from '../../@types';
2
+ import type { Component, DensityType, RoundedType, SizeType } from '../../@types';
3
3
  export type ListVariant = 'filled' | 'outline' | 'text';
4
- export type ListDensity = 'compact' | 'comfortable' | 'default';
5
4
  export type ListElement = 'div' | 'nav' | 'ul';
6
5
  export type ListItemElement = 'div' | 'a' | 'button' | 'li';
7
6
  export interface ListProps extends Component {
@@ -9,8 +8,8 @@ export interface ListProps extends Component {
9
8
  is?: ListElement;
10
9
  size?: SizeType;
11
10
  variant?: ListVariant;
12
- density?: ListDensity;
13
- rounded?: RoundedType;
11
+ density?: DensityType;
12
+ rounded?: RoundedType | 'full';
14
13
  nav?: boolean;
15
14
  color?: string;
16
15
  background?: string;
@@ -23,7 +22,7 @@ export interface ListItemProps extends Component {
23
22
  prepend?: Snippet;
24
23
  color?: string;
25
24
  background?: string;
26
- rounded?: RoundedType;
25
+ interactive?: boolean;
27
26
  active?: boolean;
28
27
  disabled?: boolean;
29
28
  noRipple?: boolean;