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,41 +1,30 @@
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
- import type { AlertProps, AlertTone, AlertVariant, AlertDensity } from './alert.types.js';
5
-
6
- function resolveVariant(value: AlertVariant | undefined): AlertVariant {
7
- return value === 'filled' || value === 'outline' || value === 'text' ? value : 'filled';
8
- }
9
-
10
- function resolveDensity(value: AlertDensity | undefined): AlertDensity {
11
- return value === 'compact' || value === 'comfortable' || value === 'default'
12
- ? value
13
- : 'default';
14
- }
15
-
16
- function resolveTone(value: AlertTone | undefined): AlertTone {
17
- return value && ['info', 'success', 'warning', 'error'].includes(value) ? value : 'default';
18
- }
4
+ import type { AlertProps } from './alert.types.js';
19
5
 
20
6
  let {
21
7
  ref = $bindable(),
22
8
  is = 'div',
23
- children = undefined,
9
+ children,
24
10
  class: className = '',
25
11
  style: styleAttr = '',
26
12
  's-class': sClass,
27
13
  's-style': sStyle,
28
14
  open = $bindable(true),
29
- closable = false,
15
+ closable,
16
+ size = 'md',
30
17
  variant = 'filled',
31
18
  density = 'default',
32
19
  rounded = 'md',
33
20
  tone = 'default',
34
- color = undefined,
35
- background = undefined,
36
- prepend = undefined,
37
- append = undefined,
38
- close = undefined,
21
+ color,
22
+ background,
23
+ prepend,
24
+ append,
25
+ close,
26
+ multiline,
27
+ elevation,
39
28
  ...rest
40
29
  }: AlertProps = $props();
41
30
 
@@ -43,6 +32,8 @@
43
32
  makeComponentProps(rest as Record<string, unknown>)
44
33
  );
45
34
 
35
+ let elevationState = $derived(useElevation(elevation));
36
+
46
37
  let componentClass = $derived(
47
38
  useClassName({
48
39
  baseClass: 'kit-alert',
@@ -60,18 +51,7 @@
60
51
  })
61
52
  );
62
53
 
63
- let safeVariant = $derived(resolveVariant(variant));
64
- let safeDensity = $derived(resolveDensity(density));
65
- let safeTone = $derived(resolveTone(tone));
66
- let mergedStyle = $derived(
67
- [
68
- baseStyle,
69
- color ? `--kit-alert-fg:${color}` : '',
70
- background ? `--kit-alert-bg:${background}` : ''
71
- ]
72
- .filter(Boolean)
73
- .join('; ')
74
- );
54
+ let mergedStyle = $derived([baseStyle].filter(Boolean).join('; '));
75
55
  </script>
76
56
 
