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
@@ -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 type { AppbarProps } from './appbar.types.js';
5
5
 
@@ -12,31 +12,22 @@
12
12
  's-class': sClass,
13
13
  's-style': sStyle,
14
14
  classContent,
15
+ size = 'md',
15
16
  variant = 'filled',
16
17
  rounded = 0,
17
18
  background,
18
19
  color,
19
20
  density = 'default',
21
+ elevation,
20
22
  ...rest
21
23
  }: AppbarProps = $props();
22
24
 
23
- let safeVariant = $derived(
24
- typeof variant === 'string' && (variant === 'outline' || variant === 'text')
25
- ? variant
26
- : 'filled'
27
- );
28
-
29
- let safeDensity = $derived(
30
- typeof density === 'string' &&
31
- (density === 'compact' || density === 'comfortable' || density === 'default')
32
- ? density
33
- : 'default'
34
- );
35
-
36
25
  let { classProps, styleProps, restProps } = $derived(
37
26
  makeComponentProps(rest as Record<string, unknown>)
38
27
  );
39
28
 
29
+ let elevationState = $derived(useElevation(elevation));
30
+
40
31
  let componentClass = $derived(
41
32
  useClassName({
42
33
  baseClass: 'kit-appbar',
@@ -65,12 +56,11 @@
65
56
  })
66
57
  );
67
58
 
