lapikit 0.7.3 → 0.7.5

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 (71) 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 +8 -2
  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 +25 -43
  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 +432 -466
  17. package/dist/components/btn/btn.types.d.ts +5 -6
  18. package/dist/components/card/card.svelte +24 -23
  19. package/dist/components/card/card.types.d.ts +2 -2
  20. package/dist/components/card/modules/card-content.svelte +4 -1
  21. package/dist/components/card/modules/card-title.svelte +4 -1
  22. package/dist/components/chip/chip.svelte +416 -464
  23. package/dist/components/chip/chip.types.d.ts +5 -5
  24. package/dist/components/dialog/dialog.svelte +184 -175
  25. package/dist/components/dialog/dialog.types.d.ts +6 -6
  26. package/dist/components/dropdown/dropdown.svelte +149 -144
  27. package/dist/components/dropdown/dropdown.types.d.ts +4 -11
  28. package/dist/components/field/field.svelte +474 -0
  29. package/dist/components/field/field.svelte.d.ts +4 -0
  30. package/dist/components/field/field.types.d.ts +46 -0
  31. package/dist/components/field/field.types.js +1 -0
  32. package/dist/components/icon/icon.svelte +67 -96
  33. package/dist/components/icon/icon.types.d.ts +2 -1
  34. package/dist/components/index.d.ts +2 -0
  35. package/dist/components/index.js +1 -0
  36. package/dist/components/list/list.svelte +193 -194
  37. package/dist/components/list/list.types.d.ts +5 -7
  38. package/dist/components/list/modules/list-item.svelte +134 -147
  39. package/dist/components/modal/modal.js +9 -9
  40. package/dist/components/modal/modal.svelte +239 -222
  41. package/dist/components/modal/modal.types.d.ts +6 -6
  42. package/dist/components/popover/popover.svelte +125 -127
  43. package/dist/components/popover/popover.types.d.ts +4 -11
  44. package/dist/components/separator/separator.svelte +56 -87
  45. package/dist/components/separator/separator.types.d.ts +1 -1
  46. package/dist/components/spacer/spacer.svelte +6 -25
  47. package/dist/components/textfield/textfield.svelte +94 -543
  48. package/dist/components/textfield/textfield.types.d.ts +13 -33
  49. package/dist/components/toolbar/toolbar.svelte +216 -211
  50. package/dist/components/toolbar/toolbar.types.d.ts +8 -9
  51. package/dist/components/tooltip/tooltip.svelte +201 -266
  52. package/dist/components/tooltip/tooltip.types.d.ts +3 -10
  53. package/dist/constants.js +1 -0
  54. package/dist/escaping.js +0 -1
  55. package/dist/html-mapped.d.ts +1 -15
  56. package/dist/html-mapped.js +0 -19
  57. package/dist/labs/sheet/sheet.svelte +27 -22
  58. package/dist/utils/color.d.ts +2 -2
  59. package/dist/utils/color.js +2 -1
  60. package/dist/utils/components.d.ts +10 -10
  61. package/dist/utils/components.js +16 -75
  62. package/dist/utils/floating.d.ts +58 -0
  63. package/dist/utils/floating.js +131 -0
  64. package/dist/utils/index.d.ts +1 -0
  65. package/dist/utils/index.js +1 -0
  66. package/dist/utils/outside.d.ts +3 -1
  67. package/dist/utils/outside.js +15 -3
  68. package/package.json +6 -3
  69. package/dist/components/dropdown/dropdown.svelte.js +0 -148
  70. package/dist/components/popover/popover.svelte.js +0 -134
  71. package/dist/components/tooltip/tooltip.svelte.js +0 -131
@@ -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 { IconProps } from './icon.types.js';
5
4
 
6
5
  let {
7
6
  ref = $bindable(),
8
7
  is = 'i',
9
8
  children = undefined,
10
- class: className = '',
11
- style: styleAttr = '',
9
+ class: className,
10
+ style: styleAttr,
12
11
  's-class': sClass,
13
12
  's-style': sStyle,
14
13
  name = undefined,
@@ -26,46 +25,15 @@
26
25
  ...rest
27
26
  }: IconProps = $props();