77
57
  {#if !closable || (closable && open)}
@@ -81,13 +61,23 @@
81
61
  class={componentClass}
82
62
  style={mergedStyle}
83
63
  role="alert"
84
- data-variant={safeVariant}
85
- data-density={safeDensity}
64
+ data-size={size}
65
+ data-variant={variant}
66
+ data-density={density}
86
67
  data-rounded={rounded}
87
- data-tone={safeTone}
68
+ data-tone={tone}
69
+ data-mutline={multiline}
70
+ data-append={append && true}
71
+ data-prepend={prepend && true}
72
+ data-closable={closable && true}
73
+ data-elevation={elevationState.base}
74
+ data-elevation-hover={elevationState.hover}
75
+ data-elevation-active={elevationState.active}
76
+ style:--kit-alert-fg={color && `var(--kit-color-${color})`}
77
+ style:--kit-alert-bg={background && `var(--kit-color-${background})`}
88
78
  {...restProps}
89
79
  >
90
- {#if safeVariant === 'outline'}
80
+ {#if variant === 'outline'}
91
81
  <span class="outline"></span>
92
82
  {/if}
93
83
 
@@ -117,7 +107,12 @@
117
107
  {#if close}
118
108
  {@render close?.()}
119
109
  {:else}
120
- <span aria-hidden="true">×</span>
110
+ <svg viewBox="0 0 24 24" aria-hidden="true">
111
+ <path
112
+ d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"
113
+ fill="currentColor"
114
+ ></path>
115
+ </svg>
121
116
  {/if}
122
117
  </button>
123
118
  {/if}
@@ -126,121 +121,204 @@
126
121
 
127
122
  <style>
128
123
  .kit-alert {
129
- --kit-alert-bg: var(--kit-surface-2);
130
- --kit-alert-fg: var(--kit-fg);
131
- --kit-alert-bd: var(--kit-border);
132
- --kit-alert-radius: 8px;
133
- --kit-alert-py: 0.75rem;
134
- --kit-alert-px: 0.875rem;
135
- --kit-alert-gap: 0.625rem;
136
- --outline-color: var(--kit-alert-bd);
137
-
138
124
  position: relative;
139
125
  display: grid;
140
- grid-template-columns: auto minmax(0, 1fr) auto auto;
126
+ grid-template-columns: minmax(0, 1fr);
141
127
  gap: var(--kit-alert-gap);
142
- align-items: start;
143
- padding: var(--kit-alert-py) var(--kit-alert-px);
128
+ padding: calc(var(--kit-alert-px) * var(--kit-alert-density-scale));
144
129
  border-radius: var(--kit-alert-radius);
145
130
  color: var(--kit-alert-fg);
146
131
  background: var(--kit-alert-bg);
147
- border: 1px solid var(--kit-alert-bd);
132
+ font-size: var(--kit-alert-font);
133
+ border: 0;
148
134
  }
149
135
 
150
- .kit-alert[data-variant='outline'] {
151
- background: transparent;
152
- color: var(--kit-alert-fg);
153
- border-color: var(--kit-alert-bd);
136
+ .kit-alert[data-mutline='true'] .kit-alert__prepend,
137
+ .kit-alert[data-mutline='true'] .kit-alert__content,
138
+ .kit-alert[data-mutline='true'] .kit-alert__append,
139
+ .kit-alert[data-mutline='true'] .kit-alert__close {
140
+ display: flex;
141
+ align-items: start;
154
142
  }
155
143
 
156
- .kit-alert[data-variant='text'] {
157
- background: transparent;
158
- color: var(--kit-alert-fg);
159
- border-color: transparent;
144
+ .kit-alert:not([data-mutline='true']) .kit-alert__prepend,
145
+ .kit-alert:not([data-mutline='true']) .kit-alert__content,
146
+ .kit-alert:not([data-mutline='true']) .kit-alert__append,
147
+ .kit-alert:not([data-mutline='true']) .kit-alert__close {
148
+ display: flex;
149
+ align-items: center;
160
150
  }
161
151
 
162
- .kit-alert .outline {
163
- pointer-events: none;
152
+ .kit-alert__close svg {
153
+ width: 1.125rem;
154
+ height: 1.125rem;
155
+ display: block;
164
156
  }
165
157
 
166
- .kit-alert[data-tone='info'] {
167
- --kit-alert-tone-accent: hsl(var(--kit-h-info, 205) 60% 42%);
168
- --kit-alert-bg: hsl(var(--kit-h-info, 205) 90% 95%);
169
- --kit-alert-fg: hsl(var(--kit-h-info, 205) 36% 24%);
170
- --kit-alert-bd: hsl(var(--kit-h-info, 205) 45% 78%);
158
+ .kit-alert[data-prepend='true']:not([data-append='true']):not([data-closable='true']) {
159
+ grid-template-columns: auto minmax(0, 1fr);
160
+ }
161
+ .kit-alert[data-append='true']:not([data-prepend='true']):not([data-closable='true']),
162
+ .kit-alert[data-closable='true']:not([data-prepend='true']):not([data-append='true']) {
163
+ grid-template-columns: minmax(0, 1fr) auto;
171
164
  }
172
165
 
173
- .kit-alert[data-tone='success'] {
174
- --kit-alert-tone-accent: hsl(var(--kit-h-success, 145) 50% 38%);
175
- --kit-alert-bg: hsl(var(--kit-h-success, 145) 58% 93%);
176
- --kit-alert-fg: hsl(var(--kit-h-success, 145) 38% 23%);
177
- --kit-alert-bd: hsl(var(--kit-h-success, 145) 30% 75%);
166
+ .kit-alert[data-append='true']:not([data-prepend='true']):not([data-closable='true']) {
167
+ grid-template-columns: minmax(0, 1fr) auto;
168
+ }
169
+ .kit-alert[data-prepend='true'][data-closable='true']:not([data-append='true']),
170
+ .kit-alert[data-prepend='true'][data-append='true']:not([data-closable='true']) {
171
+ grid-template-columns: auto minmax(0, 1fr) auto;
172
+ }
173
+ .kit-alert[data-append='true'][data-closable='true']:not([data-prepend='true']) {
174
+ grid-template-columns: minmax(0, 1fr) auto auto;
175
+ }
176
+ .kit-alert[data-prepend='true'][data-append='true'][data-closable='true'] {
177
+ grid-template-columns: auto minmax(0, 1fr) auto auto;
178
178
  }
179
179
 
180
- .kit-alert[data-tone='warning'] {
181
- --kit-alert-tone-accent: hsl(var(--kit-h-warning, 35) 80% 38%);
182
- --kit-alert-bg: hsl(var(--kit-h-warning, 35) 95% 92%);
183
- --kit-alert-fg: hsl(var(--kit-h-warning, 35) 55% 24%);
184
- --kit-alert-bd: hsl(var(--kit-h-warning, 35) 55% 72%);
180
+ /**
181
+ * rounded
182
+ * @link ...
183
+ */
184
+ .kit-alert[data-rounded='0'] {
185
+ --kit-alert-radius: var(--kit-shape-none);
186
+ }
187
+ .kit-alert[data-rounded='xs'] {
188
+ --kit-alert-radius: var(--kit-shape-xs);
189
+ }
190
+ .kit-alert[data-rounded='sm'] {
191
+ --kit-alert-radius: var(--kit-shape-sm);
192
+ }
193
+ .kit-alert[data-rounded='md'] {
194
+ --kit-alert-radius: var(--kit-shape-md);
195
+ }
196
+ .kit-alert[data-rounded='lg'] {
197
+ --kit-alert-radius: var(--kit-shape-lg);
198
+ }
199
+ .kit-alert[data-rounded='xl'] {
200
+ --kit-alert-radius: var(--kit-shape-xl);
201
+ }
202
+ .kit-alert[data-rounded='full'] {
203
+ --kit-alert-radius: var(--kit-shape-full);
185
204
  }
186
205
 
187
- .kit-alert[data-tone='error'] {
188
- --kit-alert-tone-accent: hsl(var(--kit-h-danger, 5) 65% 45%);
189
- --kit-alert-bg: hsl(var(--kit-h-danger, 5) 90% 94%);
190
- --kit-alert-fg: hsl(var(--kit-h-danger, 5) 48% 28%);
191
- --kit-alert-bd: hsl(var(--kit-h-danger, 5) 55% 78%);
206
+ /**
207
+ * density
208
+ * @link no links
209
+ */
210
+ .kit-alert[data-density='none'] {
211
+ --kit-alert-density-scale: 0;
212
+ --kit-alert-density-h-scale: 0;
213
+ }
214
+ .kit-alert[data-density='compact'] {
215
+ --kit-alert-density-scale: 0.9;
216
+ --kit-alert-density-h-scale: 0.92;
217
+ }
218
+ .kit-alert[data-density='default'] {
219
+ --kit-alert-density-scale: 1;
220
+ --kit-alert-density-h-scale: 1;
221
+ }
222
+ .kit-alert[data-density='comfortable'] {
223
+ --kit-alert-density-scale: 1.1;
224
+ --kit-alert-density-h-scale: 1.15;
192
225
  }
193
226
 
194
- .kit-alert[data-variant='outline'][data-tone='info'],
195
- .kit-alert[data-variant='outline'][data-tone='success'],
196
- .kit-alert[data-variant='outline'][data-tone='warning'],
197
- .kit-alert[data-variant='outline'][data-tone='error'] {
198
- --kit-alert-fg: var(--kit-alert-tone-accent);
199
- --kit-alert-bd: var(--kit-alert-tone-accent);
227
+ /**
228
+ * variant
229
+ * @link no links...
230
+ */
231
+ .kit-alert[data-variant='filled'] {
232
+ --kit-alert-bg: var(--kit-color-surface-2);
233
+ --kit-alert-fg: var(--kit-color-text);
234
+
235
+ --kit-alert-hover-bg: color-mix(in oklab, var(--kit-alert-bg), black 10%);
236
+ --kit-alert-active-bg: color-mix(in oklab, var(--kit-alert-bg), black 16%);
200
237
  }
238
+ .kit-alert[data-variant='outline'] {
239
+ --kit-alert-bg: transparent;
240
+ --kit-alert-fg: var(--kit-color-text);
241
+ --kit-alert-bd: var(--kit-alert-fg);
201
242
 
202
- .kit-alert[data-variant='text'][data-tone='info'],
203
- .kit-alert[data-variant='text'][data-tone='success'],
204
- .kit-alert[data-variant='text'][data-tone='warning'],
205
- .kit-alert[data-variant='text'][data-tone='error'] {
206
- --kit-alert-fg: var(--kit-alert-tone-accent);
243
+ --kit-alert-hover-bg: color-mix(in oklab, var(--kit-alert-fg), transparent 80%);
244
+ --kit-alert-active-bg: color-mix(in oklab, var(--kit-alert-fg), transparent 92%);
207
245
  }
246
+ .kit-alert[data-variant='text'] {
247
+ --kit-alert-bg: transparent;
248
+ --kit-alert-fg: var(--kit-color-text);
208
249
 
209
- .kit-alert[data-density='compact'] {
210
- --kit-alert-py: 0.5rem;
211
- --kit-alert-px: 0.75rem;
212
- --kit-alert-gap: 0.5rem;
250
+ --kit-alert-hover-bg: color-mix(in oklab, var(--kit-alert-fg), transparent 80%);
251
+ --kit-alert-active-bg: color-mix(in oklab, var(--kit-alert-fg), transparent 92%);
213
252
  }
214
253
 
215
- .kit-alert[data-density='default'] {
216
- --kit-alert-py: 0.75rem;
217
- --kit-alert-px: 0.875rem;
218
- --kit-alert-gap: 0.625rem;
254
+ /**
255
+ * size
256
+ * @link nothing...
257
+ */
258
+ .kit-alert[data-size='xs'] {
259
+ --kit-alert-px: 10px;
260
+ --kit-alert-gap: 4px;
261
+ --kit-alert-font: 0.75rem;
262
+ }
263
+ .kit-alert[data-size='sm'] {
264
+ --kit-alert-px: 12px;
265
+ --kit-alert-gap: 6px;
266
+ --kit-alert-font: 0.875rem;
267
+ }
268
+ .kit-alert[data-size='md'] {
269
+ --kit-alert-px: 16px;
270
+ --kit-alert-gap: 8px;
271
+ --kit-alert-font: 1rem;
272
+ }
273
+ .kit-alert[data-size='lg'] {
274
+ --kit-alert-px: 20px;
275
+ --kit-alert-gap: 10px;
276
+ --kit-alert-font: 1.125rem;
277
+ }
278
+ .kit-alert[data-size='xl'] {
279
+ --kit-alert-px: 24px;
280
+ --kit-alert-gap: 12px;
281
+ --kit-alert-font: 1.25rem;
219
282
  }
220
283
 
221
- .kit-alert[data-density='comfortable'] {
222
- --kit-alert-py: 0.95rem;
223
- --kit-alert-px: 1rem;
224
- --kit-alert-gap: 0.75rem;
284
+ /**
285
+ * tone
286
+ * @link nothing...
287
+ */
288
+ .kit-alert[data-tone='info'][data-variant='filled'] {
289
+ --kit-alert-bg: var(--kit-color-info);
290
+ --kit-alert-fg: var(--kit-color-on-info);
291
+ }
292
+ .kit-alert[data-tone='info'][data-variant='outline'],
293
+ .kit-alert[data-tone='info'][data-variant='text'] {
294
+ --kit-alert-fg: var(--kit-color-info);
225
295
  }
226
296
 
227
- .kit-alert[data-rounded='0'] {
228
- --kit-alert-radius: 0;
297
+ .kit-alert[data-tone='success'][data-variant='filled'] {
298
+ --kit-alert-bg: var(--kit-color-success);
299
+ --kit-alert-fg: var(--kit-color-on-success);
229
300
  }
230
- .kit-alert[data-rounded='xs'] {
231
- --kit-alert-radius: 2px;
301
+ .kit-alert[data-tone='success'][data-variant='outline'],
302
+ .kit-alert[data-tone='success'][data-variant='text'] {
303
+ --kit-alert-fg: var(--kit-color-success);
232
304
  }
233
- .kit-alert[data-rounded='sm'] {
234
- --kit-alert-radius: 4px;
305
+
306
+ .kit-alert[data-tone='warning'][data-variant='filled'] {
307
+ --kit-alert-bg: var(--kit-color-warning);
308
+ --kit-alert-fg: var(--kit-color-on-warning);
235
309
  }
236
- .kit-alert[data-rounded='md'] {
237
- --kit-alert-radius: 8px;
310
+ .kit-alert[data-tone='warning'][data-variant='outline'],
311
+ .kit-alert[data-tone='warning'][data-variant='text'] {
312
+ --kit-alert-fg: var(--kit-color-warning);
238
313
  }
239
- .kit-alert[data-rounded='lg'] {
240
- --kit-alert-radius: 16px;
314
+
315
+ .kit-alert[data-tone='error'][data-variant='filled'] {
316
+ --kit-alert-bg: var(--kit-color-error);
317
+ --kit-alert-fg: var(--kit-color-on-error);
241
318
  }
242
- .kit-alert[data-rounded='xl'] {
243
- --kit-alert-radius: 99999px;
319
+ .kit-alert[data-tone='error'][data-variant='outline'],
320
+ .kit-alert[data-tone='error'][data-variant='text'] {
321
+ --kit-alert-fg: var(--kit-color-error);
244
322
  }
245
323
 
246
324
  .kit-alert__prepend,
@@ -271,7 +349,12 @@
271
349
  border-radius: 6px;
272
350
  }
273
351
 
352
+ .kit-alert .outline {
353
+ --outline-color: var(--kit-alert-bd);
354
+ }
355
+
274
356
  .kit-alert__close:hover {
275
357
  background: color-mix(in oklab, currentColor 10%, transparent);
358
+ border-radius: 9999px;
276
359
  }
277
360
  </style>
@@ -1,20 +1,22 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { Component, RoundedType } from '../../@types';
3
- export type AlertVariant = 'filled' | 'outline' | 'text';
4
- export type AlertDensity = 'compact' | 'comfortable' | 'default';
5
- export type AlertTone = 'default' | 'info' | 'success' | 'warning' | 'error';
2
+ import type { Component, DensityType, ElevationProps, RoundedType, SizeType } from '../../@types';
3
+ type AlertVariant = 'filled' | 'outline' | 'text';
4
+ type AlertTone = 'default' | 'info' | 'success' | 'warning' | 'error';
6
5
  export interface AlertProps extends Component {
7
6
  ref?: HTMLElement | null;
8
7
  is?: 'div' | 'section' | 'aside' | 'article';
9
8
  open?: boolean;
10
9
  closable?: boolean;
11
10
  variant?: AlertVariant;
12
- density?: AlertDensity;
13
- rounded?: RoundedType;
11
+ size?: SizeType;
12
+ density?: DensityType;
13
+ rounded?: RoundedType | 'full';
14
14
  tone?: AlertTone;
15
15
  color?: string;
16
16
  background?: string;
17
17
  prepend?: Snippet;
18
18
  append?: Snippet;
19
19
  close?: Snippet;
20
+ elevation?: ElevationProps;
20
21
  }
22
+ export {};
@@ -81,8 +81,8 @@
81
81
  --kit-color-on-success: hsl(0 0% 100%);
82
82
  --kit-color-warning: hsl(35 80% 45%);
83
83
  --kit-color-on-warning: hsl(222 20% 10%);
84
- --kit-color-danger: hsl(5 65% 48%);
85
- --kit-color-on-danger: hsl(0 0% 100%);
84
+ --kit-color-error: hsl(5 65% 48%);
85
+ --kit-color-on-error: hsl(0 0% 100%);
86
86
  --kit-color-info: hsl(205 60% 42%);
87
87
  --kit-color-on-info: hsl(0 0% 100%);
88
88
  --kit-color-focus: hsl(35 90% 56%);
@@ -114,8 +114,8 @@
114
114
  --kit-color-on-success: hsl(240 3% 11%);
115
115
  --kit-color-warning: hsl(35 85% 58%);
116
116
  --kit-color-on-warning: hsl(240 3% 11%);
117
- --kit-color-danger: hsl(5 70% 60%);
118
- --kit-color-on-danger: hsl(240 3% 11%);
117
+ --kit-color-error: hsl(5 70% 60%);
118
+ --kit-color-on-error: hsl(240 3% 11%);
119
119
  --kit-color-info: hsl(205 65% 58%);
120
120
  --kit-color-on-info: hsl(240 3% 11%);
121
121
  --kit-color-focus: hsl(35 90% 62%);