68
- let mergedStyle = $derived(
59
+ let resolvedStyle = $derived(
69
60
  [
70
61
  componentStyle,
71
- background ? `--kit-appbar-bg:${background}` : '',
72
- color ? `--kit-appbar-fg:${color}` : '',
73
- typeof rounded === 'string' && rounded.includes('px') ? `--kit-appbar-radius:${rounded}` : ''
62
+ color ? `--kit-appbar-fg:${color && `var(--kit-color-${color})`}` : '',
63
+ background ? `--kit-appbar-bg:${background && `var(--kit-color-${background})`}` : ''
74
64
  ]
75
65
  .filter(Boolean)
76
66
  .join('; ')
@@ -81,13 +71,17 @@
81
71
  this={is}
82
72
  bind:this={ref}
83
73
  class={componentClass}
84
- style={mergedStyle}
85
- {...restProps}
86
- data-variant={safeVariant}
87
- data-density={safeDensity}
74
+ style={resolvedStyle}
75
+ data-size={size}
76
+ data-variant={variant}
77
+ data-density={density}
88
78
  data-rounded={rounded}
79
+ data-elevation={elevationState.base}
80
+ data-elevation-hover={elevationState.hover}
81
+ data-elevation-active={elevationState.active}
82
+ {...restProps}
89
83
  >
90
- {#if safeVariant === 'outline'}
84
+ {#if variant === 'outline'}
91
85
  <span class="outline"></span>
92
86
  {/if}
93
87
 
@@ -98,68 +92,133 @@
98
92
 
99
93
  <style>
100
94
  .kit-appbar {
101
- --kit-appbar-bg: var(--kit-surface-2);
102
- --kit-appbar-fg: var(--kit-fg);
103
- --kit-appbar-radius: 1rem;
104
- --kit-appbar-size: 4rem;
105
- --kit-appbar-padding-x: 1rem;
106
- --kit-appbar-padding-wrapper: 0;
107
- --kit-appbar-bd: color-mix(in oklab, var(--kit-appbar-fg), transparent 88%);
108
-
109
95
  display: flex;
110
96
  align-items: center;
111
97
  box-sizing: border-box;
112
98
  position: relative;
113
99
  width: 100%;
114
- min-height: var(--kit-appbar-size);
115
- padding-inline: var(--kit-appbar-padding-x);
100
+ gap: var(--kit-appbar-gap);
101
+ min-height: calc(var(--kit-appbar-h) * var(--kit-appbar-density-h-scale));
102
+ padding: calc(var(--kit-appbar-px) * var(--kit-appbar-density-scale));
116
103
  border-radius: var(--kit-appbar-radius);
117
104
  color: var(--kit-appbar-fg);
118
105
  background-color: var(--kit-appbar-bg);
119
106
  overflow: hidden;
107
+ font-size: var(--kit-appbar-font);
108
+ transition:
109
+ background 140ms ease,
110
+ color 140ms ease,
111
+ box-shadow 140ms ease,
112
+ translate 140ms ease;
120
113
  }
121
114
 
122
- .kit-appbar[data-variant='text'] {
123
- --kit-appbar-bd: transparent;
115
+ /**
116
+ * rounded
117
+ * @link ...
118
+ */
119
+ .kit-appbar[data-rounded='0'] {
120
+ --kit-appbar-radius: var(--kit-shape-none);
121
+ }
122
+ .kit-appbar[data-rounded='xs'] {
123
+ --kit-appbar-radius: var(--kit-shape-xs);
124
+ }
125
+ .kit-appbar[data-rounded='sm'] {
126
+ --kit-appbar-radius: var(--kit-shape-sm);
127
+ }
128
+ .kit-appbar[data-rounded='md'] {
129
+ --kit-appbar-radius: var(--kit-shape-md);
130
+ }
131
+ .kit-appbar[data-rounded='lg'] {
132
+ --kit-appbar-radius: var(--kit-shape-lg);
133
+ }
134
+ .kit-appbar[data-rounded='xl'] {
135
+ --kit-appbar-radius: var(--kit-shape-xl);
136
+ }
137
+ .kit-appbar[data-rounded='full'] {
138
+ --kit-appbar-radius: var(--kit-shape-full);
124
139
  }
125
140
 
141
+ /**
142
+ * density
143
+ * @link no links
144
+ */
145
+ .kit-appbar[data-density='none'] {
146
+ --kit-appbar-density-scale: 0;
147
+ --kit-appbar-density-h-scale: 0;
148
+ }
126
149
  .kit-appbar[data-density='compact'] {
127
- --kit-appbar-size: 3.5rem;
128
- --kit-appbar-padding-x: 0.75rem;
150
+ --kit-appbar-density-scale: 0.9;
151
+ --kit-appbar-density-h-scale: 0.92;
129
152
  }
130
-
131
153
  .kit-appbar[data-density='default'] {
132
- --kit-appbar-size: 4rem;
133
- --kit-appbar-padding-x: 1rem;
154
+ --kit-appbar-density-scale: 1;
155
+ --kit-appbar-density-h-scale: 1;
134
156
  }
135
-
136
157
  .kit-appbar[data-density='comfortable'] {
137
- --kit-appbar-size: 4.5rem;
138
- --kit-appbar-padding-x: 1.5rem;
158
+ --kit-appbar-density-scale: 1.1;
159
+ --kit-appbar-density-h-scale: 1.15;
139
160
  }
140
161
 
141
- .kit-appbar[data-rounded='0'] {
142
- --kit-appbar-radius: 0;
143
- }
162
+ /**
163
+ * variant
164
+ * @link no links...
165
+ */
166
+ .kit-appbar[data-variant='filled'] {
167
+ --kit-appbar-bg: var(--kit-color-surface-1);
168
+ --kit-appbar-fg: var(--kit-color-text);
144
169
 
145
- .kit-appbar[data-rounded='xs'] {
146
- --kit-appbar-radius: 2px;
170
+ --kit-appbar-hover-bg: color-mix(in oklab, var(--kit-appbar-bg), black 10%);
171
+ --kit-appbar-active-bg: color-mix(in oklab, var(--kit-appbar-bg), black 16%);
147
172
  }
173
+ .kit-appbar[data-variant='outline'] {
174
+ --kit-appbar-bg: transparent;
175
+ --kit-appbar-fg: var(--kit-color-text);
176
+ --kit-appbar-bd: var(--kit-appbar-fg);
148
177
 
149
- .kit-appbar[data-rounded='sm'] {
150
- --kit-appbar-radius: 4px;
178
+ --kit-appbar-hover-bg: color-mix(in oklab, var(--kit-appbar-fg), transparent 80%);
179
+ --kit-appbar-active-bg: color-mix(in oklab, var(--kit-appbar-fg), transparent 92%);
151
180
  }
181
+ .kit-appbar[data-variant='text'] {
182
+ --kit-appbar-bg: transparent;
183
+ --kit-appbar-fg: var(--kit-color-text);
152
184
 
153
- .kit-appbar[data-rounded='md'] {
154
- --kit-appbar-radius: 8px;
185
+ --kit-appbar-hover-bg: color-mix(in oklab, var(--kit-appbar-fg), transparent 80%);
186
+ --kit-appbar-active-bg: color-mix(in oklab, var(--kit-appbar-fg), transparent 92%);
155
187
  }
156
188
 
157
- .kit-appbar[data-rounded='lg'] {
158
- --kit-appbar-radius: 16px;
189
+ /**
190
+ * size
191
+ * @link nothing...
192
+ */
193
+ .kit-appbar[data-size='xs'] {
194
+ --kit-appbar-h: 28px;
195
+ --kit-appbar-px: 10px;
196
+ --kit-appbar-gap: 4px;
197
+ --kit-appbar-font: 0.75rem;
159
198
  }
160
-
161
- .kit-appbar[data-rounded='xl'] {
162
- --kit-appbar-radius: 99999px;
199
+ .kit-appbar[data-size='sm'] {
200
+ --kit-appbar-h: 32px;
201
+ --kit-appbar-px: 12px;
202
+ --kit-appbar-gap: 6px;
203
+ --kit-appbar-font: 0.875rem;
204
+ }
205
+ .kit-appbar[data-size='md'] {
206
+ --kit-appbar-h: 40px;
207
+ --kit-appbar-px: 14px;
208
+ --kit-appbar-gap: 8px;
209
+ --kit-appbar-font: 1rem;
210
+ }
211
+ .kit-appbar[data-size='lg'] {
212
+ --kit-appbar-h: 48px;
213
+ --kit-appbar-px: 16px;
214
+ --kit-appbar-gap: 10px;
215
+ --kit-appbar-font: 1.125rem;
216
+ }
217
+ .kit-appbar[data-size='xl'] {
218
+ --kit-appbar-h: 56px;
219
+ --kit-appbar-px: 18px;
220
+ --kit-appbar-gap: 12px;
221
+ --kit-appbar-font: 1.25rem;
163
222
  }
164
223
 
165
224
  .kit-appbar__wrapper {
@@ -175,7 +234,5 @@
175
234
 
176
235
  .kit-appbar .outline {
177
236
  --outline-color: var(--kit-appbar-bd);
178
-
179
- pointer-events: none;
180
237
  }
181
238
  </style>
@@ -1,14 +1,15 @@
1
- import type { Component, RoundedType } from '../../@types';
2
- type Density = 'compact' | 'comfortable' | 'default';
1
+ import type { Component, DensityType, ElevationProps, RoundedType, SizeType } from '../../@types';
3
2
  type Variant = 'filled' | 'outline' | 'text';
4
3
  export interface AppbarProps extends Component {
5
4
  ref?: HTMLElement | null;
6
5
  is?: 'div' | 'header' | 'nav';
7
6
  variant?: Variant;
8
- rounded?: RoundedType | string;
9
- density?: Density | Record<string, Density>;
7
+ rounded?: RoundedType | 'full';
8
+ density?: DensityType;
9
+ size?: SizeType;
10
10
  color?: string;
11
11
  background?: string;
12
12
  classContent?: string | string[] | undefined;
13
+ elevation?: ElevationProps;
13
14
  }
14
15
  export {};
@@ -1,10 +1,9 @@
1
1
  <script lang="ts">
2
2
  import { useClassName, useStyles } from '../../utils';
3
3
  import { makeComponentProps } from '../../html-mapped';
4
- import type { AspectRatioFit, AspectRatioProps, AspectRatioValue } from './aspect-ratio.types.js';
4
+ import type { AspectRatioProps, AspectRatioValue } from './aspect-ratio.types.js';
5
5
 
6
6
  const FALLBACK_RATIO = 16 / 9;
7
- const FALLBACK_FIT: AspectRatioFit = 'cover';
8
7
 
9
8
  function resolveRatio(value: AspectRatioValue | undefined): number {
10
9
  if (typeof value === 'number') {
@@ -33,10 +32,6 @@
33
32
  return Number.isFinite(asNumber) && asNumber > 0 ? asNumber : FALLBACK_RATIO;
34
33
  }
35
34
 
36
- function resolveFit(value: AspectRatioFit | undefined): AspectRatioFit {
37
- return value === 'cover' || value === 'contain' || value === 'fill' ? value : FALLBACK_FIT;
38
- }
39
-
40
35
  let {
41
36
  ref = $bindable(),
42
37
  is = 'div',
@@ -74,20 +69,16 @@
74
69
  );
75
70
 
76
71
  let resolvedRatio = $derived(resolveRatio(ratio ?? aspectRatio));
77
- let resolvedFit = $derived(resolveFit(fit));
78
- let mergedStyle = $derived(
79
- [componentStyle, `--kit-aspect-ratio: ${resolvedRatio}`, `--kit-aspect-fit: ${resolvedFit}`]
80
- .filter(Boolean)
81
- .join('; ')
82
- );
83
72
  </script>
84
73
 
85
74
  <svelte:element
86
75
  this={is}
87
76
  bind:this={ref}
88
77
  class={componentClass}
89
- style={mergedStyle}
78
+ style={componentStyle}
90
79
  data-inline={inline}
80
+ style:--kit-aspect-ratio={resolvedRatio}
81
+ style:--kit-aspect-fit={fit}
91
82
  {...restProps}
92
83
  >
93
84
  <div class="kit-aspect-ratio__inner">
@@ -1,6 +1,6 @@
1
1
  import type { Component } from '../../@types';
2
2
  export type AspectRatioValue = string | number;
3
- export type AspectRatioFit = 'cover' | 'contain' | 'fill';
3
+ type AspectRatioFit = 'cover' | 'contain' | 'fill';
4
4
  export interface AspectRatioProps extends Component {
5
5
  ref?: HTMLElement | null;
6
6
  is?: 'div' | 'span' | 'figure' | 'section' | 'article';
@@ -9,3 +9,4 @@ export interface AspectRatioProps extends Component {
9
9
  fit?: AspectRatioFit;
10
10
  inline?: boolean;
11
11
  }
12
+ export {};
@@ -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 type { AvatarProps } from './avatar.types.js';
5
5
 
@@ -13,6 +13,10 @@
13
13
  label = undefined,
14
14
  size = 'md',
15
15
  density = 'default',
16
+ rounded = 'full',
17
+ elevation,
18
+ color,
19
+ background,
16
20
  ...rest
17
21
  }: AvatarProps = $props();
18
22
 
@@ -37,33 +41,34 @@
37
41
  })
38
42
  );
39
43
 
40
- let safeSize = $derived(
41
- size === 'default'
42
- ? 'md'
43
- : size === 'xs' || size === 'sm' || size === 'md' || size === 'lg' || size === 'xl'
44
- ? size
45
- : 'md'
46
- );
47
-
48
- let safeDensity = $derived(
49
- density === 'compact' || density === 'comfortable' || density === 'default'
50
- ? density
51
- : 'default'
52
- );
53
-
44
+ let elevationState = $derived(useElevation(elevation));
54
45
  let contentType = $derived(label && label.trim().length > 0 ? 'label' : children);
55
46
  let displayLabel = $derived(label?.trim() ?? '');
47
+
48
+ let resolvedStyle = $derived(
49
+ [
50
+ componentStyle,
51
+ color ? `--kit-avatar-fg:${color && `var(--kit-color-${color})`}` : '',
52
+ background ? `--kit-avatar-bg:${background && `var(--kit-color-${background})`}` : ''
53
+ ]
54
+ .filter(Boolean)
55
+ .join('; ')
56
+ );
56
57
  </script>
57
58
 
58
59
  <svelte:element
59
60
  this={'div'}
60
61
  bind:this={ref}
61
62
  class={componentClass}
62
- style={componentStyle}
63
- {...restProps}
63
+ style={resolvedStyle}
64
64
  data-type={contentType}
65
- data-size={contentType === 'label' ? safeSize : undefined}
66
- data-density={contentType === 'label' ? safeDensity : undefined}
65
+ data-size={contentType === 'label' ? size : undefined}
66
+ data-density={contentType === 'label' ? density : undefined}
67
+ data-rounded={rounded}
68
+ data-elevation={elevationState.base}
69
+ data-elevation-hover={elevationState.hover}
70
+ data-elevation-active={elevationState.active}
71
+ {...restProps}
67
72
  >
68
73
  {#if contentType === 'label'}
69
74
  <span class="kit-avatar__label">{displayLabel}</span>
@@ -74,32 +79,25 @@
74
79
 
75
80
  <style>
76
81
  .kit-avatar {
77
- --kit-avatar-size-xs: 1.75rem;
78
- --kit-avatar-size-sm: 2rem;
79
- --kit-avatar-size-md: 2.25rem;
80
- --kit-avatar-size-lg: 2.5rem;
81
- --kit-avatar-size-xl: 2.75rem;
82
- --kit-avatar-font-xs: 0.75rem;
83
- --kit-avatar-font-sm: 0.8125rem;
84
- --kit-avatar-font-md: 0.875rem;
85
- --kit-avatar-font-lg: 1rem;
86
- --kit-avatar-font-xl: 1.125rem;
87
- --kit-avatar-size: var(--kit-avatar-size-md);
88
- --kit-avatar-font-size: var(--kit-avatar-font-md);
89
- --kit-avatar-density-scale: 1;
90
-
91
82
  display: inline-flex;
92
83
  align-items: center;
93
84
  justify-content: center;
94
- width: calc(var(--kit-avatar-size) * var(--kit-avatar-density-scale));
95
- height: calc(var(--kit-avatar-size) * var(--kit-avatar-density-scale));
96
- border-radius: 9999px;
85
+ width: calc(var(--kit-avatar-h) * var(--kit-avatar-density-h-scale));
86
+ height: calc(var(--kit-avatar-h) * var(--kit-avatar-density-h-scale));
87
+ padding: calc(var(--kit-avatar-px) * var(--kit-avatar-density-scale));
97
88
  overflow: hidden;
98
- background: var(--kit-surface-2);
99
- color: var(--kit-fg);
89
+ background: var(--kit-color-surface-3);
90
+ color: var(--kit-color-text);
91
+ border-radius: var(--kit-avatar-radius);
92
+ border: 0;
100
93
  font-weight: 600;
101
94
  line-height: 1;
102
95
  user-select: none;
96
+ transition:
97
+ background 140ms ease,
98
+ color 140ms ease,
99
+ box-shadow 140ms ease,
100
+ translate 140ms ease;
103
101
  }
104
102
 
105
103
  .kit-avatar[data-type='label'] {
@@ -107,49 +105,101 @@
107
105
  text-transform: uppercase;
108
106
  }
109
107
 
110
- .kit-avatar[data-size='xs'] {
111
- --kit-avatar-size: var(--kit-avatar-size-xs);
112
- --kit-avatar-font-size: var(--kit-avatar-font-xs);
108
+ .kit-avatar__label {
109
+ display: inline-flex;
110
+ align-items: center;
111
+ justify-content: center;
112
+ max-width: 100%;
113
+ padding-inline: 0.25rem;
113
114
  }
114
- .kit-avatar[data-size='sm'] {
115
- --kit-avatar-size: var(--kit-avatar-size-sm);
116
- --kit-avatar-font-size: var(--kit-avatar-font-sm);
115
+
116
+ .kit-avatar :global(img) {
117
+ display: block;
118
+ width: 100%;
119
+ height: 100%;
120
+ object-fit: cover;
117
121
  }
118
- .kit-avatar[data-size='md'] {
119
- --kit-avatar-size: var(--kit-avatar-size-md);
120
- --kit-avatar-font-size: var(--kit-avatar-font-md);
122
+
123
+ /**
124
+ * rounded
125
+ * @link ...
126
+ */
127
+ .kit-avatar[data-rounded='0'] {
128
+ --kit-avatar-radius: var(--kit-shape-none);
121
129
  }
122
- .kit-avatar[data-size='lg'] {
123
- --kit-avatar-size: var(--kit-avatar-size-lg);
124
- --kit-avatar-font-size: var(--kit-avatar-font-lg);
130
+ .kit-avatar[data-rounded='xs'] {
131
+ --kit-avatar-radius: var(--kit-shape-xs);
125
132
  }
126
- .kit-avatar[data-size='xl'] {
127
- --kit-avatar-size: var(--kit-avatar-size-xl);
128
- --kit-avatar-font-size: var(--kit-avatar-font-xl);
133
+ .kit-avatar[data-rounded='sm'] {
134
+ --kit-avatar-radius: var(--kit-shape-sm);
135
+ }
136
+ .kit-avatar[data-rounded='md'] {
137
+ --kit-avatar-radius: var(--kit-shape-md);
138
+ }
139
+ .kit-avatar[data-rounded='lg'] {
140
+ --kit-avatar-radius: var(--kit-shape-lg);
141
+ }
142
+ .kit-avatar[data-rounded='xl'] {
143
+ --kit-avatar-radius: var(--kit-shape-xl);
129
144
  }
130
145
 
146
+ .kit-avatar[data-rounded='full'] {
147
+ --kit-avatar-radius: var(--kit-shape-full);
148
+ }
149
+
150
+ /**
151
+ * density
152
+ * @link ...
153
+ */
154
+ .kit-avatar[data-density='none'] {
155
+ --kit-avatar-density-scale: 0;
156
+ --kit-avatar-density-h-scale: 0;
157
+ }
131
158
  .kit-avatar[data-density='compact'] {
132
- --kit-avatar-density-scale: 0.9;
159
+ --kit-avatar-density-scale: 0.8;
160
+ --kit-avatar-density-h-scale: 0.92;
133
161
  }
134
162
  .kit-avatar[data-density='default'] {
135
163
  --kit-avatar-density-scale: 1;
164
+ --kit-avatar-density-h-scale: 1;
136
165
  }
137
166
  .kit-avatar[data-density='comfortable'] {
138
- --kit-avatar-density-scale: 1.1;
167
+ --kit-list-density-scale: 1.1;
168
+ --kit-avatar-density-h-scale: 1.15;
139
169
  }
140
170
 
141
- .kit-avatar__label {
142
- display: inline-flex;
143
- align-items: center;
144
- justify-content: center;
145
- max-width: 100%;
146
- padding-inline: 0.25rem;
171
+ /**
172
+ * size
173
+ * @link nothing...
174
+ */
175
+ .kit-avatar[data-size='xs'] {
176
+ --kit-avatar-h: 28px;
177
+ --kit-avatar-px: 10px;
178
+ --kit-avatar-gap: 4px;
179
+ --kit-avatar-font: 0.75rem;
147
180
  }
148
-
149
- .kit-avatar :global(img) {
150
- display: block;
151
- width: 100%;
152
- height: 100%;
153
- object-fit: cover;
181
+ .kit-avatar[data-size='sm'] {
182
+ --kit-avatar-h: 32px;
183
+ --kit-avatar-px: 12px;
184
+ --kit-avatar-gap: 6px;
185
+ --kit-avatar-font: 0.875rem;
186
+ }
187
+ .kit-avatar[data-size='md'] {
188
+ --kit-avatar-h: 40px;
189
+ --kit-avatar-px: 16px;
190
+ --kit-avatar-gap: 8px;
191
+ --kit-avatar-font: 1rem;
192
+ }
193
+ .kit-avatar[data-size='lg'] {
194
+ --kit-avatar-h: 48px;
195
+ --kit-avatar-px: 20px;
196
+ --kit-avatar-gap: 10px;
197
+ --kit-avatar-font: 1.125rem;
198
+ }
199
+ .kit-avatar[data-size='xl'] {
200
+ --kit-avatar-h: 56px;
201
+ --kit-avatar-px: 24px;
202
+ --kit-avatar-gap: 12px;
203
+ --kit-avatar-font: 1.25rem;
154
204
  }
155
205
  </style>
@@ -1,9 +1,11 @@
1
- import type { Component } from '../../@types';
2
- export type AvatarSize = 'default' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
- export type AvatarDensity = 'compact' | 'comfortable' | 'default';
1
+ import type { Component, DensityType, ElevationProps, RoundedType, SizeType } from '../../@types';
4
2
  export interface AvatarProps extends Component {
5
3
  ref?: HTMLElement | null;
6
4
  label?: string;
7
- size?: AvatarSize;
8
- density?: AvatarDensity;
5
+ size?: SizeType;
6
+ density?: DensityType;
7
+ rounded?: RoundedType | 'full';
8
+ elevation?: ElevationProps;
9
+ color?: string;
10
+ background?: string;
9
11
  }