lapikit 0.6.3 → 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 (35) 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 +4 -4
  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/chip/chip.svelte +162 -140
  16. package/dist/components/chip/chip.types.d.ts +7 -3
  17. package/dist/components/dialog/dialog.svelte +84 -81
  18. package/dist/components/dialog/dialog.types.d.ts +7 -5
  19. package/dist/components/dropdown/dropdown.svelte +46 -36
  20. package/dist/components/dropdown/dropdown.types.d.ts +4 -2
  21. package/dist/components/icon/icon.svelte +28 -52
  22. package/dist/components/list/modules/list-item.svelte +0 -55
  23. package/dist/components/modal/modal.svelte +104 -98
  24. package/dist/components/modal/modal.types.d.ts +7 -5
  25. package/dist/components/popover/popover.svelte +46 -34
  26. package/dist/components/popover/popover.types.d.ts +3 -1
  27. package/dist/components/separator/separator.svelte +11 -30
  28. package/dist/components/separator/separator.types.d.ts +1 -2
  29. package/dist/components/textfield/textfield.svelte +180 -157
  30. package/dist/components/textfield/textfield.types.d.ts +4 -3
  31. package/dist/components/toolbar/toolbar.svelte +126 -108
  32. package/dist/components/toolbar/toolbar.types.d.ts +6 -7
  33. package/dist/components/tooltip/tooltip.svelte +39 -45
  34. package/dist/components/tooltip/tooltip.types.d.ts +3 -3
  35. package/package.json +1 -1
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { useClassName, useStyles } from '../../utils';
2
+ import { useClassName, useElevation, useStyles } from '../../utils';
3
3
  import { makeComponentProps } from '../../html-mapped';
4
4
  import { ripple } from '../../animations';
5
5
  import type { ButtonProps } from './btn.types.js';
@@ -16,8 +16,8 @@
16
16
  density = 'default',
17
17
  loading,
18
18
  active = false,
19
- size = 'default',
20
- rounded,
19
+ size = 'md',
20
+ rounded = 'sm',
21
21
  disabled = false,
22
22
  block,
23
23
  href,
@@ -32,31 +32,18 @@
32
32
  append,
33
33
  prepend,
34
34
  icon,
35
+ elevation,
36
+ color,
37
+ background,
35
38
  ...rest
36
39
  }: ButtonProps = $props();
37
40
 
38
- let safeVariant = $derived(
39
- variant === 'filled' || variant === 'outline' || variant === 'text' || variant === 'link'
40
- ? variant
41
- : 'filled'
42
- );
43
- let safeSize = $derived(
44
- size === 'default'
45
- ? 'md'
46
- : size === 'xs' || size === 'sm' || size === 'md' || size === 'lg' || size === 'xl'
47
- ? size
48
- : 'md'
49
- );
50
- let safeDensity = $derived(
51
- density === 'compact' || density === 'comfortable' || density === 'default'
52
- ? density
53
- : 'default'
54
- );
55
-
56
41
  let { classProps, styleProps, restProps } = $derived(
57
42
  makeComponentProps(rest as Record<string, unknown>)
58
43
  );
59
44
 
