lapikit 0.6.3 → 0.6.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 (38) hide show
  1. package/dist/components/accordion/accordion.svelte +173 -35
  2. package/dist/components/accordion/accordion.types.d.ts +8 -3
  3. package/dist/components/accordion/modules/accordion-item.svelte +79 -74
  4. package/dist/components/alert/alert.svelte +204 -115
  5. package/dist/components/alert/alert.types.d.ts +8 -6
  6. package/dist/components/app/app.svelte +76 -37
  7. package/dist/components/appbar/appbar.svelte +116 -59
  8. package/dist/components/appbar/appbar.types.d.ts +5 -4
  9. package/dist/components/aspect-ratio/aspect-ratio.svelte +4 -13
  10. package/dist/components/aspect-ratio/aspect-ratio.types.d.ts +2 -1
  11. package/dist/components/avatar/avatar.svelte +117 -67
  12. package/dist/components/avatar/avatar.types.d.ts +7 -5
  13. package/dist/components/btn/btn.svelte +175 -171
  14. package/dist/components/btn/btn.types.d.ts +5 -2
  15. package/dist/components/card/card.svelte +11 -3
  16. package/dist/components/card/modules/card-actions.svelte +1 -1
  17. package/dist/components/chip/chip.svelte +172 -142
  18. package/dist/components/chip/chip.types.d.ts +7 -3
  19. package/dist/components/dialog/dialog.svelte +94 -83
  20. package/dist/components/dialog/dialog.types.d.ts +7 -5
  21. package/dist/components/dropdown/dropdown.svelte +47 -31
  22. package/dist/components/dropdown/dropdown.types.d.ts +4 -2
  23. package/dist/components/icon/icon.svelte +34 -51
  24. package/dist/components/list/list.svelte +10 -4
  25. package/dist/components/list/modules/list-item.svelte +10 -59
  26. package/dist/components/modal/modal.svelte +114 -102
  27. package/dist/components/modal/modal.types.d.ts +7 -5
  28. package/dist/components/popover/popover.svelte +54 -36
  29. package/dist/components/popover/popover.types.d.ts +4 -2
  30. package/dist/components/separator/separator.svelte +15 -23
  31. package/dist/components/separator/separator.types.d.ts +1 -2
  32. package/dist/components/textfield/textfield.svelte +181 -152
  33. package/dist/components/textfield/textfield.types.d.ts +4 -3
  34. package/dist/components/toolbar/toolbar.svelte +127 -103
  35. package/dist/components/toolbar/toolbar.types.d.ts +6 -7
  36. package/dist/components/tooltip/tooltip.svelte +40 -40
  37. package/dist/components/tooltip/tooltip.types.d.ts +3 -3
  38. package/package.json +1 -1
@@ -49,14 +49,22 @@
49
49
  })
50
50
  );
51
51
 
52
- let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
52
+ let resolvedStyle = $derived(
53
+ [
54
+ componentStyle,
55
+ color ? `--kit-list-item-fg:${color && `var(--kit-color-${color})`}` : '',
56
+ background ? `--kit-list-item-bg:${background && `var(--kit-color-${background})`}` : ''
57
+ ]
58
+ .filter(Boolean)
59
+ .join('; ')
60
+ );
53
61
  </script>
54
62
 
55
63
  <svelte:element
56
64
  this={tag}
57
65
  bind:this={ref}
58
66
  class={componentClass}
59
- style={mergedStyle}
67
+ style={resolvedStyle}
60
68
  href={href && !disabled ? href : undefined}
61
69
  data-active={active}
62
70
  data-disabled={disabled}
@@ -67,8 +75,6 @@
67
75
  data-append={append && true}
68
76
  data-prepend={prepend && true}
69
77
  data-interactive={isInteractive}
