lapikit 0.4.10 → 0.4.12

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 (30) hide show
  1. package/dist/labs/compiler/components.js +13 -0
  2. package/dist/labs/components/appbar/appbar.svelte +196 -0
  3. package/dist/labs/components/appbar/appbar.svelte.d.ts +4 -0
  4. package/dist/labs/components/appbar/appbar.types.d.ts +16 -0
  5. package/dist/labs/components/appbar/appbar.types.js +1 -0
  6. package/dist/labs/components/dialog/dialog.svelte +262 -0
  7. package/dist/labs/components/dialog/dialog.svelte.d.ts +4 -0
  8. package/dist/labs/components/dialog/dialog.types.d.ts +16 -0
  9. package/dist/labs/components/dialog/dialog.types.js +1 -0
  10. package/dist/labs/components/index.d.ts +7 -0
  11. package/dist/labs/components/index.js +7 -0
  12. package/dist/labs/components/list/list.svelte +190 -0
  13. package/dist/labs/components/list/list.svelte.d.ts +4 -0
  14. package/dist/labs/components/list/list.types.d.ts +30 -0
  15. package/dist/labs/components/list/list.types.js +1 -0
  16. package/dist/labs/components/list/modules/list-item.svelte +195 -0
  17. package/dist/labs/components/list/modules/list-item.svelte.d.ts +4 -0
  18. package/dist/labs/components/modal/modal.svelte +317 -0
  19. package/dist/labs/components/modal/modal.svelte.d.ts +4 -0
  20. package/dist/labs/components/modal/modal.types.d.ts +18 -0
  21. package/dist/labs/components/modal/modal.types.js +1 -0
  22. package/dist/labs/components/textfield/textfield.svelte +587 -0
  23. package/dist/labs/components/textfield/textfield.svelte.d.ts +4 -0
  24. package/dist/labs/components/textfield/textfield.types.d.ts +41 -0
  25. package/dist/labs/components/textfield/textfield.types.js +1 -0
  26. package/dist/labs/components/toolbar/toolbar.svelte +262 -0
  27. package/dist/labs/components/toolbar/toolbar.svelte.d.ts +4 -0
  28. package/dist/labs/components/toolbar/toolbar.types.d.ts +21 -0
  29. package/dist/labs/components/toolbar/toolbar.types.js +1 -0
  30. package/package.json +1 -1