45
+ let elevationState = $derived(useElevation(elevation));
46
+
60
47
  let componentClass = $derived(
61
48
  useClassName({
62
49
  baseClass: 'kit-btn',
@@ -93,24 +80,29 @@
93
80
  bind:this={ref}
94
81
  class={componentClass}
95
82
  style={componentStyle}
96
- data-size={safeSize}
97
- data-variant={safeVariant}
83
+ data-size={size}
84
+ data-variant={variant}
98
85
  data-loading={loading}
99
86
  data-active={active}
100
87
  data-disabled={isDisabled}
101
- data-density={safeDensity}
88
+ data-density={density}
102
89
  data-rounded={rounded}
103
90
  aria-busy={disabled}
104
91
  aria-disabled={isDisabled || undefined}
105
92
  data-block={block}
106
93
  data-wide={wide}
107
94
  data-icon={icon}
95
+ data-elevation={elevationState.base}
96
+ data-elevation-hover={elevationState.hover}
97
+ data-elevation-active={elevationState.active}
108
98
  use:ripple={{
109
99
  component: 'btn',
110
100
  disabled: noRipple || disabled
111
101
  }}
102
+ style:--kit-btn-fg={color && `var(--kit-color-${color})`}
103
+ style:--kit-btn-bg={background && `var(--kit-color-${background})`}
112
104
  >
113
- {#if safeVariant === 'outline'}
105
+ {#if variant === 'outline'}
114
106
  <span class="outline"></span>
115
107
  {/if}
116
108
  <input
@@ -131,15 +123,14 @@
131
123
  bind:this={ref}
132
124
  class={componentClass}
133
125
  style={componentStyle}
134
- {...restProps}
135
126
  type={resolvedType()}
136
127
  href={resolvedHref}
137
- data-size={safeSize}
138
- data-variant={safeVariant}
128
+ data-size={size}
129
+ data-variant={variant}
139
130
  data-loading={loading}
140
131
  data-active={active}
141
132
  data-disabled={isDisabled}
142
- data-density={safeDensity}
133
+ data-density={density}
143
134
  data-rounded={rounded}
144
135
  disabled={resolvedDisabled}
145
136
  aria-busy={disabled}
@@ -147,12 +138,18 @@
147
138
  data-block={block}
148
139
  data-wide={wide}
149
140
  data-icon={icon}
141
+ data-elevation={elevationState.base}
142
+ data-elevation-hover={elevationState.hover}
143
+ data-elevation-active={elevationState.active}
150
144
  use:ripple={{
151
145
  component: 'btn',
152
146
  disabled: noRipple || disabled
153
147
  }}
148
+ style:--kit-btn-fg={color && `var(--kit-color-${color})`}
149
+ style:--kit-btn-bg={background && `var(--kit-color-${background})`}
150
+ {...restProps}
154
151
  >
155
- {#if safeVariant === 'outline'}
152
+ {#if variant === 'outline'}
156
153
  <span class="outline"></span>
157
154
  {/if}
158
155
 
@@ -209,26 +206,6 @@
209
206
  }
210
207
 
211
208
  .kit-btn {
212
- --kit-btn-bg: var(--kit-surface-2);
213
- --kit-btn-fg: var(--kit-fg);
214
- --kit-btn-bd: var(--kit-border);
215
- --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-bg), var(--kit-btn-fg) 6%);
216
- --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-bg), var(--kit-btn-fg) 10%);
217
- --kit-btn-h-xs: 28px;
218
- --kit-btn-h-sm: 32px;
219
- --kit-btn-h-md: 40px;
220
- --kit-btn-h-lg: 48px;
221
- --kit-btn-h-xl: 56px;
222
- --kit-btn-px-xs: 10px;
223
- --kit-btn-px-sm: 12px;
224
- --kit-btn-px-md: 16px;
225
- --kit-btn-px-lg: 20px;
226
- --kit-btn-px-xl: 24px;
227
- --kit-btn-density-scale: 1;
228
- --kit-btn-density-h-scale: 1;
229
- --kit-btn-radius: 8px;
230
- --kit-btn-gap: 0.45em;
231
-
232
209
  position: relative;
233
210
  display: inline-flex;
234
211
  box-sizing: border-box;
@@ -237,7 +214,7 @@
237
214
  font-family: var(--kit-font);
238
215
  background: var(--kit-btn-bg);
239
216
  color: var(--kit-btn-fg);
240
- height: max(28px, calc(var(--kit-btn-h) * var(--kit-btn-density-h-scale)));
217
+ height: calc(var(--kit-btn-h) * var(--kit-btn-density-h-scale));
241
218
  padding-inline: calc(var(--kit-btn-px) * var(--kit-btn-density-scale));
242
219
  border-radius: var(--kit-btn-radius);
243
220
  text-decoration: none;
@@ -303,124 +280,6 @@
303
280
  cursor: pointer;
304
281
  }
305
282
 
306
- /* variant */
307
- .kit-btn[data-variant='filled'] {
308
- --kit-btn-bg: var(--kit-accent);
309
- --kit-btn-fg: white;
310
- --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-bg), black 10%);
311
- --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-bg), black 16%);
312
- }
313
-
314
- .kit-btn[data-variant='outline'] {
315
- --outline-color: var(--kit-accent);
316
- --kit-btn-bg: transparent;
317
- --kit-btn-fg: var(--kit-accent);
318
- --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 80%);
319
- --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 92%);
320
- }
321
-
322
- .kit-btn[data-variant='text'] {
323
- --kit-btn-bg: transparent;
324
- --kit-btn-fg: var(--kit-accent);
325
- --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 80%);
326
- --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 92%);
327
- }
328
-
329
- .kit-btn[data-variant='link'] {
330
- --kit-btn-bg: transparent;
331
- --kit-btn-fg: var(--kit-accent);
332
- --kit-btn-decoration: underline;
333
- height: inherit;
334
- padding: 0;
335
- }
336
-
337
- /* size */
338
- .kit-btn[data-size='xs'] {
339
- --kit-btn-h: var(--kit-btn-h-xs);
340
- --kit-btn-px: var(--kit-btn-px-xs);
341
- font-size: 12px;
342
- }
343
- .kit-btn[data-size='xs'] :global(.kit-icon:not([data-size])) {
344
- --kit-icon-current-size: var(--kit-icon-size-xs);
345
- }
346
-
347
- .kit-btn[data-size='sm'] {
348
- --kit-btn-h: var(--kit-btn-h-sm);
349
- --kit-btn-px: var(--kit-btn-px-sm);
350
- font-size: 13px;
351
- }
352
- .kit-btn[data-size='sm'] :global(.kit-icon:not([data-size])) {
353
- --kit-icon-current-size: var(--kit-icon-size-sm);
354
- }
355
-
356
- .kit-btn[data-size='md'] {
357
- --kit-btn-h: var(--kit-btn-h-md);
358
- --kit-btn-px: var(--kit-btn-px-md);
359
- font-size: 14px;
360
- }
361
- .kit-btn[data-size='md'] :global(.kit-icon:not([data-size])) {
362
- --kit-icon-current-size: var(--kit-icon-size-md);
363
- }
364
-
365
- .kit-btn[data-size='lg'] {
366
- --kit-btn-h: var(--kit-btn-h-lg);
367
- --kit-btn-px: var(--kit-btn-px-lg);
368
- font-size: 15px;
369
- }
370
- .kit-btn[data-size='lg'] :global(.kit-icon:not([data-size])) {
371
- --kit-icon-current-size: var(--kit-icon-size-lg);
372
- }
373
-
374
- .kit-btn[data-size='xl'] {
375
- --kit-btn-h: var(--kit-btn-h-xl);
376
- --kit-btn-px: var(--kit-btn-px-xl);
377
- font-size: 16px;
378
- }
379
- .kit-btn[data-size='xl'] :global(.kit-icon:not([data-size])) {
380
- --kit-icon-current-size: var(--kit-icon-size-xl);
381
- }
382
-
383
- /* density */
384
- .kit-btn[data-density='default'] {
385
- --kit-btn-density-scale: 1;
386
- --kit-btn-density-h-scale: 1;
387
- }
388
-
389
- .kit-btn[data-density='compact'] {
390
- --kit-btn-density-scale: 0.9;
391
- --kit-btn-density-h-scale: 0.92;
392
- }
393
-
394
- .kit-btn[data-density='comfortable'] {
395
- --kit-btn-density-scale: 1.1;
396
- --kit-btn-density-h-scale: 1.08;
397
- }
398
-
399
- /* rounded */
400
- .kit-btn[data-rounded='0'] {
401
- --kit-btn-radius: 0;
402
- }
403
-
404
- .kit-btn[data-rounded='xs'] {
405
- --kit-btn-radius: 2px;
406
- }
407
-
408
- .kit-btn[data-rounded='sm'] {
409
- --kit-btn-radius: 4px;
410
- }
411
-
412
- .kit-btn[data-rounded='md'] {
413
- --kit-btn-radius: 8px;
414
- }
415
-
416
- .kit-btn[data-rounded='lg'] {
417
- --kit-btn-radius: 16px;
418
- }
419
-
420
- .kit-btn[data-rounded='xl'] {
421
- --kit-btn-radius: 99999px;
422
- }
423
-
424
283
  .kit-btn[data-wide='true'] {
425
284
  width: 100%;
426
285
  max-width: 16rem;
@@ -517,4 +376,143 @@
517
376
  .kit-btn[data-disabled='true'] > input {
518
377
  cursor: not-allowed;
519
378
  }
379
+
380
+ /**
381
+ * size
382
+ * @link nothing...
383
+ */
384
+ .kit-btn[data-size='xs'] {
385
+ --kit-btn-h: 28px;
386
+ --kit-btn-px: 10px;
387
+ --kit-btn-gap: 4px;
388
+ --kit-btn-font: 0.75rem;
389
+ }
390
+ .kit-btn[data-size='xs'] :global(.kit-icon:not([data-size])) {
391
+ --kit-icon-current-size: var(--kit-icon-size-xs);
392
+ }
393
+ .kit-btn[data-size='sm'] {
394
+ --kit-btn-h: 32px;
395
+ --kit-btn-px: 12px;
396
+ --kit-btn-gap: 6px;
397
+ --kit-btn-font: 0.875rem;
398
+ }
399
+ .kit-btn[data-size='sm'] :global(.kit-icon:not([data-size])) {
400
+ --kit-icon-current-size: var(--kit-icon-size-sm);
401
+ }
402
+
403
+ .kit-btn[data-size='md'] {
404
+ --kit-btn-h: 40px;
405
+ --kit-btn-px: 16px;
406
+ --kit-btn-gap: 8px;
407
+ --kit-btn-font: 1rem;
408
+ }
409
+ .kit-btn[data-size='md'] :global(.kit-icon:not([data-size])) {
410
+ --kit-icon-current-size: var(--kit-icon-size-md);
411
+ }
412
+
413
+ .kit-btn[data-size='lg'] {
414
+ --kit-btn-h: 48px;
415
+ --kit-btn-px: 20px;
416
+ --kit-btn-gap: 10px;
417
+ --kit-btn-font: 1.125rem;
418
+ }
419
+ .kit-btn[data-size='lg'] :global(.kit-icon:not([data-size])) {
420
+ --kit-icon-current-size: var(--kit-icon-size-lg);
421
+ }
422
+
423
+ .kit-btn[data-size='xl'] {
424
+ --kit-btn-h: 56px;
425
+ --kit-btn-px: 24px;
426
+ --kit-btn-gap: 12px;
427
+ --kit-btn-font: 1.25rem;
428
+ }
429
+ .kit-btn[data-size='xl'] :global(.kit-icon:not([data-size])) {
430
+ --kit-icon-current-size: var(--kit-icon-size-xl);
431
+ }
432
+
433
+ /**
434
+ * density
435
+ * @link no links
436
+ */
437
+ .kit-btn[data-density='none'] {
438
+ --kit-btn-density-scale: 0;
439
+ --kit-btn-density-h-scale: 0;
440
+ }
441
+ .kit-btn[data-density='compact'] {
442
+ --kit-btn-density-scale: 0.9;
443
+ --kit-btn-density-h-scale: 0.92;
444
+ }
445
+ .kit-btn[data-density='default'] {
446
+ --kit-btn-density-scale: 1;
447
+ --kit-btn-density-h-scale: 1;
448
+ }
449
+ .kit-btn[data-density='comfortable'] {
450
+ --kit-btn-density-scale: 1.1;
451
+ --kit-btn-density-h-scale: 1.15;
452
+ }
453
+
454
+ /**
455
+ * rounded
456
+ * @link ...
457
+ */
458
+ .kit-btn[data-rounded='0'] {
459
+ --kit-btn-radius: var(--kit-shape-none);
460
+ }
461
+ .kit-btn[data-rounded='xs'] {
462
+ --kit-btn-radius: var(--kit-shape-xs);
463
+ }
464
+ .kit-btn[data-rounded='sm'] {
465
+ --kit-btn-radius: var(--kit-shape-sm);
466
+ }
467
+ .kit-btn[data-rounded='md'] {
468
+ --kit-btn-radius: var(--kit-shape-md);
469
+ }
470
+ .kit-btn[data-rounded='lg'] {
471
+ --kit-btn-radius: var(--kit-shape-lg);
472
+ }
473
+ .kit-btn[data-rounded='xl'] {
474
+ --kit-btn-radius: var(--kit-shape-xl);
475
+ }
476
+ .kit-btn[data-rounded='full'] {
477
+ --kit-btn-radius: var(--kit-shape-full);
478
+ }
479
+
480
+ /**
481
+ * variant
482
+ * @link no links...
483
+ */
484
+ .kit-btn[data-variant='filled'] {
485
+ --kit-btn-bg: var(--kit-color-surface-2);
486
+ --kit-btn-fg: var(--kit-color-text);
487
+
488
+ --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-bg), black 10%);
489
+ --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-bg), black 16%);
490
+ }
491
+ .kit-btn[data-variant='outline'] {
492
+ --kit-btn-bg: transparent;
493
+ --kit-btn-fg: var(--kit-color-text);
494
+ --kit-btn-bd: var(--kit-btn-fg);
495
+
496
+ --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 80%);
497
+ --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 92%);
498
+ }
499
+ .kit-btn[data-variant='text'] {
500
+ --kit-btn-bg: transparent;
501
+ --kit-btn-fg: var(--kit-color-text);
502
+
503
+ --kit-btn-hover-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 80%);
504
+ --kit-btn-active-bg: color-mix(in oklab, var(--kit-btn-fg), transparent 92%);
505
+ }
506
+ .kit-btn[data-variant='link'] {
507
+ --kit-btn-bg: transparent;
508
+ --kit-btn-fg: var(--kit-color-text);
509
+ --kit-btn-decoration: underline;
510
+
511
+ height: inherit;
512
+ padding: 0;
513
+ }
514
+
515
+ .kit-btn .outline {
516
+ --outline-color: var(--kit-btn-bd);
517
+ }
520
518
  </style>
@@ -1,4 +1,4 @@
1
- import type { Component, RoundedType, SizeType } from '../../@types';
1
+ import type { Component, DensityType, ElevationProps, RoundedType, SizeType } from '../../@types';
2
2
  import type { Snippet } from 'svelte';
3
3
  export interface ButtonProps extends Component {
4
4
  ref?: HTMLElement | null;
@@ -6,7 +6,7 @@ export interface ButtonProps extends Component {
6
6
  input?: boolean;
7
7
  href?: string;
8
8
  variant?: 'outline' | 'text' | 'filled' | 'link';
9
- density?: 'compact' | 'comfortable' | 'default';
9
+ density?: DensityType;
10
10
  active?: boolean;
11
11
  loading?: boolean;
12
12
  disabled?: boolean;
@@ -23,4 +23,7 @@ export interface ButtonProps extends Component {
23
23
  load?: Snippet;
24
24
  append?: Snippet;
25
25
  prepend?: Snippet;
26
+ elevation?: ElevationProps;
27
+ color?: string;
28
+ background?: string;
26
29
  }