70
- style:--kit-list-item-fg={color && `var(--kit-color-${color})`}
71
- style:--kit-list-item-bg={background && `var(--kit-color-${background})`}
72
78
  use:ripple={{
73
79
  component: 'list-item',
74
80
  disabled: noRipple || !isInteractive
@@ -214,59 +220,4 @@
214
220
  .kit-list-item[data-rounded='full'] {
215
221
  --kit-list-item-radius: var(--kit-shape-full);
216
222
  }
217
-
218
- /* :global(.kit-list[data-variant='filled']) .kit-list-item {
219
- background: var(--kit-list-item-bg, transparent);
220
- }
221
-
222
- :global(.kit-list[data-variant='filled']) .kit-list-item[data-active='true'] {
223
- background: color-mix(in oklab, currentColor 12%, transparent);
224
- } */
225
-
226
- /* :global(.kit-list[data-variant='outline']) .kit-list-item::before {
227
- content: '';
228
- position: absolute;
229
- inset: 0;
230
- border: 1px solid color-mix(in oklab, currentColor 16%, transparent);
231
- border-radius: inherit;
232
- pointer-events: none;
233
- } */
234
-
235
- /* .kit-list-item[data-active='true'] {
236
- background: color-mix(in oklab, currentColor 12%, transparent);
237
- }
238
-
239
- .kit-list-item[data-disabled='true'] {
240
- opacity: 0.45;
241
- pointer-events: none;
242
- }
243
-
244
- .kit-list-item:is(button, a) {
245
- cursor: pointer;
246
- }
247
-
248
- .kit-list-item__prepend,
249
- .kit-list-item__append,
250
- .kit-list-item__content {
251
- display: inline-flex;
252
- align-items: center;
253
- min-width: 0;
254
- }
255
-
256
- .kit-list-item__content {
257
- overflow: hidden;
258
- text-overflow: ellipsis;
259
- white-space: nowrap;
260
- }
261
-
262
- .kit-list-item:is(button, a):hover::after,
263
- .kit-list-item:is(button, a):focus-visible::after {
264
- content: '';
265
- position: absolute;
266
- inset: 0;
267
- border-radius: inherit;
268
- background: currentColor;
269
- opacity: 0.06;
270
- pointer-events: none;
271
- } */
272
223
  </style>
@@ -2,30 +2,9 @@
2
2
  import { onDestroy } from 'svelte';
3
3
  import { get } from 'svelte/store';
4
4
  import { makeComponentProps } from '../../html-mapped';
5
- import { useClassName, useStyles } from '../../utils';
5
+ import { useClassName, useElevation, useStyles } from '../../utils';
6
6
  import { modalOpen, modalStack, popModal, pushModal, setOpenModal } from './modal.js';
7
- import type { ModalDensity, ModalPosition, ModalProps, ModalSize } from './modal.types.js';
8
-
9
- function resolveSize(value: ModalSize | undefined): ModalSize {
10
- return value === 'xs' ||
11
- value === 'sm' ||
12
- value === 'md' ||
13
- value === 'lg' ||
14
- value === 'xl' ||
15
- value === 'full'
16
- ? value
17
- : 'md';
18
- }
19
-
20
- function resolvePosition(value: ModalPosition | undefined): ModalPosition {
21
- return value === 'top' || value === 'center' || value === 'bottom' ? value : 'center';
22
- }
23
-
24
- function resolveDensity(value: ModalDensity | undefined): ModalDensity {
25
- return value === 'compact' || value === 'comfortable' || value === 'default'
26
- ? value
27
- : 'default';
28
- }
7
+ import type { ModalProps } from './modal.types.js';
29
8
 
30
9
  const modalId = crypto.randomUUID();
31
10
  let wasPushed = $state(false);
@@ -45,9 +24,11 @@
45
24
  rounded = 'md',
46
25
  density = 'default',
47
26
  classContent = '',
48
- color = undefined,
49
- background = undefined,
27
+ color,
28
+ background,
50
29
  closeWithEsc = true,
30
+ space,
31
+ elevation = '2',
51
32
  ...rest
52
33
  }: ModalProps = $props();
53
34
 
@@ -55,6 +36,8 @@
55
36
  makeComponentProps(rest as Record<string, unknown>)
56
37
  );
57
38
 
