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
@@ -0,0 +1,190 @@
1
+ <script lang="ts">
2
+ import { makeComponentProps } from '../../compiler/mapped-code.js';
3
+ import { useClassName, useStyles } from '../../utils/index.js';
4
+ import type { ListDensity, ListProps, ListVariant } from './list.types.js';
5
+
6
+ function resolveVariant(value: ListVariant | undefined): ListVariant {
7
+ return value === 'filled' || value === 'outline' || value === 'text' ? value : 'filled';
8
+ }
9
+
10
+ function resolveDensity(value: ListDensity | undefined): ListDensity {
11
+ return value === 'compact' || value === 'comfortable' || value === 'default'
12
+ ? value
13
+ : 'default';
14
+ }
15
+
16
+ let {
17
+ ref = $bindable(),
18
+ is = 'div',
19
+ children = undefined,
20
+ class: className = '',
21
+ style: styleAttr = '',
22
+ 's-class': sClass,
23
+ 's-style': sStyle,
24
+ size = 'md',
25
+ variant = 'filled',
26
+ density = 'default',
27
+ rounded = 'md',
28
+ nav = false,
29
+ color = undefined,
30
+ background = undefined,
31
+ ...rest
32
+ }: ListProps = $props();
33
+
34
+ let { classProps, styleProps, restProps } = $derived(
35
+ makeComponentProps(rest as Record<string, unknown>)
36
+ );
37
+
38
+ let componentClass = $derived(
39
+ useClassName({
40
+ baseClass: 'kit-list',
41
+ className: `${className ?? ''}`.trim(),
42
+ sClass,
43
+ classProps
44
+ })
45
+ );
46
+
47
+ let componentStyle = $derived(
48
+ useStyles({
49
+ styleAttr,
50
+ sStyle,
51
+ styleProps
52
+ })
53
+ );
54
+
55
+ let safeVariant = $derived(resolveVariant(variant));
56
+ let safeDensity = $derived(resolveDensity(density));
57
+ let safeSize = $derived(
58
+ size === 'default'
59
+ ? 'md'
60
+ : size === 'xs' || size === 'sm' || size === 'md' || size === 'lg' || size === 'xl'
61
+ ? size
62
+ : 'md'
63
+ );
64
+ let mergedStyle = $derived(
65
+ [
66
+ componentStyle,
67
+ color ? `--kit-list-fg:${color}` : '',
68
+ background ? `--kit-list-bg:${background}` : ''
69
+ ]
70
+ .filter(Boolean)
71
+ .join('; ')
72
+ );
73
+ </script>
74
+
75
+ <svelte:element
76
+ this={is}
77
+ bind:this={ref}
78
+ class={componentClass}
79
+ style={mergedStyle}
80
+ data-size={safeSize}
81
+ data-variant={safeVariant}
82
+ data-density={safeDensity}
83
+ data-rounded={rounded}
84
+ data-nav={nav}
85
+ role={nav ? 'navigation' : is === 'ul' ? undefined : 'list'}
86
+ {...restProps}
87
+ >
88
+ {@render children?.()}
89
+ </svelte:element>
90
+
91
+ <style>
92
+ .kit-list {
93
+ --kit-list-bg: var(--kit-surface-1);
94
+ --kit-list-fg: var(--kit-fg);
95
+ --kit-list-bd: var(--kit-border);
96
+ --kit-list-radius: 10px;
97
+ --kit-list-item-h: 2.75rem;
98
+ --kit-list-item-px: 0.875rem;
99
+ --kit-list-item-gap: 0.625rem;
100
+ --kit-list-item-font: 0.9375rem;
101
+
102
+ display: flex;
103
+ flex-direction: column;
104
+ width: 100%;
105
+ padding: 0.25rem;
106
+ gap: 0.125rem;
107
+ color: var(--kit-list-fg);
108
+ background: transparent;
109
+ border-radius: var(--kit-list-radius);
110
+ }
111
+
112
+ .kit-list[data-nav='true'] {
113
+ padding: 0.5rem;
114
+ }
115
+
116
+ .kit-list[data-size='xs'] {
117
+ --kit-list-item-h: 2.125rem;
118
+ --kit-list-item-px: 0.625rem;
119
+ --kit-list-item-gap: 0.5rem;
120
+ --kit-list-item-font: 0.75rem;
121
+ }
122
+
123
+ .kit-list[data-size='sm'] {
124
+ --kit-list-item-h: 2.375rem;
125
+ --kit-list-item-px: 0.75rem;
126
+ --kit-list-item-gap: 0.5rem;
127
+ --kit-list-item-font: 0.875rem;
128
+ }
129
+
130
+ .kit-list[data-size='md'] {
131
+ --kit-list-item-h: 2.75rem;
132
+ --kit-list-item-px: 0.875rem;
133
+ --kit-list-item-gap: 0.625rem;
134
+ --kit-list-item-font: 0.9375rem;
135
+ }
136
+
137
+ .kit-list[data-size='lg'] {
138
+ --kit-list-item-h: 3.125rem;
139
+ --kit-list-item-px: 1rem;
140
+ --kit-list-item-gap: 0.75rem;
141
+ --kit-list-item-font: 1rem;
142
+ }
143
+
144
+ .kit-list[data-size='xl'] {
145
+ --kit-list-item-h: 3.5rem;
146
+ --kit-list-item-px: 1.125rem;
147
+ --kit-list-item-gap: 0.875rem;
148
+ --kit-list-item-font: 1.0625rem;
149
+ }
150
+
151
+ .kit-list[data-density='compact'] {
152
+ --kit-list-item-h: calc(var(--kit-list-item-h) - 0.25rem);
153
+ }
154
+
155
+ .kit-list[data-density='comfortable'] {
156
+ --kit-list-item-h: calc(var(--kit-list-item-h) + 0.25rem);
157
+ }
158
+
159
+ .kit-list[data-rounded='0'] {
160
+ --kit-list-radius: 0;
161
+ }
162
+
163
+ .kit-list[data-rounded='xs'] {
164
+ --kit-list-radius: 2px;
165
+ }
166
+
167
+ .kit-list[data-rounded='sm'] {
168
+ --kit-list-radius: 6px;
169
+ }
170
+
171
+ .kit-list[data-rounded='md'] {
172
+ --kit-list-radius: 10px;
173
+ }
174
+
175
+ .kit-list[data-rounded='lg'] {
176
+ --kit-list-radius: 16px;
177
+ }
178
+
179
+ .kit-list[data-rounded='xl'] {
180
+ --kit-list-radius: 9999px;
181
+ }
182
+
183
+ .kit-list[data-variant='filled'] {
184
+ background: color-mix(in oklab, var(--kit-list-bg), transparent 12%);
185
+ }
186
+
187
+ .kit-list[data-variant='outline'] {
188
+ border: 1px solid var(--kit-list-bd);
189
+ }
190
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ListProps } from './list.types.ts';
2
+ declare const List: import("svelte").Component<ListProps, {}, "ref">;
3
+ type List = ReturnType<typeof List>;
4
+ export default List;
@@ -0,0 +1,30 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { Component, RoundedType, SizeType } from '../../utils/types/index.js';
3
+ export type ListVariant = 'filled' | 'outline' | 'text';
4
+ export type ListDensity = 'compact' | 'comfortable' | 'default';
5
+ export type ListElement = 'div' | 'nav' | 'ul';
6
+ export type ListItemElement = 'div' | 'a' | 'button' | 'li';
7
+ export interface ListProps extends Component {
8
+ ref?: HTMLElement | null;
9
+ is?: ListElement;
10
+ size?: SizeType;
11
+ variant?: ListVariant;
12
+ density?: ListDensity;
13
+ rounded?: RoundedType;
14
+ nav?: boolean;
15
+ color?: string;
16
+ background?: string;
17
+ }
18
+ export interface ListItemProps extends Component {
19
+ ref?: HTMLElement | null;
20
+ is?: ListItemElement;
21
+ href?: string;
22
+ append?: Snippet;
23
+ prepend?: Snippet;
24
+ color?: string;
25
+ background?: string;
26
+ rounded?: RoundedType;
27
+ active?: boolean;
28
+ disabled?: boolean;
29
+ noRipple?: boolean;
30
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,195 @@
1
+ <script lang="ts">
2
+ import { ripple } from '../../../animations/index.js';
3
+ import { makeComponentProps } from '../../../compiler/mapped-code.js';
4
+ import { useClassName, useStyles } from '../../../utils/index.js';
5
+ import type { ListItemProps } from '../list.types.js';
6
+
7
+ let {
8
+ ref = $bindable(),
9
+ is = 'div',
10
+ children = undefined,
11
+ class: className = '',
12
+ style: styleAttr = '',
13
+ 's-class': sClass,
14
+ 's-style': sStyle,
15
+ append = undefined,
16
+ prepend = undefined,
17
+ href = undefined,
18
+ color = undefined,
19
+ background = undefined,
20
+ rounded = 'sm',
21
+ active = false,
22
+ disabled = false,
23
+ noRipple = false,
24
+ ...rest
25
+ }: ListItemProps = $props();
26
+
27
+ let { classProps, styleProps, restProps } = $derived(
28
+ makeComponentProps(rest as Record<string, unknown>)
29
+ );
30
+
31
+ let tag = $derived(href ? 'a' : is === 'div' && restProps.onclick ? 'button' : is);
32
+ let isInteractive = $derived(tag !== 'div' && tag !== 'li' && !disabled);
33
+
34
+ let componentClass = $derived(
35
+ useClassName({
36
+ baseClass: 'kit-list-item',
37
+ className: `${className ?? ''}`.trim(),
38
+ sClass,
39
+ classProps
40
+ })
41
+ );
42
+
43
+ let componentStyle = $derived(
44
+ useStyles({
45
+ styleAttr,
46
+ sStyle,
47
+ styleProps
48
+ })
49
+ );
50
+
51
+ let mergedStyle = $derived(
52
+ [
53
+ componentStyle,
54
+ color ? `--kit-list-item-fg:${color}` : '',
55
+ background ? `--kit-list-item-bg:${background}` : ''
56
+ ]
57
+ .filter(Boolean)
58
+ .join('; ')
59
+ );
60
+ </script>
61
+
62
+ <svelte:element
63
+ this={tag}
64
+ bind:this={ref}
65
+ class={componentClass}
66
+ style={mergedStyle}
67
+ href={href && !disabled ? href : undefined}
68
+ data-active={active}
69
+ data-disabled={disabled}
70
+ data-rounded={rounded}
71
+ aria-disabled={disabled || undefined}
72
+ disabled={tag === 'button' ? disabled : undefined}
73
+ tabindex={href && disabled ? -1 : undefined}
74
+ role={tag === 'div' ? 'listitem' : undefined}
75
+ use:ripple={{
76
+ component: 'list-item',
77
+ disabled: noRipple || !isInteractive
78
+ }}
79
+ {...restProps}
80
+ >
81
+ {#if prepend}
82
+ <span class="kit-list-item__prepend">
83
+ {@render prepend?.()}
84
+ </span>
85
+ {/if}
86
+
87
+ <span class="kit-list-item__content">
88
+ {@render children?.()}
89
+ </span>
90
+
91
+ {#if append}
92
+ <span class="kit-list-item__append">
93
+ {@render append?.()}
94
+ </span>
95
+ {/if}
96
+ </svelte:element>
97
+
98
+ <style>
99
+ .kit-list-item {
100
+ --kit-list-item-bg: transparent;
101
+ --kit-list-item-fg: inherit;
102
+ --list-item-shape: 8px;
103
+
104
+ position: relative;
105
+ display: grid;
106
+ grid-template-columns: auto minmax(0, 1fr) auto;
107
+ align-items: center;
108
+ gap: var(--kit-list-item-gap, 0.625rem);
109
+ min-height: var(--kit-list-item-h, 2.75rem);
110
+ padding-inline: var(--kit-list-item-px, 0.875rem);
111
+ border: 0;
112
+ border-radius: var(--list-item-shape);
113
+ background: var(--kit-list-item-bg);
114
+ color: var(--kit-list-item-fg);
115
+ text-decoration: none;
116
+ font: inherit;
117
+ font-size: var(--kit-list-item-font, 0.9375rem);
118
+ text-align: left;
119
+ }
120
+
121
+ .kit-list-item[data-rounded='0'] {
122
+ --list-item-shape: 0;
123
+ }
124
+
125
+ .kit-list-item[data-rounded='xs'] {
126
+ --list-item-shape: 2px;
127
+ }
128
+
129
+ .kit-list-item[data-rounded='sm'] {
130
+ --list-item-shape: 8px;
131
+ }
132
+
133
+ .kit-list-item[data-rounded='md'] {
134
+ --list-item-shape: 12px;
135
+ }
136
+
137
+ .kit-list-item[data-rounded='lg'] {
138
+ --list-item-shape: 16px;
139
+ }
140
+
141
+ .kit-list-item[data-rounded='xl'] {
142
+ --list-item-shape: 9999px;
143
+ }
144
+
145
+ .kit-list[data-variant='filled'] .kit-list-item {
146
+ background: var(--kit-list-item-bg, transparent);
147
+ }
148
+
149
+ .kit-list[data-variant='outline'] .kit-list-item::before {
150
+ content: '';
151
+ position: absolute;
152
+ inset: 0;
153
+ border: 1px solid color-mix(in oklab, currentColor 16%, transparent);
154
+ border-radius: inherit;
155
+ pointer-events: none;
156
+ }
157
+
158
+ .kit-list-item[data-active='true'] {
159
+ background: color-mix(in oklab, currentColor 12%, transparent);
160
+ }
161
+
162
+ .kit-list-item[data-disabled='true'] {
163
+ opacity: 0.45;
164
+ pointer-events: none;
165
+ }
166
+
167
+ .kit-list-item:is(button, a) {
168
+ cursor: pointer;
169
+ }
170
+
171
+ .kit-list-item__prepend,
172
+ .kit-list-item__append,
173
+ .kit-list-item__content {
174
+ display: inline-flex;
175
+ align-items: center;
176
+ min-width: 0;
177
+ }
178
+
179
+ .kit-list-item__content {
180
+ overflow: hidden;
181
+ text-overflow: ellipsis;
182
+ white-space: nowrap;
183
+ }
184
+
185
+ .kit-list-item:is(button, a):hover::after,
186
+ .kit-list-item:is(button, a):focus-visible::after {
187
+ content: '';
188
+ position: absolute;
189
+ inset: 0;
190
+ border-radius: inherit;
191
+ background: currentColor;
192
+ opacity: 0.06;
193
+ pointer-events: none;
194
+ }
195
+ </style>
@@ -0,0 +1,4 @@
1
+ import type { ListItemProps } from '../list.types.ts';
2
+ declare const ListItem: import("svelte").Component<ListItemProps, {}, "ref">;
3
+ type ListItem = ReturnType<typeof ListItem>;
4
+ export default ListItem;