lapikit 0.4.4 → 0.4.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/labs/compiler/components.js +1 -1
- package/dist/labs/components/avatar/avatar.svelte +145 -0
- package/dist/labs/components/avatar/avatar.svelte.d.ts +4 -0
- package/dist/labs/components/avatar/avatar.types.d.ts +9 -0
- package/dist/labs/components/avatar/avatar.types.js +1 -0
- package/dist/labs/components/index.d.ts +1 -0
- package/dist/labs/components/index.js +1 -0
- package/package.json +1 -1
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
const lapikitComponents = ['sheet', 'app', 'btn', 'icon'];
|
|
1
|
+
const lapikitComponents = ['sheet', 'app', 'btn', 'icon', 'avatar'];
|
|
2
2
|
export default lapikitComponents;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { useClassName, useStyles } from '../../utils/index.js';
|
|
3
|
+
import { makeComponentProps } from '../../compiler/mapped-code.js';
|
|
4
|
+
import type { AvatarProps } from './avatar.types.js';
|
|
5
|
+
|
|
6
|
+
let {
|
|
7
|
+
ref = $bindable(),
|
|
8
|
+
children = undefined,
|
|
9
|
+
class: className = '',
|
|
10
|
+
style: styleAttr = '',
|
|
11
|
+
's-class': sClass,
|
|
12
|
+
's-style': sStyle,
|
|
13
|
+
label = undefined,
|
|
14
|
+
size = 'md',
|
|
15
|
+
density = 'default',
|
|
16
|
+
...rest
|
|
17
|
+
}: AvatarProps = $props();
|
|
18
|
+
|
|
19
|
+
let { classProps, styleProps, restProps } = $derived(
|
|
20
|
+
makeComponentProps(rest as Record<string, unknown>)
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
let componentClass = $derived(
|
|
24
|
+
useClassName({
|
|
25
|
+
baseClass: 'kit-avatar',
|
|
26
|
+
className: `${className ?? ''}`.trim(),
|
|
27
|
+
sClass,
|
|
28
|
+
classProps
|
|
29
|
+
})
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
let componentStyle = $derived(
|
|
33
|
+
useStyles({
|
|
34
|
+
styleAttr,
|
|
35
|
+
sStyle,
|
|
36
|
+
styleProps
|
|
37
|
+
})
|
|
38
|
+
);
|
|
39
|
+
|
|
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
|
+
|
|
54
|
+
let contentType = $derived(label && label.trim().length > 0 ? 'label' : children);
|
|
55
|
+
let displayLabel = $derived(label?.trim() ?? '');
|
|
56
|
+
</script>
|
|
57
|
+
|
|
58
|
+
<svelte:element
|
|
59
|
+
this={'div'}
|
|
60
|
+
bind:this={ref}
|
|
61
|
+
class={componentClass}
|
|
62
|
+
style={componentStyle}
|
|
63
|
+
{...restProps}
|
|
64
|
+
data-type={contentType}
|
|
65
|
+
data-size={contentType === 'label' ? safeSize : undefined}
|
|
66
|
+
data-density={contentType === 'label' ? safeDensity : undefined}
|
|
67
|
+
>
|
|
68
|
+
{#if contentType === 'label'}
|
|
69
|
+
<span class="kit-avatar__label">{displayLabel}</span>
|
|
70
|
+
{:else}
|
|
71
|
+
{@render children?.()}
|
|
72
|
+
{/if}
|
|
73
|
+
</svelte:element>
|
|
74
|
+
|
|
75
|
+
<style>
|
|
76
|
+
.kit-avatar {
|
|
77
|
+
--kit-avatar-size: 2.25rem;
|
|
78
|
+
--kit-avatar-font-size: 0.875rem;
|
|
79
|
+
--kit-avatar-density-scale: 1;
|
|
80
|
+
|
|
81
|
+
display: inline-flex;
|
|
82
|
+
align-items: center;
|
|
83
|
+
justify-content: center;
|
|
84
|
+
width: calc(var(--kit-avatar-size) * var(--kit-avatar-density-scale));
|
|
85
|
+
height: calc(var(--kit-avatar-size) * var(--kit-avatar-density-scale));
|
|
86
|
+
border-radius: 9999px;
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
background: var(--kit-surface-2);
|
|
89
|
+
color: var(--kit-fg);
|
|
90
|
+
font-weight: 600;
|
|
91
|
+
line-height: 1;
|
|
92
|
+
user-select: none;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
.kit-avatar[data-type='label'] {
|
|
96
|
+
font-size: var(--kit-avatar-font-size);
|
|
97
|
+
text-transform: uppercase;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
.kit-avatar[data-size='xs'] {
|
|
101
|
+
--kit-avatar-size: 1.75rem;
|
|
102
|
+
--kit-avatar-font-size: 0.75rem;
|
|
103
|
+
}
|
|
104
|
+
.kit-avatar[data-size='sm'] {
|
|
105
|
+
--kit-avatar-size: 2rem;
|
|
106
|
+
--kit-avatar-font-size: 0.8125rem;
|
|
107
|
+
}
|
|
108
|
+
.kit-avatar[data-size='md'] {
|
|
109
|
+
--kit-avatar-size: 2.25rem;
|
|
110
|
+
--kit-avatar-font-size: 0.875rem;
|
|
111
|
+
}
|
|
112
|
+
.kit-avatar[data-size='lg'] {
|
|
113
|
+
--kit-avatar-size: 2.5rem;
|
|
114
|
+
--kit-avatar-font-size: 1rem;
|
|
115
|
+
}
|
|
116
|
+
.kit-avatar[data-size='xl'] {
|
|
117
|
+
--kit-avatar-size: 2.75rem;
|
|
118
|
+
--kit-avatar-font-size: 1.125rem;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
.kit-avatar[data-density='compact'] {
|
|
122
|
+
--kit-avatar-density-scale: 0.9;
|
|
123
|
+
}
|
|
124
|
+
.kit-avatar[data-density='default'] {
|
|
125
|
+
--kit-avatar-density-scale: 1;
|
|
126
|
+
}
|
|
127
|
+
.kit-avatar[data-density='comfortable'] {
|
|
128
|
+
--kit-avatar-density-scale: 1.1;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
.kit-avatar__label {
|
|
132
|
+
display: inline-flex;
|
|
133
|
+
align-items: center;
|
|
134
|
+
justify-content: center;
|
|
135
|
+
max-width: 100%;
|
|
136
|
+
padding-inline: 0.25rem;
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
.kit-avatar :global(img) {
|
|
140
|
+
display: block;
|
|
141
|
+
width: 100%;
|
|
142
|
+
height: 100%;
|
|
143
|
+
object-fit: cover;
|
|
144
|
+
}
|
|
145
|
+
</style>
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Component } from '../../utils/types/index.js';
|
|
2
|
+
export type AvatarSize = 'default' | 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
3
|
+
export type AvatarDensity = 'compact' | 'comfortable' | 'default';
|
|
4
|
+
export interface AvatarProps extends Component {
|
|
5
|
+
ref?: HTMLElement | null;
|
|
6
|
+
label?: string;
|
|
7
|
+
size?: AvatarSize;
|
|
8
|
+
density?: AvatarDensity;
|
|
9
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -2,3 +2,4 @@ export { default as KitSheet } from './sheet/sheet.svelte';
|
|
|
2
2
|
export { default as KitApp } from './app/app.svelte';
|
|
3
3
|
export { default as KitBtn } from './btn/btn.svelte';
|
|
4
4
|
export { default as KitIcon } from './icon/icon.svelte';
|
|
5
|
+
export { default as KitAvatar } from './avatar/avatar.svelte';
|
|
@@ -3,3 +3,4 @@ export { default as KitSheet } from './sheet/sheet.svelte';
|
|
|
3
3
|
export { default as KitApp } from './app/app.svelte';
|
|
4
4
|
export { default as KitBtn } from './btn/btn.svelte';
|
|
5
5
|
export { default as KitIcon } from './icon/icon.svelte';
|
|
6
|
+
export { default as KitAvatar } from './avatar/avatar.svelte';
|