39
+ let elevationState = $derived(useElevation(elevation));
40
+
58
41
  let componentClass = $derived(
59
42
  useClassName({
60
43
  baseClass: 'kit-modal',
@@ -78,19 +61,6 @@
78
61
  : `${classContent ?? ''}`.trim()
79
62
  );
80
63
 
81
- let safeSize = $derived(resolveSize(size));
82
- let safePosition = $derived(resolvePosition(position));
83
- let safeDensity = $derived(resolveDensity(density));
84
- let mergedStyle = $derived(
85
- [
86
- componentStyle,
87
- color ? `--kit-modal-fg:${color}` : '',
88
- background ? `--kit-modal-bg:${background}` : ''
89
- ]
90
- .filter(Boolean)
91
- .join('; ')
92
- );
93
-
94
64
  $effect(() => {
95
65
  if (open && !wasPushed) {
96
66
  pushModal(modalId);
@@ -139,29 +109,42 @@
139
109
  function handleClose() {
140
110
  if (!persistent) open = false;
141
111
  }
112
+
113
+ let resolvedStyle = $derived(
114
+ [
115
+ componentStyle,
116
+ color ? `--kit-modal-fg:${color && `var(--kit-color-${color})`}` : '',
117
+ background ? `--kit-modal-bg:${background && `var(--kit-color-${background})`}` : '',
118
+ space ? `--kit-modal-space:${space}` : ''
119
+ ]
120
+ .filter(Boolean)
121
+ .join('; ')
122
+ );
142
123
  </script>
143
124
 
144
125
  {#if open}
145
126
  <div
146
127
  bind:this={ref}
147
128
  class={componentClass}
148
- style={mergedStyle}
129
+ style={resolvedStyle}
149
130
  role="dialog"
150
131
  aria-modal={!contain}
151
132
  data-contain={contain}
152
133
  >
153
134
  {#if contain}
154
- <!-- svelte-ignore a11y_click_events_have_key_events -->
155
- <div class="kit-modal__overlay" onclick={handleClose}></div>
135
+ <div class="kit-modal__overlay" role="presentation" onclick={handleClose}></div>
156
136
  {/if}
157
137
 
158
138
  <div
159
139
  {...restProps}
160
140
  class={['kit-modal__content', contentClass]}
161
- data-size={safeSize}
162
- data-position={safePosition}
163
- data-density={safeDensity}
141
+ data-size={size}
142
+ data-position={position}
143
+ data-density={density}
164
144
  data-rounded={rounded}
145
+ data-elevation={elevationState.base}
146
+ data-elevation-hover={elevationState.hover}
147
+ data-elevation-active={elevationState.active}
165
148
  onclick={(event: MouseEvent) => event.stopPropagation()}
166
149
  >
167
150
  {@render children?.()}
@@ -171,16 +154,7 @@
171
154
 
172
155
  <style>
173
156
  .kit-modal {
174
- --kit-modal-bg: var(--kit-surface-1);
175
- --kit-modal-fg: var(--kit-fg);
176
- --kit-modal-bd: var(--kit-border);
177
- --kit-modal-radius: 12px;
178
- --kit-modal-px: 1rem;
179
- --kit-modal-py: 1rem;
180
157
  --kit-modal-max: min(32rem, calc(100vw - 2rem));
181
- --kit-modal-top: 50%;
182
- --kit-modal-bottom: auto;
183
- --kit-modal-translate-y: -50%;
184
158
 
185
159
  position: fixed;
186
160
  inset: 0;
@@ -195,29 +169,30 @@
195
169
  .kit-modal__overlay {
196
170
  position: absolute;
197
171
  inset: 0;
198
- background: rgb(15 23 42 / 0.42);
172
+ background: color-mix(in oklab, var(--kit-color-shadow), transparent 70%);
199
173
  backdrop-filter: blur(2px);
200
174
  pointer-events: auto;
201
175
  }
202
176
 
203
177
  .kit-modal__content {
178
+ --kit-modal-bg: var(--kit-color-surface-1);
179
+ --kit-modal-fg: var(--kit-color-text);
180
+
204
181
  position: fixed;
205
- left: 50%;
182
+ left: var(--kit-modal-left);
183
+ right: var(--kit-modal-right);
206
184
  top: var(--kit-modal-top);
207
185
  bottom: var(--kit-modal-bottom);
208
- translate: -50% var(--kit-modal-translate-y);
186
+ translate: var(--kit-modal-translate-x) var(--kit-modal-translate-y);
209
187
  box-sizing: border-box;
210
188
  width: min(calc(100vw - 2rem), var(--kit-modal-max));
211
189
  max-height: calc(100dvh - 2rem);
212
190
  overflow: auto;
213
- padding: var(--kit-modal-py) var(--kit-modal-px);
214
- border: 1px solid var(--kit-modal-bd);
191
+ padding: calc(var(--kit-modal-px) * var(--kit-modal-density-scale));
192
+ border: 0;
215
193
  border-radius: var(--kit-modal-radius);
216
194
  background: var(--kit-modal-bg);
217
195
  color: var(--kit-modal-fg);
218
- box-shadow:
219
- 0 20px 50px rgb(15 23 42 / 0.18),
220
- 0 4px 16px rgb(15 23 42 / 0.1);
221
196
  pointer-events: auto;
222
197
  }
223
198
 
@@ -225,24 +200,33 @@
225
200
  position: absolute;
226
201
  }
227
202
 
203
+ /**
204
+ * size
205
+ * @link nothing...
206
+ */
228
207
  .kit-modal__content[data-size='xs'] {
229
- --kit-modal-max: min(20rem, calc(100vw - 2rem));
208
+ --kit-modal-max: 20rem;
209
+ --kit-modal-px: 10px;
230
210
  }
231
211
 
232
212
  .kit-modal__content[data-size='sm'] {
233
- --kit-modal-max: min(24rem, calc(100vw - 2rem));
213
+ --kit-modal-max: 24rem;
214
+ --kit-modal-px: 12px;
234
215
  }
235
216
 
236
217
  .kit-modal__content[data-size='md'] {
237
- --kit-modal-max: min(32rem, calc(100vw - 2rem));
218
+ --kit-modal-max: 32rem;
219
+ --kit-modal-px: 16px;
238
220
  }
239
221
 
240
222
  .kit-modal__content[data-size='lg'] {
241
- --kit-modal-max: min(42rem, calc(100vw - 2rem));
223
+ --kit-modal-max: 42rem;
224
+ --kit-modal-px: 20px;
242
225
  }
243
226
 
244
227
  .kit-modal__content[data-size='xl'] {
245
- --kit-modal-max: min(56rem, calc(100vw - 2rem));
228
+ --kit-modal-max: 56rem;
229
+ --kit-modal-px: 24px;
246
230
  }
247
231
 
248
232
  .kit-modal__content[data-size='full'] {
@@ -258,60 +242,88 @@
258
242
  border-bottom-right-radius: 0;
259
243
  }
260
244
 
261
- .kit-modal__content[data-position='top'] {
262
- --kit-modal-top: 1rem;
263
- --kit-modal-bottom: auto;
264
- --kit-modal-translate-y: 0;
265
- }
266
-
267
- .kit-modal__content[data-position='center'] {
268
- --kit-modal-top: 50%;
269
- --kit-modal-bottom: auto;
270
- --kit-modal-translate-y: -50%;
271
- }
272
-
273
- .kit-modal__content[data-position='bottom'] {
274
- --kit-modal-top: auto;
275
- --kit-modal-bottom: 1rem;
276
- --kit-modal-translate-y: 0;
245
+ /**
246
+ * density
247
+ * @link no links
248
+ */
249
+ .kit-modal__content[data-density='none'] {
250
+ --kit-modal-density-scale: 0;
277
251
  }
278
-
279
252
  .kit-modal__content[data-density='compact'] {
280
- --kit-modal-px: 0.75rem;
281
- --kit-modal-py: 0.75rem;
253
+ --kit-modal-density-scale: 0.9;
282
254
  }
283
-
284
255
  .kit-modal__content[data-density='default'] {
285
- --kit-modal-px: 1rem;
286
- --kit-modal-py: 1rem;
256
+ --kit-modal-density-scale: 1;
287
257
  }
288
-
289
258
  .kit-modal__content[data-density='comfortable'] {
290
- --kit-modal-px: 1.25rem;
291
- --kit-modal-py: 1.25rem;
259
+ --kit-modal-density-scale: 1.1;
292
260
  }
293
261
 
262
+ /**
263
+ * rounded
264
+ * @link ...
265
+ */
294
266
  .kit-modal__content[data-rounded='0'] {
295
- --kit-modal-radius: 0;
267
+ --kit-modal-radius: var(--kit-shape-none);
296
268
  }
297
-
298
269
  .kit-modal__content[data-rounded='xs'] {
299
- --kit-modal-radius: 2px;
270
+ --kit-modal-radius: var(--kit-shape-xs);
300
271
  }
301
-
302
272
  .kit-modal__content[data-rounded='sm'] {
303
- --kit-modal-radius: 6px;
273
+ --kit-modal-radius: var(--kit-shape-sm);
304
274
  }
305
-
306
275
  .kit-modal__content[data-rounded='md'] {
307
- --kit-modal-radius: 12px;
276
+ --kit-modal-radius: var(--kit-shape-md);
308
277
  }
309
-
310
278
  .kit-modal__content[data-rounded='lg'] {
311
- --kit-modal-radius: 18px;
279
+ --kit-modal-radius: var(--kit-shape-lg);
312
280
  }
313
-
314
281
  .kit-modal__content[data-rounded='xl'] {
315
- --kit-modal-radius: 9999px;
282
+ --kit-modal-radius: var(--kit-shape-xl);
283
+ }
284
+
285
+ /**
286
+ * position
287
+ * @link nothing...
288
+ */
289
+
290
+ .kit-modal__content[data-position='top'],
291
+ .kit-modal__content[data-position='center'],
292
+ .kit-modal__content[data-position='bottom'] {
293
+ --kit-modal-translate-x: -50%;
294
+ --kit-modal-left: 50%;
295
+ }
296
+ .kit-modal__content[data-position='top'],
297
+ .kit-modal__content[data-position='top-left'],
298
+ .kit-modal__content[data-position='top-right'] {
299
+ --kit-modal-top: var(--kit-modal-space, 1rem);
300
+ --kit-modal-bottom: auto;
301
+ --kit-modal-translate-y: 0;
302
+ }
303
+ .kit-modal__content[data-position='center'],
304
+ .kit-modal__content[data-position='center-left'],
305
+ .kit-modal__content[data-position='center-right'] {
306
+ --kit-modal-top: 50%;
307
+ --kit-modal-bottom: auto;
308
+ --kit-modal-translate-y: -50%;
309
+ }
310
+
311
+ .kit-modal__content[data-position='bottom'],
312
+ .kit-modal__content[data-position='bottom-left'],
313
+ .kit-modal__content[data-position='bottom-right'] {
314
+ --kit-modal-top: auto;
315
+ --kit-modal-bottom: var(--kit-modal-space, 1rem);
316
+ --kit-modal-translate-y: 0;
317
+ }
318
+ .kit-modal__content[data-position='top-left'],
319
+ .kit-modal__content[data-position='center-left'],
320
+ .kit-modal__content[data-position='bottom-left'] {
321
+ --kit-modal-left: var(--kit-modal-space, 1rem);
322
+ --kit-modal-translate-x: 0;
323
+ }
324
+ .kit-modal__content[data-position='top-right'],
325
+ .kit-modal__content[data-position='center-right'],
326
+ .kit-modal__content[data-position='bottom-right'] {
327
+ --kit-modal-right: var(--kit-modal-space, 1rem);
316
328
  }
317
329
  </style>
@@ -1,7 +1,6 @@
1
- import type { Component, RoundedType } from '../../@types';
2
- export type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3
- export type ModalPosition = 'top' | 'center' | 'bottom';
4
- export type ModalDensity = 'compact' | 'comfortable' | 'default';
1
+ import type { Component, DensityType, ElevationProps, RoundedType } from '../../@types';
2
+ type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3
+ type ModalPosition = 'top' | 'center' | 'bottom' | 'top-left' | 'top-right' | 'center-left' | 'center-right' | 'bottom-left' | 'bottom-right';
5
4
  export interface ModalProps extends Component {
6
5
  ref?: HTMLDivElement | null;
7
6
  open?: boolean;
@@ -10,9 +9,12 @@ export interface ModalProps extends Component {
10
9
  persistent?: boolean;
11
10
  position?: ModalPosition;
12
11
  rounded?: RoundedType;
13
- density?: ModalDensity;
12
+ density?: DensityType;
14
13
  classContent?: string | string[] | undefined;
15
14
  color?: string;
16
15
  background?: string;
17
16
  closeWithEsc?: boolean;
17
+ space?: string;
18
+ elevation?: ElevationProps;
18
19
  }
20
+ export {};
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { useClassName, useStyles, clickOutside } from '../../utils';
2
+ import { useClassName, useStyles, clickOutside, useElevation } from '../../utils';
3
3
  import { makeComponentProps } from '../../html-mapped';
4
4
  import { getPositions } from './popover.svelte.js';
5
5
  import type { ModelPopoverProps, PopoverProps } from './popover.types.js';
@@ -9,7 +9,7 @@
9
9
  open = $bindable(false),
10
10
  children,
11
11
  activator,
12
- rounded,
12
+ rounded = 'md',
13
13
  position = 'bottom',
14
14
  color,
15
15
  background,
@@ -17,19 +17,17 @@
17
17
  style: styleAttr = '',
18
18
  's-class': sClass,
19
19
  's-style': sStyle,
20
+ elevation = '2',
21
+ density = 'default',
20
22
  ...rest
21
23
  }: PopoverProps = $props();
22
24
 
23
- let safePosition = $derived(
24
- position === 'top' || position === 'bottom' || position === 'left' || position === 'right'
25
- ? position
26
- : 'bottom'
27
- );
28
-
29
25
  let { classProps, styleProps, restProps } = $derived(
30
26
  makeComponentProps(rest as Record<string, unknown>)
31
27
  );
32
28
 
29
+ let elevationState = $derived(useElevation(elevation));
30
+
33
31
  let componentClass = $derived(
34
32
  useClassName({
35
33
  baseClass: 'kit-popover-content',
@@ -47,17 +45,6 @@
47
45
  })
48
46
  );
49
47
 
50
- let mergedStyle = $derived(
51
- [
52
- componentStyle,
53
- background ? `--kit-popover-bg:${background}` : '',
54
- color ? `--kit-popover-fg:${color}` : '',
55
- typeof rounded === 'string' && rounded.includes('px') ? `--kit-popover-radius:${rounded}` : ''
56
- ]
57
- .filter(Boolean)
58
- .join('; ')
59
- );
60
-
61
48
  const positioner = getPositions();
62
49
 
63
50
  let contentRef = $state<HTMLElement | null>(null);
@@ -80,7 +67,7 @@
80
67
 
81
68
  const updatePosition = () => {
82
69
  if (!contentRef || !activatorRef) return;
83
- positioner.update(activatorRef, contentRef, safePosition, false, true);
70
+ positioner.update(activatorRef, contentRef, position, false, true);
84
71
  axis = positioner.values;
85
72
  };
86
73
 
@@ -108,6 +95,16 @@
108
95
  $effect(() => {
109
96
  ref = contentRef;
110
97
  });
98
+
99
+ let resolvedStyle = $derived(
100
+ [
101
+ componentStyle,
102
+ color ? `--kit-popover-fg:${color && `var(--kit-color-${color})`}` : '',
103
+ background ? `--kit-popover-bg:${background && `var(--kit-color-${background})`}` : ''
104
+ ]
105
+ .filter(Boolean)
106
+ .join('; ')
107
+ );
111
108
  </script>
112
109
 
113
110
  <svelte:window bind:innerHeight bind:innerWidth bind:scrollX bind:scrollY />
@@ -118,10 +115,14 @@
118
115
  <div
119
116
  bind:this={contentRef}
120
117
  class={componentClass}
121
- style={`left:${axis.x}px; top:${axis.y}px; ${mergedStyle}`}
118
+ style={`left:${axis.x}px; top:${axis.y}px; ${resolvedStyle}`}
122
119
  role="dialog"
123
120
  data-rounded={rounded}
124
- data-position={axis.location ?? safePosition}
121
+ data-position={axis.location ?? position}
122
+ data-density={density}
123
+ data-elevation={elevationState.base}
124
+ data-elevation-hover={elevationState.hover}
125
+ data-elevation-active={elevationState.active}
125
126
  use:clickOutside={{ exclude: [contentRef, activatorRef], onClose: () => (open = false) }}
126
127
  {...restProps}
127
128
  >
@@ -131,43 +132,60 @@
131
132
 
132
133
  <style>
133
134
  .kit-popover-content {
134
- --kit-popover-bg: var(--kit-surface-1);
135
- --kit-popover-fg: var(--kit-fg);
136
- --kit-popover-radius: 12px;
137
- --kit-popover-bd: color-mix(in oklab, var(--kit-fg), transparent 88%);
138
- --kit-popover-shadow: 0 18px 40px -18px color-mix(in oklab, black 24%, transparent);
135
+ --kit-popover-bg: var(--kit-color-surface-3);
136
+ --kit-popover-fg: var(--kit-color-text);
139
137
 
140
138
  position: fixed;
141
139
  z-index: 1900;
142
140
  display: inline-block;
143
141
  width: auto;
144
142
  max-width: min(28rem, calc(100vw - 1rem));
145
- padding: 1rem;
146
- border: 1px solid var(--kit-popover-bd);
143
+ padding: calc(1rem * var(--kit-popover-density-scale));
144
+ border: 0;
147
145
  border-radius: var(--kit-popover-radius);
148
146
  background: var(--kit-popover-bg);
149
147
  color: var(--kit-popover-fg);
150
- box-shadow: var(--kit-popover-shadow);
151
148
  opacity: 1;
152
149
  transition: opacity 140ms ease;
153
150
  }
154
151
 
152
+ /**
153
+ * rounded
154
+ * @link ...
155
+ */
155
156
  .kit-popover-content[data-rounded='0'] {
156
- --kit-popover-radius: 0;
157
+ --kit-popover-radius: var(--kit-shape-none);
157
158
  }
158
159
  .kit-popover-content[data-rounded='xs'] {
159
- --kit-popover-radius: 2px;
160
+ --kit-popover-radius: var(--kit-shape-xs);
160
161
  }
161
162
  .kit-popover-content[data-rounded='sm'] {
162
- --kit-popover-radius: 4px;
163
+ --kit-popover-radius: var(--kit-shape-sm);
163
164
  }
164
165
  .kit-popover-content[data-rounded='md'] {
165
- --kit-popover-radius: 8px;
166
+ --kit-popover-radius: var(--kit-shape-md);
166
167
  }
167
168
  .kit-popover-content[data-rounded='lg'] {
168
- --kit-popover-radius: 16px;
169
+ --kit-popover-radius: var(--kit-shape-lg);
169
170
  }
170
171
  .kit-popover-content[data-rounded='xl'] {
171
- --kit-popover-radius: 99999px;
172
+ --kit-popover-radius: var(--kit-shape-xl);
173
+ }
174
+
175
+ /**
176
+ * density
177
+ * @link no url
178
+ */
179
+ .kit-popover-content[data-density='none'] {
180
+ --kit-popover-density-scale: 0;
181
+ }
182
+ .kit-popover-content[data-density='compact'] {
183
+ --kit-popover-density-scale: 0.8;
184
+ }
185
+ .kit-popover-content[data-density='default'] {
186
+ --kit-popover-density-scale: 1;
187
+ }
188
+ .kit-popover-content[data-density='comfortable'] {
189
+ --kit-popover-density-scale: 1.15;
172
190
  }
173
191
  </style>
@@ -1,4 +1,4 @@
1
- import type { Component, PropValue, RoundedType } from '../../@types';
1
+ import type { Component, DensityType, ElevationProps, PropValue, RoundedType } from '../../@types';
2
2
  import type { Snippet } from 'svelte';
3
3
  export type PositionElement = {
4
4
  x: number;
@@ -11,10 +11,12 @@ export type ModelPopoverProps = {
11
11
  export interface PopoverProps extends Component {
12
12
  ref?: HTMLElement | null;
13
13
  open?: boolean;
14
- rounded?: RoundedType | string;
14
+ rounded?: RoundedType;
15
15
  position?: 'top' | 'bottom' | 'left' | 'right';
16
16
  color?: string;
17
17
  background?: string;
18
18
  activator?: Snippet<[ModelPopoverProps]>;
19
+ elevation?: ElevationProps;
20
+ density?: DensityType;
19
21
  [key: string]: PropValue | Record<string, PropValue> | unknown;
20
22
  }