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.
- package/dist/components/accordion/accordion.svelte +173 -35
- package/dist/components/accordion/accordion.types.d.ts +8 -3
- package/dist/components/accordion/modules/accordion-item.svelte +79 -74
- package/dist/components/alert/alert.svelte +204 -115
- package/dist/components/alert/alert.types.d.ts +8 -6
- package/dist/components/app/app.svelte +76 -37
- package/dist/components/appbar/appbar.svelte +116 -59
- package/dist/components/appbar/appbar.types.d.ts +5 -4
- package/dist/components/aspect-ratio/aspect-ratio.svelte +4 -13
- package/dist/components/aspect-ratio/aspect-ratio.types.d.ts +2 -1
- package/dist/components/avatar/avatar.svelte +117 -67
- package/dist/components/avatar/avatar.types.d.ts +7 -5
- package/dist/components/btn/btn.svelte +175 -171
- package/dist/components/btn/btn.types.d.ts +5 -2
- package/dist/components/card/card.svelte +11 -3
- package/dist/components/card/modules/card-actions.svelte +1 -1
- package/dist/components/chip/chip.svelte +172 -142
- package/dist/components/chip/chip.types.d.ts +7 -3
- package/dist/components/dialog/dialog.svelte +94 -83
- package/dist/components/dialog/dialog.types.d.ts +7 -5
- package/dist/components/dropdown/dropdown.svelte +47 -31
- package/dist/components/dropdown/dropdown.types.d.ts +4 -2
- package/dist/components/icon/icon.svelte +34 -51
- package/dist/components/list/list.svelte +10 -4
- package/dist/components/list/modules/list-item.svelte +10 -59
- package/dist/components/modal/modal.svelte +114 -102
- package/dist/components/modal/modal.types.d.ts +7 -5
- package/dist/components/popover/popover.svelte +54 -36
- package/dist/components/popover/popover.types.d.ts +4 -2
- package/dist/components/separator/separator.svelte +15 -23
- package/dist/components/separator/separator.types.d.ts +1 -2
- package/dist/components/textfield/textfield.svelte +181 -152
- package/dist/components/textfield/textfield.types.d.ts +4 -3
- package/dist/components/toolbar/toolbar.svelte +127 -103
- package/dist/components/toolbar/toolbar.types.d.ts +6 -7
- package/dist/components/tooltip/tooltip.svelte +40 -40
- package/dist/components/tooltip/tooltip.types.d.ts +3 -3
- package/package.json +1 -1
|
@@ -1,23 +1,7 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { makeComponentProps } from '../../html-mapped';
|
|
3
|
-
import { useClassName, useStyles, disabledScroll } from '../../utils';
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
function resolveSize(value: DialogSize | undefined): DialogSize {
|
|
7
|
-
return value === 'xs' || value === 'sm' || value === 'md' || value === 'lg' || value === 'xl'
|
|
8
|
-
? value
|
|
9
|
-
: 'md';
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
function resolvePosition(value: DialogPosition | undefined): DialogPosition {
|
|
13
|
-
return value === 'top' || value === 'center' || value === 'bottom' ? value : 'center';
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
function resolveDensity(value: DialogDensity | undefined): DialogDensity {
|
|
17
|
-
return value === 'compact' || value === 'comfortable' || value === 'default'
|
|
18
|
-
? value
|
|
19
|
-
: 'default';
|
|
20
|
-
}
|
|
3
|
+
import { useClassName, useStyles, disabledScroll, useElevation } from '../../utils';
|
|
4
|
+
import type { DialogProps } from './dialog.types.js';
|
|
21
5
|
|
|
22
6
|
let {
|
|
23
7
|
ref = $bindable(),
|
|
@@ -33,8 +17,10 @@
|
|
|
33
17
|
density = 'default',
|
|
34
18
|
rounded = 'md',
|
|
35
19
|
classContent = '',
|
|
36
|
-
color
|
|
37
|
-
background
|
|
20
|
+
color,
|
|
21
|
+
background,
|
|
22
|
+
elevation = '2',
|
|
23
|
+
space,
|
|
38
24
|
...rest
|
|
39
25
|
}: DialogProps = $props();
|
|
40
26
|
|
|
@@ -42,6 +28,8 @@
|
|
|
42
28
|
makeComponentProps(rest as Record<string, unknown>)
|
|
43
29
|
);
|
|
44
30
|
|
|
31
|
+
let elevationState = $derived(useElevation(elevation));
|
|
32
|
+
|
|
45
33
|
let componentClass = $derived(
|
|
46
34
|
useClassName({
|
|
47
35
|
baseClass: 'kit-dialog',
|
|
@@ -65,19 +53,6 @@
|
|
|
65
53
|
: `${classContent ?? ''}`.trim()
|
|
66
54
|
);
|
|
67
55
|
|
|
68
|
-
let safeSize = $derived(resolveSize(size));
|
|
69
|
-
let safePosition = $derived(resolvePosition(position));
|
|
70
|
-
let safeDensity = $derived(resolveDensity(density));
|
|
71
|
-
let mergedStyle = $derived(
|
|
72
|
-
[
|
|
73
|
-
componentStyle,
|
|
74
|
-
color ? `--kit-dialog-fg:${color}` : '',
|
|
75
|
-
background ? `--kit-dialog-bg:${background}` : ''
|
|
76
|
-
]
|
|
77
|
-
.filter(Boolean)
|
|
78
|
-
.join('; ')
|
|
79
|
-
);
|
|
80
|
-
|
|
81
56
|
$effect(() => {
|
|
82
57
|
if (!ref) return;
|
|
83
58
|
|
|
@@ -120,14 +95,24 @@
|
|
|
120
95
|
if (event.target !== ref || persistent) return;
|
|
121
96
|
open = false;
|
|
122
97
|
}
|
|
98
|
+
|
|
99
|
+
let resolvedStyle = $derived(
|
|
100
|
+
[
|
|
101
|
+
componentStyle,
|
|
102
|
+
color ? `--kit-dialog-fg:${color && `var(--kit-color-${color})`}` : '',
|
|
103
|
+
background ? `--kit-dialog-bg:${background && `var(--kit-color-${background})`}` : ''
|
|
104
|
+
]
|
|
105
|
+
.filter(Boolean)
|
|
106
|
+
.join('; ')
|
|
107
|
+
);
|
|
123
108
|
</script>
|
|
124
109
|
|
|
125
110
|
<dialog
|
|
126
111
|
bind:this={ref}
|
|
127
112
|
class={componentClass}
|
|
128
|
-
style={
|
|
129
|
-
data-size={
|
|
130
|
-
data-position={
|
|
113
|
+
style={resolvedStyle}
|
|
114
|
+
data-size={size}
|
|
115
|
+
data-position={position}
|
|
131
116
|
data-persistent={persistent}
|
|
132
117
|
onclose={handleClose}
|
|
133
118
|
oncancel={handleCancel}
|
|
@@ -136,9 +121,15 @@
|
|
|
136
121
|
<div
|
|
137
122
|
{...restProps}
|
|
138
123
|
class={['kit-dialog__content', contentClass]}
|
|
139
|
-
data-density={
|
|
124
|
+
data-density={density}
|
|
140
125
|
data-rounded={rounded}
|
|
126
|
+
data-elevation={elevationState.base}
|
|
127
|
+
data-elevation-hover={elevationState.hover}
|
|
128
|
+
data-elevation-active={elevationState.active}
|
|
141
129
|
onclick={(event: MouseEvent) => event.stopPropagation()}
|
|
130
|
+
style:--kit-dialog-fg={color && `var(--kit-color-${color})`}
|
|
131
|
+
style:--kit-dialog-bg={background && `var(--kit-color-${background})`}
|
|
132
|
+
style:--kit-dialog-space={space}
|
|
142
133
|
>
|
|
143
134
|
{@render children?.()}
|
|
144
135
|
</div>
|
|
@@ -146,14 +137,6 @@
|
|
|
146
137
|
|
|
147
138
|
<style>
|
|
148
139
|
.kit-dialog {
|
|
149
|
-
--kit-dialog-bg: var(--kit-surface-1);
|
|
150
|
-
--kit-dialog-fg: var(--kit-fg);
|
|
151
|
-
--kit-dialog-bd: var(--kit-border);
|
|
152
|
-
--kit-dialog-radius: 12px;
|
|
153
|
-
--kit-dialog-px: 1rem;
|
|
154
|
-
--kit-dialog-py: 1rem;
|
|
155
|
-
--kit-dialog-max: min(32rem, calc(100vw - 2rem));
|
|
156
|
-
|
|
157
140
|
border: 0;
|
|
158
141
|
padding: 0;
|
|
159
142
|
margin: auto;
|
|
@@ -165,97 +148,125 @@
|
|
|
165
148
|
}
|
|
166
149
|
|
|
167
150
|
.kit-dialog::backdrop {
|
|
168
|
-
background:
|
|
151
|
+
background: color-mix(in oklab, var(--kit-color-shadow), transparent 70%);
|
|
169
152
|
backdrop-filter: blur(2px);
|
|
170
153
|
}
|
|
171
154
|
|
|
172
|
-
|
|
173
|
-
|
|
155
|
+
/**
|
|
156
|
+
* position
|
|
157
|
+
* @link nothing...
|
|
158
|
+
*/
|
|
159
|
+
.kit-dialog[data-position='top'],
|
|
160
|
+
.kit-dialog[data-position='top-left'],
|
|
161
|
+
.kit-dialog[data-position='top-right'] {
|
|
162
|
+
margin-top: var(--kit-dialog-space, 1rem);
|
|
174
163
|
margin-bottom: auto;
|
|
175
164
|
}
|
|
176
|
-
|
|
177
|
-
.kit-dialog[data-position='center']
|
|
165
|
+
.kit-dialog[data-position='center'],
|
|
166
|
+
.kit-dialog[data-position='center-left'],
|
|
167
|
+
.kit-dialog[data-position='center-right'] {
|
|
178
168
|
margin-top: auto;
|
|
179
169
|
margin-bottom: auto;
|
|
180
170
|
}
|
|
181
|
-
|
|
182
|
-
.kit-dialog[data-position='bottom']
|
|
171
|
+
.kit-dialog[data-position='bottom'],
|
|
172
|
+
.kit-dialog[data-position='bottom-left'],
|
|
173
|
+
.kit-dialog[data-position='bottom-right'] {
|
|
183
174
|
margin-top: auto;
|
|
184
|
-
margin-bottom: 1rem;
|
|
175
|
+
margin-bottom: var(--kit-dialog-space, 1rem);
|
|
176
|
+
}
|
|
177
|
+
.kit-dialog[data-position='top-left'] .kit-dialog__content,
|
|
178
|
+
.kit-dialog[data-position='center-left'] .kit-dialog__content,
|
|
179
|
+
.kit-dialog[data-position='bottom-left'] .kit-dialog__content {
|
|
180
|
+
margin-left: var(--kit-dialog-space, 1rem);
|
|
181
|
+
}
|
|
182
|
+
.kit-dialog[data-position='top-right'] .kit-dialog__content,
|
|
183
|
+
.kit-dialog[data-position='center-right'] .kit-dialog__content,
|
|
184
|
+
.kit-dialog[data-position='bottom-right'] .kit-dialog__content {
|
|
185
|
+
margin-right: var(--kit-dialog-space, 1rem);
|
|
185
186
|
}
|
|
186
187
|
|
|
188
|
+
/**
|
|
189
|
+
* size
|
|
190
|
+
* @link nothing...
|
|
191
|
+
*/
|
|
187
192
|
.kit-dialog[data-size='xs'] {
|
|
188
|
-
--kit-dialog-max:
|
|
193
|
+
--kit-dialog-max: 20rem;
|
|
194
|
+
--kit-dialog-px: 10px;
|
|
189
195
|
}
|
|
190
196
|
|
|
191
197
|
.kit-dialog[data-size='sm'] {
|
|
192
|
-
--kit-dialog-max:
|
|
198
|
+
--kit-dialog-max: 24rem;
|
|
199
|
+
--kit-dialog-px: 12px;
|
|
193
200
|
}
|
|
194
201
|
|
|
195
202
|
.kit-dialog[data-size='md'] {
|
|
196
|
-
--kit-dialog-max:
|
|
203
|
+
--kit-dialog-max: 32rem;
|
|
204
|
+
--kit-dialog-px: 16px;
|
|
197
205
|
}
|
|
198
206
|
|
|
199
207
|
.kit-dialog[data-size='lg'] {
|
|
200
|
-
--kit-dialog-max:
|
|
208
|
+
--kit-dialog-max: 42rem;
|
|
209
|
+
--kit-dialog-px: 20px;
|
|
201
210
|
}
|
|
202
211
|
|
|
203
212
|
.kit-dialog[data-size='xl'] {
|
|
204
|
-
--kit-dialog-max:
|
|
213
|
+
--kit-dialog-max: 56rem;
|
|
214
|
+
--kit-dialog-px: 24px;
|
|
205
215
|
}
|
|
206
216
|
|
|
207
217
|
.kit-dialog__content {
|
|
218
|
+
--kit-dialog-fg: var(--kit-color-text);
|
|
219
|
+
--kit-dialog-bg: var(--kit-color-surface-1);
|
|
220
|
+
|
|
208
221
|
box-sizing: border-box;
|
|
209
|
-
width: min(100%, var(--kit-dialog-max));
|
|
222
|
+
width: min(100%, min(var(--kit-dialog-max), calc(100vw - 2rem)));
|
|
210
223
|
max-height: calc(100dvh - 2rem);
|
|
211
224
|
overflow: auto;
|
|
212
|
-
padding: var(--kit-dialog-
|
|
213
|
-
border:
|
|
225
|
+
padding: calc(var(--kit-dialog-px) * var(--kit-dialog-density-scale));
|
|
226
|
+
border: 0;
|
|
214
227
|
border-radius: var(--kit-dialog-radius);
|
|
215
228
|
background: var(--kit-dialog-bg);
|
|
216
229
|
color: var(--kit-dialog-fg);
|
|
217
230
|
margin: 0 auto;
|
|
218
|
-
box-shadow:
|
|
219
|
-
0 20px 50px rgb(15 23 42 / 0.18),
|
|
220
|
-
0 4px 16px rgb(15 23 42 / 0.1);
|
|
221
231
|
}
|
|
222
232
|
|
|
233
|
+
/**
|
|
234
|
+
* density
|
|
235
|
+
* @link no links
|
|
236
|
+
*/
|
|
237
|
+
.kit-dialog__content[data-density='none'] {
|
|
238
|
+
--kit-dialog-density-scale: 0;
|
|
239
|
+
}
|
|
223
240
|
.kit-dialog__content[data-density='compact'] {
|
|
224
|
-
--kit-dialog-
|
|
225
|
-
--kit-dialog-py: 0.75rem;
|
|
241
|
+
--kit-dialog-density-scale: 0.9;
|
|
226
242
|
}
|
|
227
|
-
|
|
228
243
|
.kit-dialog__content[data-density='default'] {
|
|
229
|
-
--kit-dialog-
|
|
230
|
-
--kit-dialog-py: 1rem;
|
|
244
|
+
--kit-dialog-density-scale: 1;
|
|
231
245
|
}
|
|
232
|
-
|
|
233
246
|
.kit-dialog__content[data-density='comfortable'] {
|
|
234
|
-
--kit-dialog-
|
|
235
|
-
--kit-dialog-py: 1.25rem;
|
|
247
|
+
--kit-dialog-density-scale: 1.1;
|
|
236
248
|
}
|
|
237
249
|
|
|
250
|
+
/**
|
|
251
|
+
* rounded
|
|
252
|
+
* @link ...
|
|
253
|
+
*/
|
|
238
254
|
.kit-dialog__content[data-rounded='0'] {
|
|
239
|
-
--kit-dialog-radius:
|
|
255
|
+
--kit-dialog-radius: var(--kit-shape-none);
|
|
240
256
|
}
|
|
241
|
-
|
|
242
257
|
.kit-dialog__content[data-rounded='xs'] {
|
|
243
|
-
--kit-dialog-radius:
|
|
258
|
+
--kit-dialog-radius: var(--kit-shape-xs);
|
|
244
259
|
}
|
|
245
|
-
|
|
246
260
|
.kit-dialog__content[data-rounded='sm'] {
|
|
247
|
-
--kit-dialog-radius:
|
|
261
|
+
--kit-dialog-radius: var(--kit-shape-sm);
|
|
248
262
|
}
|
|
249
|
-
|
|
250
263
|
.kit-dialog__content[data-rounded='md'] {
|
|
251
|
-
--kit-dialog-radius:
|
|
264
|
+
--kit-dialog-radius: var(--kit-shape-md);
|
|
252
265
|
}
|
|
253
|
-
|
|
254
266
|
.kit-dialog__content[data-rounded='lg'] {
|
|
255
|
-
--kit-dialog-radius:
|
|
267
|
+
--kit-dialog-radius: var(--kit-shape-lg);
|
|
256
268
|
}
|
|
257
|
-
|
|
258
269
|
.kit-dialog__content[data-rounded='xl'] {
|
|
259
|
-
--kit-dialog-radius:
|
|
270
|
+
--kit-dialog-radius: var(--kit-shape-xl);
|
|
260
271
|
}
|
|
261
272
|
</style>
|
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import type { Component, RoundedType } from '../../@types';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export type DialogDensity = 'compact' | 'comfortable' | 'default';
|
|
1
|
+
import type { Component, DensityType, ElevationProps, RoundedType } from '../../@types';
|
|
2
|
+
type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3
|
+
type DialogPosition = 'top' | 'center' | 'bottom' | 'top-left' | 'top-right' | 'center-left' | 'center-right' | 'bottom-left' | 'bottom-right';
|
|
5
4
|
export interface DialogProps extends Component {
|
|
6
5
|
ref?: HTMLDialogElement | null;
|
|
7
6
|
open?: boolean;
|
|
8
7
|
persistent?: boolean;
|
|
9
8
|
size?: DialogSize;
|
|
10
9
|
position?: DialogPosition;
|
|
11
|
-
density?:
|
|
10
|
+
density?: DensityType;
|
|
12
11
|
rounded?: RoundedType;
|
|
13
12
|
classContent?: string | string[] | undefined;
|
|
14
13
|
color?: string;
|
|
15
14
|
background?: string;
|
|
15
|
+
elevation?: ElevationProps;
|
|
16
|
+
space?: string;
|
|
16
17
|
}
|
|
18
|
+
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
2
|
import { onDestroy } from 'svelte';
|
|
3
|
-
import { useClassName, useStyles, clickOutside } from '../../utils';
|
|
3
|
+
import { useClassName, useStyles, clickOutside, useElevation } from '../../utils';
|
|
4
4
|
import { makeComponentProps } from '../../html-mapped';
|
|
5
5
|
import { getPositions } from './dropdown.svelte.js';
|
|
6
6
|
import type { DropdownProps, ModelDropdownProps } from './dropdown.types.js';
|
|
@@ -9,29 +9,27 @@
|
|
|
9
9
|
ref = $bindable(),
|
|
10
10
|
children,
|
|
11
11
|
activator,
|
|
12
|
-
rounded,
|
|
12
|
+
rounded = 'md',
|
|
13
13
|
position = 'bottom',
|
|
14
14
|
closeOnClick = false,
|
|
15
15
|
openOnHover = false,
|
|
16
16
|
color,
|
|
17
17
|
background,
|
|
18
|
+
density = 'default',
|
|
18
19
|
class: className = '',
|
|
19
20
|
style: styleAttr = '',
|
|
20
21
|
's-class': sClass,
|
|
21
22
|
's-style': sStyle,
|
|
23
|
+
elevation,
|
|
22
24
|
...rest
|
|
23
25
|
}: DropdownProps = $props();
|
|
24
26
|
|
|
25
|
-
let safePosition = $derived(
|
|
26
|
-
position === 'top' || position === 'bottom' || position === 'left' || position === 'right'
|
|
27
|
-
? position
|
|
28
|
-
: 'bottom'
|
|
29
|
-
);
|
|
30
|
-
|
|
31
27
|
let { classProps, styleProps, restProps } = $derived(
|
|
32
28
|
makeComponentProps(rest as Record<string, unknown>)
|
|
33
29
|
);
|
|
34
30
|
|
|
31
|
+
let elevationState = $derived(useElevation(elevation));
|
|
32
|
+
|
|
35
33
|
let componentClass = $derived(
|
|
36
34
|
useClassName({
|
|
37
35
|
baseClass: 'kit-dropdown-content',
|
|
@@ -49,14 +47,11 @@
|
|
|
49
47
|
})
|
|
50
48
|
);
|
|
51
49
|
|
|
52
|
-
let
|
|
50
|
+
let resolvedStyle = $derived(
|
|
53
51
|
[
|
|
54
52
|
componentStyle,
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
typeof rounded === 'string' && rounded.includes('px')
|
|
58
|
-
? `--kit-dropdown-radius:${rounded}`
|
|
59
|
-
: ''
|
|
53
|
+
color ? `--kit-dropdown-fg:${color && `var(--kit-color-${color})`}` : '',
|
|
54
|
+
background ? `--kit-dropdown-bg:${background && `var(--kit-color-${background})`}` : ''
|
|
60
55
|
]
|
|
61
56
|
.filter(Boolean)
|
|
62
57
|
.join('; ')
|
|
@@ -83,7 +78,7 @@
|
|
|
83
78
|
|
|
84
79
|
const updatePosition = () => {
|
|
85
80
|
if (!contentRef || !activatorRef) return;
|
|
86
|
-
positioner.update(activatorRef, contentRef,
|
|
81
|
+
positioner.update(activatorRef, contentRef, position, false, true);
|
|
87
82
|
axis = positioner.values;
|
|
88
83
|
};
|
|
89
84
|
|
|
@@ -167,16 +162,20 @@
|
|
|
167
162
|
<div
|
|
168
163
|
bind:this={contentRef}
|
|
169
164
|
class={componentClass}
|
|
170
|
-
style={`left:${axis.x}px; top:${axis.y}px; ${
|
|
165
|
+
style={`left:${axis.x}px; top:${axis.y}px; ${resolvedStyle}`}
|
|
171
166
|
role="menu"
|
|
172
167
|
data-rounded={rounded}
|
|
173
|
-
data-position={axis.location ??
|
|
168
|
+
data-position={axis.location ?? position}
|
|
169
|
+
data-density={density}
|
|
174
170
|
onmouseover={() => handleMouseEvent('open', activatorRef)}
|
|
175
171
|
onmouseleave={() => handleMouseEvent('close', activatorRef)}
|
|
176
172
|
onclick={(event) => {
|
|
177
173
|
event.stopPropagation();
|
|
178
174
|
handleContentClick();
|
|
179
175
|
}}
|
|
176
|
+
data-elevation={elevationState.base}
|
|
177
|
+
data-elevation-hover={elevationState.hover}
|
|
178
|
+
data-elevation-active={elevationState.active}
|
|
180
179
|
use:clickOutside={{ exclude: [contentRef, activatorRef], onClose: handleClose }}
|
|
181
180
|
{...restProps}
|
|
182
181
|
>
|
|
@@ -186,43 +185,60 @@
|
|
|
186
185
|
|
|
187
186
|
<style>
|
|
188
187
|
.kit-dropdown-content {
|
|
189
|
-
--kit-dropdown-bg: var(--kit-surface-
|
|
190
|
-
--kit-dropdown-fg: var(--kit-
|
|
191
|
-
--kit-dropdown-radius: 12px;
|
|
192
|
-
--kit-dropdown-bd: color-mix(in oklab, var(--kit-fg), transparent 88%);
|
|
193
|
-
--kit-dropdown-shadow: 0 18px 40px -18px color-mix(in oklab, black 24%, transparent);
|
|
188
|
+
--kit-dropdown-bg: var(--kit-color-surface-3);
|
|
189
|
+
--kit-dropdown-fg: var(--kit-color-text);
|
|
194
190
|
|
|
195
191
|
position: fixed;
|
|
196
192
|
z-index: 1800;
|
|
197
193
|
min-width: 12rem;
|
|
198
194
|
max-width: min(22rem, calc(100vw - 1rem));
|
|
199
|
-
padding: 0.375rem;
|
|
200
|
-
border:
|
|
195
|
+
padding: 0.375rem calc(0.375rem * var(--kit-dropdown-density-scale));
|
|
196
|
+
border: 0;
|
|
201
197
|
border-radius: var(--kit-dropdown-radius);
|
|
202
198
|
background: var(--kit-dropdown-bg);
|
|
203
199
|
color: var(--kit-dropdown-fg);
|
|
204
|
-
box-shadow: var(--kit-dropdown-shadow);
|
|
205
200
|
transform-origin: top left;
|
|
206
201
|
animation: kit-dropdown-enter 140ms ease;
|
|
207
202
|
}
|
|
208
203
|
|
|
204
|
+
/**
|
|
205
|
+
* rounded
|
|
206
|
+
* @link ...
|
|
207
|
+
*/
|
|
209
208
|
.kit-dropdown-content[data-rounded='0'] {
|
|
210
|
-
--kit-dropdown-radius:
|
|
209
|
+
--kit-dropdown-radius: var(--kit-shape-none);
|
|
211
210
|
}
|
|
212
211
|
.kit-dropdown-content[data-rounded='xs'] {
|
|
213
|
-
--kit-dropdown-radius:
|
|
212
|
+
--kit-dropdown-radius: var(--kit-shape-xs);
|
|
214
213
|
}
|
|
215
214
|
.kit-dropdown-content[data-rounded='sm'] {
|
|
216
|
-
--kit-dropdown-radius:
|
|
215
|
+
--kit-dropdown-radius: var(--kit-shape-sm);
|
|
217
216
|
}
|
|
218
217
|
.kit-dropdown-content[data-rounded='md'] {
|
|
219
|
-
--kit-dropdown-radius:
|
|
218
|
+
--kit-dropdown-radius: var(--kit-shape-md);
|
|
220
219
|
}
|
|
221
220
|
.kit-dropdown-content[data-rounded='lg'] {
|
|
222
|
-
--kit-dropdown-radius:
|
|
221
|
+
--kit-dropdown-radius: var(--kit-shape-lg);
|
|
223
222
|
}
|
|
224
223
|
.kit-dropdown-content[data-rounded='xl'] {
|
|
225
|
-
--kit-dropdown-radius:
|
|
224
|
+
--kit-dropdown-radius: var(--kit-shape-xl);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* density
|
|
229
|
+
* @link no url
|
|
230
|
+
*/
|
|
231
|
+
.kit-dropdown-content[data-density='none'] {
|
|
232
|
+
--kit-dropdown-density-scale: 0;
|
|
233
|
+
}
|
|
234
|
+
.kit-dropdown-content[data-density='compact'] {
|
|
235
|
+
--kit-dropdown-density-scale: 0.8;
|
|
236
|
+
}
|
|
237
|
+
.kit-dropdown-content[data-density='default'] {
|
|
238
|
+
--kit-dropdown-density-scale: 1;
|
|
239
|
+
}
|
|
240
|
+
.kit-dropdown-content[data-density='comfortable'] {
|
|
241
|
+
--kit-dropdown-density-scale: 1.15;
|
|
226
242
|
}
|
|
227
243
|
|
|
228
244
|
@keyframes kit-dropdown-enter {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { Component, PropValue, RoundedType } from '../../@types/index';
|
|
1
|
+
import type { Component, DensityType, ElevationProps, PropValue, RoundedType } from '../../@types/index';
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
export type PositionElement = {
|
|
4
4
|
x: number;
|
|
@@ -13,15 +13,17 @@ export type ModelDropdownProps = {
|
|
|
13
13
|
export type ModelDropdownHandleProps = (state: 'open' | 'close', element: HTMLElement | PointerEvent | null) => void;
|
|
14
14
|
export interface DropdownProps extends Component {
|
|
15
15
|
ref?: HTMLElement | null;
|
|
16
|
-
rounded?: RoundedType
|
|
16
|
+
rounded?: RoundedType;
|
|
17
17
|
position?: 'top' | 'bottom' | 'left' | 'right';
|
|
18
18
|
openOnHover?: boolean;
|
|
19
19
|
closeOnClick?: boolean;
|
|
20
20
|
color?: string;
|
|
21
21
|
background?: string;
|
|
22
|
+
density?: DensityType;
|
|
22
23
|
activator?: Snippet<[
|
|
23
24
|
ModelDropdownProps,
|
|
24
25
|
(state: 'open' | 'close', element: HTMLElement | PointerEvent | null) => void
|
|
25
26
|
]>;
|
|
26
27
|
[key: string]: PropValue | Record<string, PropValue> | unknown;
|
|
28
|
+
elevation?: ElevationProps;
|
|
27
29
|
}
|
|
@@ -47,12 +47,14 @@
|
|
|
47
47
|
})
|
|
48
48
|
);
|
|
49
49
|
|
|
50
|
-
let
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
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('; ')
|
|
56
58
|
);
|
|
57
59
|
|
|
58
60
|
let resolvedSrc = $derived(src ?? (icon?.includes('/') ? icon : undefined));
|
|
@@ -65,32 +67,16 @@
|
|
|
65
67
|
: componentClass
|
|
66
68
|
);
|
|
67
69
|
|
|
68
|
-
let safeLoading = $derived(loading === 'lazy' || loading === 'eager' ? loading : 'eager');
|
|
69
|
-
let safeDecoding = $derived(
|
|
70
|
-
decoding === 'async' || decoding === 'sync' || decoding === 'auto' ? decoding : 'async'
|
|
71
|
-
);
|
|
72
|
-
let safeColorMode = $derived(
|
|
73
|
-
colorMode === 'auto' || colorMode === 'none' || colorMode === 'mask' || colorMode === 'filter'
|
|
74
|
-
? colorMode
|
|
75
|
-
: 'auto'
|
|
76
|
-
);
|
|
77
|
-
|
|
78
70
|
let iconRole = $derived(!decorative && (label || alt) ? 'img' : undefined);
|
|
79
71
|
let iconAriaLabel = $derived(!decorative ? label || alt || undefined : undefined);
|
|
80
72
|
let iconAriaHidden = $derived(decorative ? true : undefined);
|
|
81
73
|
let imgAlt = $derived(decorative ? '' : alt || label || '');
|
|
82
74
|
let isSvgSrc = $derived(!!resolvedSrc && /\.svg($|\?)/i.test(resolvedSrc));
|
|
83
75
|
let useMaskMode = $derived(
|
|
84
|
-
!!resolvedSrc &&
|
|
85
|
-
(color ? safeColorMode === 'mask' || (safeColorMode === 'auto' && isSvgSrc) : false)
|
|
76
|
+
!!resolvedSrc && (color ? colorMode === 'mask' || (colorMode === 'auto' && isSvgSrc) : false)
|
|
86
77
|
);
|
|
87
78
|
let useFilterMode = $derived(
|
|
88
|
-
!!resolvedSrc && !!imgFilter && (
|
|
89
|
-
);
|
|
90
|
-
let mergedStyle = $derived(
|
|
91
|
-
[componentStyle, color ? `color:${color}` : '', color ? `--kit-icon-color:${color}` : '']
|
|
92
|
-
.filter(Boolean)
|
|
93
|
-
.join('; ')
|
|
79
|
+
!!resolvedSrc && !!imgFilter && (colorMode === 'filter' || colorMode === 'auto')
|
|
94
80
|
);
|
|
95
81
|
</script>
|
|
96
82
|
|
|
@@ -99,8 +85,8 @@
|
|
|
99
85
|
this={is}
|
|
100
86
|
bind:this={ref}
|
|
101
87
|
class={classWithIconName}
|
|
102
|
-
style={
|
|
103
|
-
data-size={
|
|
88
|
+
style={resolvedStyle}
|
|
89
|
+
data-size={size}
|
|
104
90
|
role={iconRole}
|
|
105
91
|
aria-label={iconAriaLabel}
|
|
106
92
|
aria-hidden={iconAriaHidden}
|
|
@@ -119,8 +105,8 @@
|
|
|
119
105
|
<img
|
|
120
106
|
src={resolvedSrc}
|
|
121
107
|
alt={imgAlt}
|
|
122
|
-
loading
|
|
123
|
-
decoding
|
|
108
|
+
{loading}
|
|
109
|
+
{decoding}
|
|
124
110
|
style={useFilterMode ? `filter:${imgFilter}` : undefined}
|
|
125
111
|
/>
|
|
126
112
|
{/if}
|
|
@@ -130,13 +116,6 @@
|
|
|
130
116
|
|
|
131
117
|
<style>
|
|
132
118
|
.kit-icon {
|
|
133
|
-
--kit-icon-size-xs: 0.875rem;
|
|
134
|
-
--kit-icon-size-sm: 1rem;
|
|
135
|
-
--kit-icon-size-md: 1.125rem;
|
|
136
|
-
--kit-icon-size-lg: 1.25rem;
|
|
137
|
-
--kit-icon-size-xl: 1.375rem;
|
|
138
|
-
--kit-icon-current-size: var(--kit-icon-size-md);
|
|
139
|
-
|
|
140
119
|
display: inline-flex;
|
|
141
120
|
align-items: center;
|
|
142
121
|
justify-content: center;
|
|
@@ -146,22 +125,6 @@
|
|
|
146
125
|
vertical-align: middle;
|
|
147
126
|
}
|
|
148
127
|
|
|
149
|
-
.kit-icon[data-size='xs'] {
|
|
150
|
-
--kit-icon-current-size: var(--kit-icon-size-xs);
|
|
151
|
-
}
|
|
152
|
-
.kit-icon[data-size='sm'] {
|
|
153
|
-
--kit-icon-current-size: var(--kit-icon-size-sm);
|
|
154
|
-
}
|
|
155
|
-
.kit-icon[data-size='md'] {
|
|
156
|
-
--kit-icon-current-size: var(--kit-icon-size-md);
|
|
157
|
-
}
|
|
158
|
-
.kit-icon[data-size='lg'] {
|
|
159
|
-
--kit-icon-current-size: var(--kit-icon-size-lg);
|
|
160
|
-
}
|
|
161
|
-
.kit-icon[data-size='xl'] {
|
|
162
|
-
--kit-icon-current-size: var(--kit-icon-size-xl);
|
|
163
|
-
}
|
|
164
|
-
|
|
165
128
|
.kit-icon :global(svg),
|
|
166
129
|
.kit-icon img,
|
|
167
130
|
.kit-icon .kit-icon__mask {
|
|
@@ -183,4 +146,24 @@
|
|
|
183
146
|
-webkit-mask-size: contain;
|
|
184
147
|
-webkit-mask-position: center;
|
|
185
148
|
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* size
|
|
152
|
+
* @link https://lapikit.dev/docs/components/icon#size
|
|
153
|
+
*/
|
|
154
|
+
.kit-icon[data-size='xs'] {
|
|
155
|
+
--kit-icon-current-size: 0.875rem;
|
|
156
|
+
}
|
|
157
|
+
.kit-icon[data-size='sm'] {
|
|
158
|
+
--kit-icon-current-size: 1rem;
|
|
159
|
+
}
|
|
160
|
+
.kit-icon[data-size='md'] {
|
|
161
|
+
--kit-icon-current-size: 1.125rem;
|
|
162
|
+
}
|
|
163
|
+
.kit-icon[data-size='lg'] {
|
|
164
|
+
--kit-icon-current-size: 1.25rem;
|
|
165
|
+
}
|
|
166
|
+
.kit-icon[data-size='xl'] {
|
|
167
|
+
--kit-icon-current-size: 1.375rem;
|
|
168
|
+
}
|
|
186
169
|
</style>
|
|
@@ -42,22 +42,28 @@
|
|
|
42
42
|
})
|
|
43
43
|
);
|
|
44
44
|
|
|
45
|
-
let
|
|
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('; ')
|
|
53
|
+
);
|
|
46
54
|
</script>
|
|
47
55
|
|
|
48
56
|
<svelte:element
|
|
49
57
|
this={is}
|
|
50
58
|
bind:this={ref}
|
|
51
59
|
class={componentClass}
|
|
52
|
-
style={
|
|
60
|
+
style={resolvedStyle}
|
|
53
61
|
data-size={size}
|
|
54
62
|
data-variant={variant}
|
|
55
63
|
data-density={density}
|
|
56
64
|
data-rounded={rounded}
|
|
57
65
|
data-nav={nav}
|
|
58
66
|
role={nav ? 'navigation' : is === 'ul' ? undefined : 'list'}
|
|
59
|
-
style:--kit-list-item-fg={color && `var(--kit-color-${color})`}
|
|
60
|
-
style:--kit-list-item-bg={background && `var(--kit-color-${background})`}
|
|
61
67
|
{...restProps}
|
|
62
68
|
>
|
|
63
69
|
{@render children?.()}
|