@@ -4,6 +4,19 @@ const lapikitComponents = [
4
4
  'btn',
5
5
  'icon',
6
6
  'avatar',
7
+ 'textfield',
8
+ 'appbar',
9
+ 'btn',
10
+ 'icon',
11
+ 'avatar',
12
+ 'toolbar',
13
+ 'btn',
14
+ 'icon',
15
+ 'avatar',
16
+ 'list',
17
+ 'list-item',
18
+ 'dialog',
19
+ 'modal',
7
20
  'accordion',
8
21
  'accordionItem',
9
22
  'alert',
@@ -0,0 +1,196 @@
1
+ <script lang="ts">
2
+ import { useClassName, useStyles } from '../../utils/index.js';
3
+ import { makeComponentProps } from '../../compiler/mapped-code.js';
4
+ import type { AppbarProps } from './appbar.types.js';
5
+
6
+ let {
7
+ ref = $bindable(),
8
+ is = 'header',
9
+ children,
10
+ class: className = '',
11
+ style: styleAttr = '',
12
+ 's-class': sClass,
13
+ 's-style': sStyle,
14
+ classContent,
15
+ light = false,
16
+ dark = false,
17
+ variant = 'outline',
18
+ rounded,
19
+ background,
20
+ color,
21
+ density = 'default',
22
+ ...rest
23
+ }: AppbarProps = $props();
24
+
25
+ let safeVariant = $derived(
26
+ typeof variant === 'string' && (variant === 'outline' || variant === 'text')
27
+ ? variant
28
+ : 'outline'
29
+ );
30
+
31
+ let safeDensity = $derived(
32
+ typeof density === 'string' &&
33
+ (density === 'compact' || density === 'comfortable' || density === 'default')
34
+ ? density
35
+ : 'default'
36
+ );
37
+
38
+ let { classProps, styleProps, restProps } = $derived(
39
+ makeComponentProps(rest as Record<string, unknown>)
40
+ );
41
+
42
+ let componentClass = $derived(
43
+ useClassName({
44
+ baseClass: 'kit-appbar',
45
+ className: `${className ?? ''}`.trim(),
46
+ sClass,
47
+ classProps
48
+ })
49
+ );
50
+
51
+ let normalizedClassContent = $derived(
52
+ Array.isArray(classContent) ? classContent.filter(Boolean).join(' ') : classContent
53
+ );
54
+
55
+ let wrapperClass = $derived(
56
+ useClassName({
57
+ baseClass: 'kit-appbar__wrapper',
58
+ className: normalizedClassContent
59
+ })
60
+ );
61
+
62
+ let componentStyle = $derived(
63
+ useStyles({
64
+ styleAttr,
65
+ sStyle,
66
+ styleProps
67
+ })
68
+ );
69
+
70
+ let mergedStyle = $derived(
71
+ [
72
+ componentStyle,
73
+ background ? `--kit-appbar-background:${background}` : '',
74
+ color ? `--kit-appbar-color:${color}` : '',
75
+ typeof rounded === 'string' && rounded.includes('px') ? `--kit-appbar-radius:${rounded}` : ''
76
+ ]
77
+ .filter(Boolean)
78
+ .join('; ')
79
+ );
80
+ </script>
81
+
82
+ <svelte:element
83
+ this={is}
84
+ bind:this={ref}
85
+ class={componentClass}
86
+ style={mergedStyle}
87
+ {...restProps}
88
+ data-variant={safeVariant}
89
+ data-density={safeDensity}
90
+ data-light={light || undefined}
91
+ data-dark={dark || undefined}
92
+ data-rounded={rounded}
93
+ >
94
+ {#if safeVariant === 'outline'}
95
+ <span class="outline"></span>
96
+ {/if}
97
+
98
+ <div class={wrapperClass}>
99
+ {@render children?.()}
100
+ </div>
101
+ </svelte:element>
102
+
103
+ <style>
104
+ .kit-appbar {
105
+ --kit-appbar-background: var(--kit-surface-2);
106
+ --kit-appbar-color: var(--kit-fg);
107
+ --kit-appbar-radius: 1rem;
108
+ --kit-appbar-size: 4rem;
109
+ --kit-appbar-padding-x: 1rem;
110
+ --kit-appbar-padding-wrapper: 0;
111
+ --kit-appbar-border: color-mix(in oklab, var(--kit-appbar-color), transparent 88%);
112
+
113
+ display: flex;
114
+ align-items: center;
115
+ box-sizing: border-box;
116
+ position: relative;
117
+ width: 100%;
118
+ min-height: var(--kit-appbar-size);
119
+ padding-inline: var(--kit-appbar-padding-x);
120
+ border-radius: var(--kit-appbar-radius);
121
+ color: var(--kit-appbar-color);
122
+ background-color: var(--kit-appbar-background);
123
+ overflow: hidden;
124
+ }
125
+
126
+ .kit-appbar[data-variant='text'] {
127
+ --kit-appbar-border: transparent;
128
+ }
129
+
130
+ .kit-appbar[data-density='compact'] {
131
+ --kit-appbar-size: 3.5rem;
132
+ --kit-appbar-padding-x: 0.75rem;
133
+ }
134
+
135
+ .kit-appbar[data-density='default'] {
136
+ --kit-appbar-size: 4rem;
137
+ --kit-appbar-padding-x: 1rem;
138
+ }
139
+
140
+ .kit-appbar[data-density='comfortable'] {
141
+ --kit-appbar-size: 4.5rem;
142
+ --kit-appbar-padding-x: 1.5rem;
143
+ }
144
+
145
+ .kit-appbar[data-light='true'] {
146
+ --kit-appbar-background: color-mix(in oklab, white 88%, var(--kit-surface-1));
147
+ --kit-appbar-color: var(--kit-fg);
148
+ }
149
+
150
+ .kit-appbar[data-dark='true'] {
151
+ --kit-appbar-background: color-mix(in oklab, black 72%, var(--kit-surface-3));
152
+ --kit-appbar-color: white;
153
+ --kit-appbar-border: color-mix(in oklab, white, transparent 78%);
154
+ }
155
+
156
+ .kit-appbar[data-rounded='0'] {
157
+ --kit-appbar-radius: 0;
158
+ }
159
+
160
+ .kit-appbar[data-rounded='xs'] {
161
+ --kit-appbar-radius: 2px;
162
+ }
163
+
164
+ .kit-appbar[data-rounded='sm'] {
165
+ --kit-appbar-radius: 4px;
166
+ }
167
+
168
+ .kit-appbar[data-rounded='md'] {
169
+ --kit-appbar-radius: 8px;
170
+ }
171
+
172
+ .kit-appbar[data-rounded='lg'] {
173
+ --kit-appbar-radius: 16px;
174
+ }
175
+
176
+ .kit-appbar[data-rounded='xl'] {
177
+ --kit-appbar-radius: 99999px;
178
+ }
179
+
180
+ .kit-appbar__wrapper {
181
+ position: relative;
182
+ z-index: 1;
183
+ display: flex;
184
+ align-items: center;
185
+ flex-direction: row;
186
+ gap: 0.75rem;
187
+ width: 100%;
188
+ margin: 0 auto;
189
+ }
190
+
191
+ .kit-appbar .outline {
192
+ --outline-color: var(--kit-appbar-border);
193
+
194
+ pointer-events: none;
195
+ }
196
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { AppbarProps } from './appbar.types.ts';
2
+ declare const Appbar: import("svelte").Component<AppbarProps, {}, "ref">;
3
+ type Appbar = ReturnType<typeof Appbar>;
4
+ export default Appbar;
@@ -0,0 +1,16 @@
1
+ import type { Component, RoundedType } from '../../utils/types/index.js';
2
+ type Density = 'compact' | 'comfortable' | 'default';
3
+ type Variant = 'outline' | 'text';
4
+ export interface AppbarProps extends Component {
5
+ ref?: HTMLElement | null;
6
+ is?: 'div' | 'header' | 'nav';
7
+ variant?: Variant;
8
+ rounded?: RoundedType | string;
9
+ density?: Density | Record<string, Density>;
10
+ dark?: boolean;
11
+ light?: boolean;
12
+ color?: string;
13
+ background?: string;
14
+ classContent?: string | string[] | undefined;
15
+ }
16
+ export {};
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,262 @@
1
+ <script lang="ts">
2
+ import { disabledScroll } from '../../../internal/helpers/scroll.js';
3
+ import { makeComponentProps } from '../../compiler/mapped-code.js';
4
+ import { useClassName, useStyles } from '../../utils/index.js';
5
+ import type { DialogDensity, DialogPosition, DialogProps, DialogSize } from './dialog.types.js';
6
+
7
+ function resolveSize(value: DialogSize | undefined): DialogSize {
8
+ return value === 'xs' || value === 'sm' || value === 'md' || value === 'lg' || value === 'xl'
9
+ ? value
10
+ : 'md';
11
+ }
12
+
13
+ function resolvePosition(value: DialogPosition | undefined): DialogPosition {
14
+ return value === 'top' || value === 'center' || value === 'bottom' ? value : 'center';
15
+ }
16
+
17
+ function resolveDensity(value: DialogDensity | undefined): DialogDensity {
18
+ return value === 'compact' || value === 'comfortable' || value === 'default'
19
+ ? value
20
+ : 'default';
21
+ }
22
+
23
+ let {
24
+ ref = $bindable(),
25
+ children = undefined,
26
+ class: className = '',
27
+ style: styleAttr = '',
28
+ 's-class': sClass,
29
+ 's-style': sStyle,
30
+ open = $bindable(false),
31
+ persistent = false,
32
+ size = 'md',
33
+ position = 'center',
34
+ density = 'default',
35
+ rounded = 'md',
36
+ classContent = '',
37
+ color = undefined,
38
+ background = undefined,
39
+ ...rest
40
+ }: DialogProps = $props();
41
+
42
+ let { classProps, styleProps, restProps } = $derived(
43
+ makeComponentProps(rest as Record<string, unknown>)
44
+ );
45
+
46
+ let componentClass = $derived(
47
+ useClassName({
48
+ baseClass: 'kit-dialog',
49
+ className: `${className ?? ''}`.trim(),
50
+ sClass,
51
+ classProps
52
+ })
53
+ );
54
+
55
+ let componentStyle = $derived(
56
+ useStyles({
57
+ styleAttr,
58
+ sStyle,
59
+ styleProps
60
+ })
61
+ );
62
+
63
+ let contentClass = $derived(
64
+ Array.isArray(classContent)
65
+ ? classContent.filter(Boolean).join(' ')
66
+ : `${classContent ?? ''}`.trim()
67
+ );
68
+
69
+ let safeSize = $derived(resolveSize(size));
70
+ let safePosition = $derived(resolvePosition(position));
71
+ let safeDensity = $derived(resolveDensity(density));
72
+ let mergedStyle = $derived(
73
+ [
74
+ componentStyle,
75
+ color ? `--kit-dialog-fg:${color}` : '',
76
+ background ? `--kit-dialog-bg:${background}` : ''
77
+ ]
78
+ .filter(Boolean)
79
+ .join('; ')
80
+ );
81
+
82
+ $effect(() => {
83
+ if (!ref) return;
84
+
85
+ if (open && !ref.open) {
86
+ ref.showModal();
87
+ }
88
+
89
+ if (!open && ref.open) {
90
+ ref.close();
91
+ }
92
+
93
+ disabledScroll(open);
94
+
95
+ return () => {
96
+ disabledScroll(false);
97
+ };
98
+ });
99
+
100
+ function handleClose() {
101
+ if (!persistent) {
102
+ open = false;
103
+ return;
104
+ }
105
+
106
+ if (ref && !ref.open && open) {
107
+ ref.showModal();
108
+ }
109
+ }
110
+
111
+ function handleCancel(event: Event) {
112
+ if (persistent) {
113
+ event.preventDefault();
114
+ return;
115
+ }
116
+
117
+ open = false;
118
+ }
119
+
120
+ function handleBackdropClick(event: MouseEvent) {
121
+ if (event.target !== ref || persistent) return;
122
+ open = false;
123
+ }
124
+ </script>
125
+
126
+ <dialog
127
+ bind:this={ref}
128
+ class={componentClass}
129
+ style={mergedStyle}
130
+ data-size={safeSize}
131
+ data-position={safePosition}
132
+ data-persistent={persistent}
133
+ onclose={handleClose}
134
+ oncancel={handleCancel}
135
+ onclick={handleBackdropClick}
136
+ >
137
+ <div
138
+ {...restProps}
139
+ class={['kit-dialog__content', contentClass]}
140
+ data-density={safeDensity}
141
+ data-rounded={rounded}
142
+ onclick={(event: MouseEvent) => event.stopPropagation()}
143
+ >
144
+ {@render children?.()}
145
+ </div>
146
+ </dialog>
147
+
148
+ <style>
149
+ .kit-dialog {
150
+ --kit-dialog-bg: var(--kit-surface-1);
151
+ --kit-dialog-fg: var(--kit-fg);
152
+ --kit-dialog-bd: var(--kit-border);
153
+ --kit-dialog-radius: 12px;
154
+ --kit-dialog-px: 1rem;
155
+ --kit-dialog-py: 1rem;
156
+ --kit-dialog-max: min(32rem, calc(100vw - 2rem));
157
+
158
+ border: 0;
159
+ padding: 0;
160
+ margin: auto;
161
+ width: 100%;
162
+ max-width: none;
163
+ background: transparent;
164
+ color: inherit;
165
+ overflow: visible;
166
+ }
167
+
168
+ .kit-dialog::backdrop {
169
+ background: rgb(15 23 42 / 0.42);
170
+ backdrop-filter: blur(2px);
171
+ }
172
+
173
+ .kit-dialog[data-position='top'] {
174
+ margin-top: 1rem;
175
+ margin-bottom: auto;
176
+ }
177
+
178
+ .kit-dialog[data-position='center'] {
179
+ margin-top: auto;
180
+ margin-bottom: auto;
181
+ }
182
+
183
+ .kit-dialog[data-position='bottom'] {
184
+ margin-top: auto;
185
+ margin-bottom: 1rem;
186
+ }
187
+
188
+ .kit-dialog[data-size='xs'] {
189
+ --kit-dialog-max: min(20rem, calc(100vw - 2rem));
190
+ }
191
+
192
+ .kit-dialog[data-size='sm'] {
193
+ --kit-dialog-max: min(24rem, calc(100vw - 2rem));
194
+ }
195
+
196
+ .kit-dialog[data-size='md'] {
197
+ --kit-dialog-max: min(32rem, calc(100vw - 2rem));
198
+ }
199
+
200
+ .kit-dialog[data-size='lg'] {
201
+ --kit-dialog-max: min(42rem, calc(100vw - 2rem));
202
+ }
203
+
204
+ .kit-dialog[data-size='xl'] {
205
+ --kit-dialog-max: min(56rem, calc(100vw - 2rem));
206
+ }
207
+
208
+ .kit-dialog__content {
209
+ box-sizing: border-box;
210
+ width: min(100%, var(--kit-dialog-max));
211
+ max-height: calc(100dvh - 2rem);
212
+ overflow: auto;
213
+ padding: var(--kit-dialog-py) var(--kit-dialog-px);
214
+ border: 1px solid var(--kit-dialog-bd);
215
+ border-radius: var(--kit-dialog-radius);
216
+ background: var(--kit-dialog-bg);
217
+ color: var(--kit-dialog-fg);
218
+ margin: 0 auto;
219
+ box-shadow:
220
+ 0 20px 50px rgb(15 23 42 / 0.18),
221
+ 0 4px 16px rgb(15 23 42 / 0.1);
222
+ }
223
+
224
+ .kit-dialog__content[data-density='compact'] {
225
+ --kit-dialog-px: 0.75rem;
226
+ --kit-dialog-py: 0.75rem;
227
+ }
228
+
229
+ .kit-dialog__content[data-density='default'] {
230
+ --kit-dialog-px: 1rem;
231
+ --kit-dialog-py: 1rem;
232
+ }
233
+
234
+ .kit-dialog__content[data-density='comfortable'] {
235
+ --kit-dialog-px: 1.25rem;
236
+ --kit-dialog-py: 1.25rem;
237
+ }
238
+
239
+ .kit-dialog__content[data-rounded='0'] {
240
+ --kit-dialog-radius: 0;
241
+ }
242
+
243
+ .kit-dialog__content[data-rounded='xs'] {
244
+ --kit-dialog-radius: 2px;
245
+ }
246
+
247
+ .kit-dialog__content[data-rounded='sm'] {
248
+ --kit-dialog-radius: 6px;
249
+ }
250
+
251
+ .kit-dialog__content[data-rounded='md'] {
252
+ --kit-dialog-radius: 12px;
253
+ }
254
+
255
+ .kit-dialog__content[data-rounded='lg'] {
256
+ --kit-dialog-radius: 18px;
257
+ }
258
+
259
+ .kit-dialog__content[data-rounded='xl'] {
260
+ --kit-dialog-radius: 9999px;
261
+ }
262
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { DialogProps } from './dialog.types.ts';
2
+ declare const Dialog: import("svelte").Component<DialogProps, {}, "ref" | "open">;
3
+ type Dialog = ReturnType<typeof Dialog>;
4
+ export default Dialog;
@@ -0,0 +1,16 @@
1
+ import type { Component, RoundedType } from '../../utils/types/index.js';
2
+ export type DialogSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
3
+ export type DialogPosition = 'top' | 'center' | 'bottom';
4
+ export type DialogDensity = 'compact' | 'comfortable' | 'default';
5
+ export interface DialogProps extends Component {
6
+ ref?: HTMLDialogElement | null;
7
+ open?: boolean;
8
+ persistent?: boolean;
9
+ size?: DialogSize;
10
+ position?: DialogPosition;
11
+ density?: DialogDensity;
12
+ rounded?: RoundedType;
13
+ classContent?: string | string[] | undefined;
14
+ color?: string;
15
+ background?: string;
16
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,10 +1,17 @@
1
1
  export { default as KitSheet } from './sheet/sheet.svelte';
2
2
  export { default as KitApp } from './app/app.svelte';
3
+ export { default as KitAppbar } from './appbar/appbar.svelte';
3
4
  export { default as KitBtn } from './btn/btn.svelte';
4
5
  export { default as KitIcon } from './icon/icon.svelte';
5
6
  export { default as KitCard } from './card/card.svelte';
6
7
  export { default as KitChip } from './chip/chip.svelte';
7
8
  export { default as KitAvatar } from './avatar/avatar.svelte';
9
+ export { default as KitTextfield } from './textfield/textfield.svelte';
10
+ export { default as KitToolbar } from './toolbar/toolbar.svelte';
11
+ export { default as KitList } from './list/list.svelte';
12
+ export { default as KitListItem } from './list/modules/list-item.svelte';
13
+ export { default as KitDialog } from './dialog/dialog.svelte';
14
+ export { default as KitModal } from './modal/modal.svelte';
8
15
  export { default as KitAccordion } from './accordion/accordion.svelte';
9
16
  export { default as KitAccordionItem } from './accordion/modules/accordion-item.svelte';
10
17
  export { default as KitAlert } from './alert/alert.svelte';
@@ -1,11 +1,18 @@
1
1
  // components
2
2
  export { default as KitSheet } from './sheet/sheet.svelte';
3
3
  export { default as KitApp } from './app/app.svelte';
4
+ export { default as KitAppbar } from './appbar/appbar.svelte';
4
5
  export { default as KitBtn } from './btn/btn.svelte';
5
6
  export { default as KitIcon } from './icon/icon.svelte';
6
7
  export { default as KitCard } from './card/card.svelte';
7
8
  export { default as KitChip } from './chip/chip.svelte';
8
9
  export { default as KitAvatar } from './avatar/avatar.svelte';
10
+ export { default as KitTextfield } from './textfield/textfield.svelte';
11
+ export { default as KitToolbar } from './toolbar/toolbar.svelte';
12
+ export { default as KitList } from './list/list.svelte';
13
+ export { default as KitListItem } from './list/modules/list-item.svelte';
14
+ export { default as KitDialog } from './dialog/dialog.svelte';
15
+ export { default as KitModal } from './modal/modal.svelte';
9
16
  export { default as KitAccordion } from './accordion/accordion.svelte';
10
17
  export { default as KitAccordionItem } from './accordion/modules/accordion-item.svelte';
11
18
  export { default as KitAlert } from './alert/alert.svelte';