28
27
 
29
- let { classProps, styleProps, restProps } = $derived(
30
- makeComponentProps(rest as Record<string, unknown>)
31
- );
32
-
33
- let componentClass = $derived(
34
- useClassName({
35
- baseClass: 'kit-icon',
36
- className: `${className ?? ''}`.trim(),
37
- sClass,
38
- classProps
39
- })
40
- );
41
-
42
- let componentStyle = $derived(
43
- useStyles({
44
- styleAttr,
45
- sStyle,
46
- styleProps
47
- })
48
- );
49
-
50
- let resolvedStyle = $derived(
51
- [
52
- componentStyle,
53
- color ? `--kit-icon-color:${color && `var(--kit-color-${color})`}` : '',
54
- color ? `color:${color && `var(--kit-color-${color})`}` : ''
55
- ]
56
- .filter(Boolean)
57
- .join('; ')
28
+ let attrs = $derived(
29
+ useComponentAttrs('kit-icon', { className, sClass, styleAttr, sStyle, color }, rest)
58
30
  );
59
31
 
60
32
  let resolvedSrc = $derived(src ?? (icon?.includes('/') ? icon : undefined));
61
33
  let resolvedName = $derived(name ?? (!icon?.includes('/') ? icon : undefined));
62
34
  let hasChildren = $derived(!!children);
63
35
  let hasContent = $derived(hasChildren || !!resolvedSrc || !!resolvedName);
64
- let classWithIconName = $derived(
65
- !hasChildren && !resolvedSrc && resolvedName
66
- ? `${componentClass} ${resolvedName}`.trim()
67
- : componentClass
68
- );
36
+ let iconClass = $derived(!hasChildren && !resolvedSrc ? resolvedName : undefined);
69
37
 
70
38
  let iconRole = $derived(!decorative && (label || alt) ? 'img' : undefined);
71
39
  let iconAriaLabel = $derived(!decorative ? label || alt || undefined : undefined);
@@ -84,13 +52,13 @@
84
52
  <svelte:element
85
53
  this={is}
86
54
  bind:this={ref}
87
- class={classWithIconName}
88
- style={resolvedStyle}
55
+ class={[attrs.class, iconClass]}
56
+ style={attrs.style}
89
57
  data-size={size}
90
58
  role={iconRole}
91
59
  aria-label={iconAriaLabel}
92
60
  aria-hidden={iconAriaHidden}
93
- {...restProps}
61
+ {...attrs.rest}
94
62
  >
95
63
  {#if hasChildren}
96
64
  {@render children?.()}
@@ -114,62 +82,65 @@
114
82
  </svelte:element>
115
83
  {/if}
116
84
 
117
- <style>
118
- .kit-icon {
119
- --kit-icon-size-xs: 12px;
120
- --kit-icon-size-sm: 14px;
121
- --kit-icon-size-md: 16px;
122
- --kit-icon-size-lg: 18px;
123
- --kit-icon-size-xl: 20px;
85
+ <style>:where(.kit-icon) {
86
+ --kit-icon-size-xs: 0.75rem;
87
+ --kit-icon-size-sm: 0.875rem;
88
+ --kit-icon-size-md: 1rem;
89
+ --kit-icon-size-lg: 1.125rem;
90
+ --kit-icon-size-xl: 1.25rem;
91
+ }
92
+
93
+ .kit-icon {
94
+ display: inline-flex;
95
+ align-items: center;
96
+ justify-content: center;
97
+ color: var(--kit-icon-color, currentColor);
98
+ font-size: var(--kit-icon-current-size, var(--kit-icon-size-md));
99
+ line-height: 1;
100
+ text-indent: 0;
101
+ vertical-align: middle;
102
+ }
103
+ .kit-icon :global(svg),
104
+ .kit-icon img,
105
+ .kit-icon .kit-icon__mask {
106
+ display: block;
107
+ flex-shrink: 0;
108
+ width: var(--kit-icon-current-size, var(--kit-icon-size-md));
109
+ height: var(--kit-icon-current-size, var(--kit-icon-size-md));
110
+ }
111
+ .kit-icon .kit-icon__mask {
112
+ display: inline-block;
113
+ background-color: var(--kit-icon-color, currentColor);
114
+ mask-image: var(--kit-icon-mask-image);
115
+ mask-repeat: no-repeat;
116
+ mask-size: contain;
117
+ mask-position: center;
118
+ -webkit-mask-image: var(--kit-icon-mask-image);
119
+ -webkit-mask-repeat: no-repeat;
120
+ -webkit-mask-size: contain;
121
+ -webkit-mask-position: center;
122
+ }
123
+
124
+ /**
125
+ * size
126
+ * @link https://lapikit.dev/docs/components/icon#size
127
+ */
128
+ :where(.kit-icon[data-size=xs]) {
129
+ --kit-icon-current-size: var(--kit-icon-size-xs);
130
+ }
124
131
 
125
- display: inline-flex;
126
- align-items: center;
127
- justify-content: center;
128
- text-indent: 0;
129
- line-height: 1;
130
- font-size: var(--kit-icon-current-size, var(--kit-icon-size-md));
131
- vertical-align: middle;
132
- }
132
+ :where(.kit-icon[data-size=sm]) {
133
+ --kit-icon-current-size: var(--kit-icon-size-sm);
134
+ }
133
135
 
134
- .kit-icon :global(svg),
135
- .kit-icon img,
136
- .kit-icon .kit-icon__mask {
137
- width: var(--kit-icon-current-size, var(--kit-icon-size-md));
138
- height: var(--kit-icon-current-size, var(--kit-icon-size-md));
139
- flex-shrink: 0;
140
- display: block;
141
- }
136
+ :where(.kit-icon[data-size=md]) {
137
+ --kit-icon-current-size: var(--kit-icon-size-md);
138
+ }
142
139
 
143
- .kit-icon .kit-icon__mask {
144
- display: inline-block;
145
- background-color: var(--kit-icon-color, currentColor);
146
- mask-image: var(--kit-icon-mask-image);
147
- mask-repeat: no-repeat;
148
- mask-size: contain;
149
- mask-position: center;
150
- -webkit-mask-image: var(--kit-icon-mask-image);
151
- -webkit-mask-repeat: no-repeat;
152
- -webkit-mask-size: contain;
153
- -webkit-mask-position: center;
154
- }
140
+ :where(.kit-icon[data-size=lg]) {
141
+ --kit-icon-current-size: var(--kit-icon-size-lg);
142
+ }
155
143
 
156
- /**
157
- * size
158
- * @link https://lapikit.dev/docs/components/icon#size
159
- */
160
- .kit-icon[data-size='xs'] {
161
- --kit-icon-current-size: var(--kit-icon-size-xs);
162
- }
163
- .kit-icon[data-size='sm'] {
164
- --kit-icon-current-size: var(--kit-icon-size-sm);
165
- }
166
- .kit-icon[data-size='md'] {
167
- --kit-icon-current-size: var(--kit-icon-size-md);
168
- }
169
- .kit-icon[data-size='lg'] {
170
- --kit-icon-current-size: var(--kit-icon-size-lg);
171
- }
172
- .kit-icon[data-size='xl'] {
173
- --kit-icon-current-size: var(--kit-icon-size-xl);
174
- }
175
- </style>
144
+ :where(.kit-icon[data-size=xl]) {
145
+ --kit-icon-current-size: var(--kit-icon-size-xl);
146
+ }</style>
@@ -1,6 +1,7 @@
1
1
  import type { Component, SizeType } from '../../@types';
2
2
  export interface IconProps extends Component {
3
3
  ref?: HTMLElement | null;
4
+ is?: 'i' | 'span';
4
5
  name?: string;
5
6
  src?: string;
6
7
  icon?: string;
@@ -10,7 +11,7 @@ export interface IconProps extends Component {
10
11
  decorative?: boolean;
11
12
  loading?: 'eager' | 'lazy';
12
13
  decoding?: 'sync' | 'async' | 'auto';
13
- color?: string;
14
+ color?: string | false;
14
15
  colorMode?: 'auto' | 'none' | 'mask' | 'filter';
15
16
  imgFilter?: string;
16
17
  }
@@ -1,6 +1,7 @@
1
1
  export type { ModelDropdownProps, ModelDropdownHandleProps } from './dropdown/dropdown.types';
2
2
  export type { ModelAccordionItemProps } from './accordion/accordion.types';
3
3
  export type { ModelPopoverProps } from './popover/popover.types';
4
+ export type { FieldControlProps } from './field/field.types';
4
5
  export { default as KitApp } from './app/app.svelte';
5
6
  export { default as KitAppbar } from './appbar/appbar.svelte';
6
7
  export { default as KitBtn } from './btn/btn.svelte';
@@ -16,6 +17,7 @@ export { default as KitAvatar } from './avatar/avatar.svelte';
16
17
  export { default as KitDropdown } from './dropdown/dropdown.svelte';
17
18
  export { default as KitPopover } from './popover/popover.svelte';
18
19
  export { default as KitTooltip } from './tooltip/tooltip.svelte';
20
+ export { default as KitField } from './field/field.svelte';
19
21
  export { default as KitTextfield } from './textfield/textfield.svelte';
20
22
  export { default as KitToolbar } from './toolbar/toolbar.svelte';
21
23
  export { default as KitList } from './list/list.svelte';
@@ -14,6 +14,7 @@ export { default as KitAvatar } from './avatar/avatar.svelte';
14
14
  export { default as KitDropdown } from './dropdown/dropdown.svelte';
15
15
  export { default as KitPopover } from './popover/popover.svelte';
16
16
  export { default as KitTooltip } from './tooltip/tooltip.svelte';
17
+ export { default as KitField } from './field/field.svelte';
17
18
  export { default as KitTextfield } from './textfield/textfield.svelte';
18
19
  export { default as KitToolbar } from './toolbar/toolbar.svelte';
19
20
  export { default as KitList } from './list/list.svelte';
@@ -1,14 +1,13 @@
1
1
  <script lang="ts">
2
- import { makeComponentProps } from '../../html-mapped';
3
- import { useClassName, useStyles } from '../../utils';
2
+ import { useComponentAttrs } from '../../utils';
4
3
  import type { ListProps } from './list.types.js';
5
4
 
6
5
  let {
7
6
  ref = $bindable(),
8
7
  is = 'div',
9
8
  children = undefined,
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,212 +16,212 @@
17
16
  rounded = 'md',
18
17
  nav = false,
19
18
  color,
20
- background,
21
19
  ...rest
22
20
  }: ListProps = $props();
23
21
 
24
- let { classProps, styleProps, restProps } = $derived(
25
- makeComponentProps(rest as Record<string, unknown>)
26
- );
27
-
28
- let componentClass = $derived(
29
- useClassName({
30
- baseClass: 'kit-list',
31
- className: `${className ?? ''}`.trim(),
32
- sClass,
33
- classProps
34
- })
35
- );
36
-
37
- let componentStyle = $derived(
38
- useStyles({
39
- styleAttr,
40
- sStyle,
41
- styleProps
42
- })
43
- );
44
-
45
- let resolvedStyle = $derived(
46
- [
47
- componentStyle,
48
- color ? `--kit-list-item-fg:${color && `var(--kit-color-${color})`}` : '',
49
- background ? `--kit-list-item-bg:${background && `var(--kit-color-${background})`}` : ''
50
- ]
51
- .filter(Boolean)
52
- .join('; ')
22
+ let attrs = $derived(
23
+ useComponentAttrs('kit-list', { className, sClass, styleAttr, sStyle, color }, rest)
53
24
  );
54
25
  </script>
55
26
 
56
27
  <svelte:element
57
28
  this={is}
58
29
  bind:this={ref}
59
- class={componentClass}
60
- style={resolvedStyle}
30
+ class={attrs.class}
31
+ style={attrs.style}
61
32
  data-size={size}
62
33
  data-variant={variant}
63
34
  data-density={density}
64
35
  data-rounded={rounded}
65
36
  data-nav={nav}
66
37
  role={nav ? 'navigation' : is === 'ul' ? undefined : 'list'}
67
- {...restProps}
38
+ {...attrs.rest}
68
39
  >
69
40
  {@render children?.()}
70
41
  </svelte:element>
71
42
 
72
- <style>
73
- .kit-list {
74
- width: 100%;
75
- display: flex;
76
- position: relative;
77
- flex-direction: column;
78
- gap: 0;
79
- border: 0;
80
- box-sizing: border-box;
81
- transition:
82
- background 140ms ease,
83
- color 140ms ease,
84
- box-shadow 140ms ease,
85
- translate 140ms ease;
86
- }
87
-
88
- .kit-list[data-variant='text']
89
- :global(.kit-list-item[data-interactive='true'][data-active='true'][data-disabled='false']),
90
- .kit-list[data-variant='text']
91
- :global(.kit-list-item[data-interactive='true'][data-disabled='false']:active) {
92
- background: var(--kit-list-item-active-bg);
93
- }
94
-
95
- /**
96
- * density
97
- * @link https://lapikit.dev/docs/components/list#density
98
- */
99
- .kit-list[data-density='compact'] {
100
- --kit-list-density-offset: var(--kit-space-compact);
101
- }
102
- .kit-list[data-density='default'] {
103
- --kit-list-density-offset: var(--kit-space-default);
104
- }
105
- .kit-list[data-density='comfortable'] {
106
- --kit-list-density-offset: var(--kit-space-comfortable);
107
- }
108
-
109
- /**
110
- * rounded
111
- * @link ...
112
- */
113
- .kit-list[data-rounded='0'] :global(.kit-list-item) {
114
- --kit-list-item-radius: var(--kit-shape-none);
115
- }
116
- .kit-list[data-rounded='xs'] :global(.kit-list-item) {
117
- --kit-list-item-radius: var(--kit-shape-xs);
118
- }
119
- .kit-list[data-rounded='sm'] :global(.kit-list-item) {
120
- --kit-list-item-radius: var(--kit-shape-sm);
121
- }
122
- .kit-list[data-rounded='md'] :global(.kit-list-item) {
123
- --kit-list-item-radius: var(--kit-shape-md);
124
- }
125
- .kit-list[data-rounded='lg'] :global(.kit-list-item) {
126
- --kit-list-item-radius: var(--kit-shape-lg);
127
- }
128
- .kit-list[data-rounded='xl'] :global(.kit-list-item) {
129
- --kit-list-item-radius: var(--kit-shape-xl);
130
- }
131
- .kit-list[data-rounded='full'] :global(.kit-list-item) {
132
- --kit-list-item-radius: var(--kit-shape-full);
133
- }
134
-
135
- /**
136
- * variant
137
- * @link https://lapikit.dev/docs/components/list#variants
138
- */
139
- .kit-list[data-variant='filled'] {
140
- --kit-list-item-bg: var(--kit-color-surface-2);
141
- --kit-list-item-fg: var(--kit-color-text);
142
-
143
- --kit-list-item-hover-bg: color-mix(in oklab, var(---kit-list-item-bg), black 10%);
144
- --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-bg), black 16%);
145
- }
146
- .kit-list[data-variant='outline'] {
147
- --kit-list-item-bg: transparent;
148
- --kit-list-item-fg: var(--kit-color-text);
149
- --kit-list-item-bd: var(--kit-list-item-fg);
150
-
151
- --kit-list-item-hover-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 80%);
152
- --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 92%);
153
- }
154
- .kit-list[data-variant='text'] {
155
- --kit-list-item-bg: transparent;
156
- --kit-list-item-fg: var(--kit-color-text);
157
-
158
- --kit-list-item-hover-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 80%);
159
- --kit-list-item-active-bg: color-mix(in oklab, var(--kit-list-item-fg), transparent 92%);
160
- }
161
- .kit-list[data-variant='outline'] :global(.kit-list-item::before) {
162
- content: '';
163
- position: absolute;
164
- inset: 0;
165
- border: 1px solid var(--kit-list-item-bd);
166
- border-radius: inherit;
167
- box-sizing: border-box;
168
- z-index: 1;
169
- pointer-events: none;
170
- }
171
-
172
- /**
173
- * nav
174
- * @link https://lapikit.dev/docs/components/list#nav
175
- */
176
- .kit-list[data-nav='true'] {
177
- padding: calc(var(--kit-space-default) + var(--kit-list-density-offset) / 2);
178
- }
179
- .kit-list[data-nav='true'] :global(.kit-list-item) {
180
- border-radius: var(--kit-list-item-radius);
181
- }
182
- .kit-list:not([data-nav='true']) :global(.kit-list-item:first-child) {
183
- border-top-left-radius: var(--kit-list-item-radius);
184
- border-top-right-radius: var(--kit-list-item-radius);
185
- }
186
- .kit-list:not([data-nav='true']) :global(.kit-list-item:last-child) {
187
- border-bottom-left-radius: var(--kit-list-item-radius);
188
- border-bottom-right-radius: var(--kit-list-item-radius);
189
- }
190
- .kit-list:not([data-nav='true']) :global(.kit-list-item:not(:first-child):not(:last-child)) {
191
- --kit-list-item-radius: 0;
192
- }
193
-
194
- /**
195
- * size
196
- * @link nothing...
197
- */
198
- .kit-list[data-size='xs'] :global(.kit-list-item) {
199
- --kit-list-item-h: 28px;
200
- --kit-list-item-p: 12px;
201
- --kit-list-item-gap: var(--kit-space-compact);
202
- --kit-list-item-font: var(--kit-font-xs);
203
- }
204
- .kit-list[data-size='sm'] :global(.kit-list-item) {
205
- --kit-list-item-h: 36px;
206
- --kit-list-item-p: 14px;
207
- --kit-list-item-gap: var(--kit-space-default);
208
- --kit-list-item-font: var(--kit-font-sm);
209
- }
210
- .kit-list[data-size='md'] :global(.kit-list-item) {
211
- --kit-list-item-h: 44px;
212
- --kit-list-item-p: 16px;
213
- --kit-list-item-gap: var(--kit-space-default);
214
- --kit-list-item-font: var(--kit-font-md);
215
- }
216
- .kit-list[data-size='lg'] :global(.kit-list-item) {
217
- --kit-list-item-h: 52px;
218
- --kit-list-item-p: 20px;
219
- --kit-list-item-gap: var(--kit-space-default);
220
- --kit-list-item-font: var(--kit-font-lg);
221
- }
222
- .kit-list[data-size='xl'] :global(.kit-list-item) {
223
- --kit-list-item-h: 60px;
224
- --kit-list-item-p: 24px;
225
- --kit-list-item-gap: var(--kit-space-comfortable);
226
- --kit-list-item-font: var(--kit-font-xl);
227
- }
228
- </style>
43
+ <style>:where(.kit-list) {
44
+ --kit-list-color: initial;
45
+ --kit-list-on-color: initial;
46
+ --kit-list-item-radius: var(--kit-list-radius);
47
+ }
48
+
49
+ .kit-list {
50
+ position: relative;
51
+ display: flex;
52
+ flex-direction: column;
53
+ gap: 0;
54
+ box-sizing: border-box;
55
+ width: 100%;
56
+ border: 0;
57
+ }
58
+ .kit-list[data-nav=true] {
59
+ padding: calc(var(--kit-space-default) + var(--kit-list-density-offset) / 2);
60
+ }
61
+ .kit-list[data-nav=true] :global(.kit-list-item) {
62
+ border-radius: var(--kit-list-item-radius);
63
+ }
64
+ .kit-list:not([data-nav=true]) :global(.kit-list-item:first-child) {
65
+ border-start-start-radius: var(--kit-list-item-radius);
66
+ border-start-end-radius: var(--kit-list-item-radius);
67
+ }
68
+ .kit-list:not([data-nav=true]) :global(.kit-list-item:last-child) {
69
+ border-end-start-radius: var(--kit-list-item-radius);
70
+ border-end-end-radius: var(--kit-list-item-radius);
71
+ }
72
+ .kit-list:not([data-nav=true]) :global(.kit-list-item:not(:first-child, :last-child)) {
73
+ --kit-list-item-radius: 0;
74
+ }
75
+ .kit-list:is([data-variant=outline], [data-variant=surface]) :global(.kit-list-item::before) {
76
+ content: "";
77
+ position: absolute;
78
+ inset: 0;
79
+ z-index: 1;
80
+ box-sizing: border-box;
81
+ border: var(--kit-outline-weight) solid var(--kit-list-item-border);
82
+ border-radius: inherit;
83
+ pointer-events: none;
84
+ }
85
+
86
+ /**
87
+ * size: read by the items
88
+ * @link https://lapikit.dev/docs/components/list#size
89
+ */
90
+ :where(.kit-list[data-size=xs]) {
91
+ --kit-list-item-h: 1.875rem;
92
+ --kit-list-item-p: 0.875rem;
93
+ --kit-list-item-gap: 0.25rem;
94
+ --kit-list-item-font: var(--kit-font-xs);
95
+ }
96
+
97
+ :where(.kit-list[data-size=sm]) {
98
+ --kit-list-item-h: 2.375rem;
99
+ --kit-list-item-p: 1rem;
100
+ --kit-list-item-gap: 0.375rem;
101
+ --kit-list-item-font: var(--kit-font-sm);
102
+ }
103
+
104
+ :where(.kit-list[data-size=md]) {
105
+ --kit-list-item-h: 2.875rem;
106
+ --kit-list-item-p: 1.125rem;
107
+ --kit-list-item-gap: 0.5rem;
108
+ --kit-list-item-font: var(--kit-font-md);
109
+ }
110
+
111
+ :where(.kit-list[data-size=lg]) {
112
+ --kit-list-item-h: 3.375rem;
113
+ --kit-list-item-p: 1.375rem;
114
+ --kit-list-item-gap: 0.5rem;
115
+ --kit-list-item-font: var(--kit-font-lg);
116
+ }
117
+
118
+ :where(.kit-list[data-size=xl]) {
119
+ --kit-list-item-h: 3.875rem;
120
+ --kit-list-item-p: 1.625rem;
121
+ --kit-list-item-gap: 0.625rem;
122
+ --kit-list-item-font: var(--kit-font-xl);
123
+ }
124
+
125
+ /**
126
+ * variant: applied on the items, (0,1,0) to win over the base of the item whatever the order of the styles
127
+ * @link https://lapikit.dev/docs/components/list#variants
128
+ */
129
+ :where(.kit-list[data-variant=tonal]) :global(.kit-list-item) {
130
+ --kit-list-item-bg: color-mix(in oklab, var(--kit-list-item-ink) 16%, transparent);
131
+ --kit-list-item-fg: var(--kit-list-item-ink);
132
+ --kit-list-item-border: transparent;
133
+ --kit-list-item-active: color-mix(in oklab, var(--kit-list-item-ink) 28%, transparent);
134
+ --kit-list-item-active-fg: var(--kit-list-item-ink);
135
+ }
136
+
137
+ :where(.kit-list[data-variant=outline]) :global(.kit-list-item) {
138
+ --kit-list-item-bg: transparent;
139
+ --kit-list-item-fg: var(--kit-list-item-ink);
140
+ --kit-list-item-border: var(--kit-list-item-color, var(--kit-color-border));
141
+ --kit-list-item-active: color-mix(in oklab, var(--kit-list-item-ink) 14%, transparent);
142
+ --kit-list-item-active-fg: var(--kit-list-item-ink);
143
+ }
144
+
145
+ :where(.kit-list[data-variant=surface]) :global(.kit-list-item) {
146
+ --kit-list-item-bg: color-mix(in oklab, var(--kit-list-item-ink) 8%, transparent);
147
+ --kit-list-item-fg: var(--kit-list-item-ink);
148
+ --kit-list-item-border: color-mix(in oklab, var(--kit-list-item-ink) 35%, transparent);
149
+ --kit-list-item-active: color-mix(in oklab, var(--kit-list-item-ink) 18%, transparent);
150
+ --kit-list-item-active-fg: var(--kit-list-item-ink);
151
+ }
152
+
153
+ :where(.kit-list[data-variant=text]) :global(.kit-list-item) {
154
+ --kit-list-item-bg: transparent;
155
+ --kit-list-item-fg: var(--kit-list-item-ink);
156
+ --kit-list-item-border: transparent;
157
+ --kit-list-item-active: color-mix(in oklab, var(--kit-list-item-ink) 14%, transparent);
158
+ --kit-list-item-active-fg: var(--kit-list-item-ink);
159
+ }
160
+
161
+ :where(.kit-list[data-variant=plain]) :global(.kit-list-item) {
162
+ --kit-list-item-bg: transparent;
163
+ --kit-list-item-fg: var(--kit-list-item-ink);
164
+ --kit-list-item-border: transparent;
165
+ --kit-list-item-hover: transparent;
166
+ --kit-list-item-pressed: transparent;
167
+ --kit-list-item-hover-fg: color-mix(in oklab, var(--kit-list-item-fg) 72%, transparent);
168
+ --kit-list-item-pressed-fg: color-mix(in oklab, var(--kit-list-item-fg) 56%, transparent);
169
+ --kit-list-item-active: transparent;
170
+ --kit-list-item-active-fg: var(--kit-list-item-color, var(--kit-color-accent));
171
+ }
172
+
173
+ /**
174
+ * rounded
175
+ * @link https://lapikit.dev/docs/customize
176
+ */
177
+ :where(.kit-list[data-rounded="0"]) {
178
+ --kit-list-radius: var(--kit-shape-none);
179
+ }
180
+
181
+ :where(.kit-list[data-rounded=xs]) {
182
+ --kit-list-radius: var(--kit-shape-xs);
183
+ }
184
+
185
+ :where(.kit-list[data-rounded=sm]) {
186
+ --kit-list-radius: var(--kit-shape-sm);
187
+ }
188
+
189
+ :where(.kit-list[data-rounded=md]) {
190
+ --kit-list-radius: var(--kit-shape-md);
191
+ }
192
+
193
+ :where(.kit-list[data-rounded=lg]) {
194
+ --kit-list-radius: var(--kit-shape-lg);
195
+ }
196
+
197
+ :where(.kit-list[data-rounded=xl]) {
198
+ --kit-list-radius: var(--kit-shape-xl);
199
+ }
200
+
201
+ :where(.kit-list[data-rounded=full]) {
202
+ --kit-list-radius: var(--kit-shape-full);
203
+ }
204
+
205
+ /**
206
+ * density
207
+ * @link https://lapikit.dev/docs/components/list#density
208
+ */
209
+ :where(.kit-list[data-density=dense]) {
210
+ --kit-list-density-offset: var(--kit-density-dense);
211
+ }
212
+
213
+ :where(.kit-list[data-density=compact]) {
214
+ --kit-list-density-offset: var(--kit-density-compact);
215
+ }
216
+
217
+ :where(.kit-list[data-density=default]) {
218
+ --kit-list-density-offset: var(--kit-density-default);
219
+ }
220
+
221
+ :where(.kit-list[data-density=comfortable]) {
222
+ --kit-list-density-offset: var(--kit-density-comfortable);
223
+ }
224
+
225
+ :where(.kit-list[data-density=spacious]) {
226
+ --kit-list-density-offset: var(--kit-density-spacious);
227
+ }</style>