lapikit 0.6.3 → 0.6.4

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 (35) hide show
  1. package/dist/components/accordion/accordion.svelte +172 -42
  2. package/dist/components/accordion/accordion.types.d.ts +8 -3
  3. package/dist/components/accordion/modules/accordion-item.svelte +71 -72
  4. package/dist/components/alert/alert.svelte +201 -118
  5. package/dist/components/alert/alert.types.d.ts +8 -6
  6. package/dist/components/app/app.svelte +4 -4
  7. package/dist/components/appbar/appbar.svelte +115 -64
  8. package/dist/components/appbar/appbar.types.d.ts +4 -4
  9. package/dist/components/aspect-ratio/aspect-ratio.svelte +4 -12
  10. package/dist/components/aspect-ratio/aspect-ratio.types.d.ts +2 -1
  11. package/dist/components/avatar/avatar.svelte +108 -66
  12. package/dist/components/avatar/avatar.types.d.ts +7 -5
  13. package/dist/components/btn/btn.svelte +167 -169
  14. package/dist/components/btn/btn.types.d.ts +5 -2
  15. package/dist/components/chip/chip.svelte +162 -140
  16. package/dist/components/chip/chip.types.d.ts +7 -3
  17. package/dist/components/dialog/dialog.svelte +84 -81
  18. package/dist/components/dialog/dialog.types.d.ts +7 -5
  19. package/dist/components/dropdown/dropdown.svelte +46 -36
  20. package/dist/components/dropdown/dropdown.types.d.ts +4 -2
  21. package/dist/components/icon/icon.svelte +28 -52
  22. package/dist/components/list/modules/list-item.svelte +0 -55
  23. package/dist/components/modal/modal.svelte +104 -98
  24. package/dist/components/modal/modal.types.d.ts +7 -5
  25. package/dist/components/popover/popover.svelte +46 -34
  26. package/dist/components/popover/popover.types.d.ts +3 -1
  27. package/dist/components/separator/separator.svelte +11 -30
  28. package/dist/components/separator/separator.types.d.ts +1 -2
  29. package/dist/components/textfield/textfield.svelte +180 -157
  30. package/dist/components/textfield/textfield.types.d.ts +4 -3
  31. package/dist/components/toolbar/toolbar.svelte +126 -108
  32. package/dist/components/toolbar/toolbar.types.d.ts +6 -7
  33. package/dist/components/tooltip/tooltip.svelte +39 -45
  34. package/dist/components/tooltip/tooltip.types.d.ts +3 -3
  35. package/package.json +1 -1
@@ -6,17 +6,20 @@
6
6
  let {
7
7
  ref = $bindable(),
8
8
  is = 'div',
9
- children = undefined,
9
+ children,
10
10
  class: className = '',
11
11
  style: styleAttr = '',
12
12
  's-class': sClass,
13
13
  's-style': sStyle,
14
- text = undefined,
15
- color = undefined,
16
- background = undefined,
17
- rounded = undefined,
18
- spacer = false,
19
- hideIcon = false,
14
+ size = 'md',
15
+ variant = 'filled',
16
+ density = 'default',
17
+ rounded = 'md',
18
+ text,
19
+ color,
20
+ background,
21
+ spacer,
22
+ hideIcon,
20
23
  ...rest
21
24
  }: AccordionProps = $props();
22
25
 
@@ -40,39 +43,29 @@
40
43
  styleProps
41
44
  })
42
45
  );
43
-
44
- let mergedStyle = $derived(
45
- [
46
- componentStyle,
47
- color ? `--kit-accordion-fg:${color}` : '',
48
- background ? `--kit-accordion-bg:${background}` : ''
49
- ]
50
- .filter(Boolean)
51
- .join('; ')
52
- );
53
46
  </script>
54
47
 
55
48
  <svelte:element
56
49
  this={is}
57
50
  bind:this={ref}
58
51
  class={componentClass}
59
- style={mergedStyle}
60
- {...restProps}
52
+ style={componentStyle}
61
53
  data-text={text ? true : undefined}
62
54
  data-spacer={spacer}
63
55
  data-hide-icon={hideIcon}
56
+ data-size={size}
57
+ data-variant={variant}
58
+ data-density={density}
64
59
  data-rounded={rounded}
60
+ style:--kit-accordion-item-fg={color && `var(--kit-color-${color})`}
61
+ style:--kit-accordion-item-bg={background && `var(--kit-color-${background})`}
62
+ {...restProps}
65
63
  >
66
64
  {@render children?.()}
67
65
  </svelte:element>
68
66
 
69
67
  <style>
70
68
  .kit-accordion {
71
- --kit-accordion-radius: 8px;
72
- --kit-accordion-gap: 0;
73
- --kit-accordion-fg: var(--kit-fg);
74
- --kit-accordion-bg: transparent;
75
-
76
69
  display: flex;
77
70
  flex-wrap: wrap;
78
71
  justify-content: center;
@@ -80,41 +73,178 @@
80
73
  padding: 0;
81
74
  list-style: none;
82
75
  position: relative;
83
- z-index: 1;
84
- gap: var(--kit-accordion-gap);
85
- color: var(--kit-accordion-fg);
86
- background: var(--kit-accordion-bg);
76
+ gap: var(--kit-accordion-gap, 0);
77
+ border: 0;
78
+ box-sizing: border-box;
79
+ transition:
80
+ background 140ms ease,
81
+ color 140ms ease,
82
+ box-shadow 140ms ease,
83
+ translate 140ms ease;
87
84
  }
88
85
 
89
86
  .kit-accordion[data-spacer='true'] {
90
- --kit-accordion-gap: 1rem;
87
+ --kit-accordion-gap: 0.5rem;
91
88
  }
92
89
 
93
- .kit-accordion[data-rounded='0'] {
94
- --kit-accordion-radius: 0;
90
+ .kit-accordion[data-spacer='true'] :global(.kit-accordion-item) {
91
+ border-radius: var(--kit-accordion-item-radius);
95
92
  }
96
93
 
97
- .kit-accordion[data-rounded='xs'] {
98
- --kit-accordion-radius: 2px;
94
+ .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item:first-child) {
95
+ border-top-left-radius: var(--kit-accordion-item-radius);
96
+ border-top-right-radius: var(--kit-accordion-item-radius);
97
+ border-bottom-left-radius: 0;
98
+ border-bottom-right-radius: 0;
99
99
  }
100
100
 
101
- .kit-accordion[data-rounded='sm'] {
102
- --kit-accordion-radius: 4px;
101
+ .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item) {
102
+ border-radius: 0;
103
103
  }
104
104
 
105
- .kit-accordion[data-rounded='md'] {
106
- --kit-accordion-radius: 8px;
105
+ .kit-accordion:not([data-spacer='true']) :global(.kit-accordion-item:last-child) {
106
+ border-top-left-radius: 0;
107
+ border-top-right-radius: 0;
108
+ border-bottom-left-radius: var(--kit-accordion-item-radius);
109
+ border-bottom-right-radius: var(--kit-accordion-item-radius);
107
110
  }
108
111
 
109
- .kit-accordion[data-rounded='lg'] {
110
- --kit-accordion-radius: 16px;
112
+ .kit-accordion[data-hide-icon='true'] :global(.kit-accordion-item__indicator) {
113
+ display: none;
111
114
  }
112
115
 
113
- .kit-accordion[data-rounded='xl'] {
114
- --kit-accordion-radius: 99999px;
116
+ /**
117
+ * rounded
118
+ * @link ...
119
+ */
120
+ .kit-accordion[data-rounded='0'] :global(.kit-accordion-item) {
121
+ --kit-accordion-item-radius: var(--kit-shape-none);
122
+ }
123
+ .kit-accordion[data-rounded='xs'] :global(.kit-accordion-item) {
124
+ --kit-accordion-item-radius: var(--kit-shape-xs);
125
+ }
126
+ .kit-accordion[data-rounded='sm'] :global(.kit-accordion-item) {
127
+ --kit-accordion-item-radius: var(--kit-shape-sm);
128
+ }
129
+ .kit-accordion[data-rounded='md'] :global(.kit-accordion-item) {
130
+ --kit-accordion-item-radius: var(--kit-shape-md);
131
+ }
132
+ .kit-accordion[data-rounded='lg'] :global(.kit-accordion-item) {
133
+ --kit-accordion-item-radius: var(--kit-shape-lg);
134
+ }
135
+ .kit-accordion[data-rounded='xl'] :global(.kit-accordion-item) {
136
+ --kit-accordion-item-radius: var(--kit-shape-xl);
137
+ }
138
+ .kit-accordion[data-rounded='full'] :global(.kit-accordion-item) {
139
+ --kit-accordion-item-radius: var(--kit-shape-full);
115
140
  }
116
141
 
117
- .kit-accordion[data-hide-icon='true'] :global(.kit-accordion-item__indicator) {
142
+ /**
143
+ * density
144
+ * @link no links
145
+ */
146
+ .kit-accordion[data-density='none'] {
147
+ --kit-accordion-density-scale: 0;
148
+ --kit-accordion-density-h-scale: 0;
149
+ }
150
+ .kit-accordion[data-density='compact'] {
151
+ --kit-accordion-density-scale: 0.9;
152
+ --kit-accordion-density-h-scale: 0.92;
153
+ }
154
+ .kit-accordion[data-density='default'] {
155
+ --kit-accordion-density-scale: 1;
156
+ --kit-accordion-density-h-scale: 1;
157
+ }
158
+ .kit-accordion[data-density='comfortable'] {
159
+ --kit-accordion-density-scale: 1.1;
160
+ --kit-accordion-density-h-scale: 1.15;
161
+ }
162
+
163
+ /**
164
+ * variant
165
+ * @link no links...
166
+ */
167
+ .kit-accordion[data-variant='filled'] :global(.kit-accordion-item) {
168
+ --kit-accordion-item-bg: var(--kit-color-surface-1);
169
+ --kit-accordion-item-fg: var(--kit-color-text);
170
+
171
+ --kit-accordion-item-hover-bg: color-mix(in oklab, var(--kit-accordion-item-bg), black 10%);
172
+ --kit-accordion-item-active-bg: color-mix(in oklab, var(--kit-accordion-item-bg), black 16%);
173
+ }
174
+ .kit-accordion[data-variant='outline'] :global(.kit-accordion-item) {
175
+ --kit-accordion-item-bg: transparent;
176
+ --kit-accordion-item-fg: var(--kit-color-text);
177
+ --kit-accordion-item-bd: var(--kit-accordion-item-fg);
178
+
179
+ --kit-accordion-item-hover-bg: color-mix(
180
+ in oklab,
181
+ var(--kit-accordion-item-fg),
182
+ transparent 80%
183
+ );
184
+ --kit-accordion-item-active-bg: color-mix(
185
+ in oklab,
186
+ var(--kit-accordion-item-fg),
187
+ transparent 92%
188
+ );
189
+ }
190
+ .kit-accordion[data-variant='text'] :global(.kit-accordion-item) {
191
+ --kit-accordion-item-bg: transparent;
192
+ --kit-accordion-item-fg: var(--kit-color-text);
193
+
194
+ --kit-accordion-item-hover-bg: color-mix(
195
+ in oklab,
196
+ var(--kit-accordion-item-fg),
197
+ transparent 80%
198
+ );
199
+ --kit-accordion-item-active-bg: color-mix(
200
+ in oklab,
201
+ var(--kit-accordion-item-fg),
202
+ transparent 92%
203
+ );
204
+ }
205
+
206
+ .kit-accordion[data-variant='text'] :global(.kit-accordion-item .outline),
207
+ .kit-accordion[data-variant='filled'] :global(.kit-accordion-item .outline) {
208
+ display: none;
209
+ }
210
+
211
+ .kit-accordion[data-variant='filled']
212
+ :global(.kit-accordion-item .kit-accordion-item__separator) {
118
213
  display: none;
119
214
  }
215
+
216
+ /**
217
+ * size
218
+ * @link nothing...
219
+ */
220
+ .kit-accordion[data-size='xs'] :global(.kit-accordion-item) {
221
+ --kit-accordion-item-h: 28px;
222
+ --kit-accordion-item-px: 10px;
223
+ --kit-accordion-item-gap: 4px;
224
+ --kit-accordion-item-font: 0.75rem;
225
+ }
226
+ .kit-accordion[data-size='sm'] :global(.kit-accordion-item) {
227
+ --kit-accordion-item-h: 32px;
228
+ --kit-accordion-item-px: 12px;
229
+ --kit-accordion-item-gap: 6px;
230
+ --kit-accordion-item-font: 0.875rem;
231
+ }
232
+ .kit-accordion[data-size='md'] :global(.kit-accordion-item) {
233
+ --kit-accordion-item-h: 40px;
234
+ --kit-accordion-item-px: 16px;
235
+ --kit-accordion-item-gap: 8px;
236
+ --kit-accordion-item-font: 1rem;
237
+ }
238
+ .kit-accordion[data-size='lg'] :global(.kit-accordion-item) {
239
+ --kit-accordion-item-h: 48px;
240
+ --kit-accordion-item-px: 20px;
241
+ --kit-accordion-item-gap: 10px;
242
+ --kit-accordion-item-font: 1.125rem;
243
+ }
244
+ .kit-accordion[data-size='xl'] :global(.kit-accordion-item) {
245
+ --kit-accordion-item-h: 56px;
246
+ --kit-accordion-item-px: 24px;
247
+ --kit-accordion-item-gap: 12px;
248
+ --kit-accordion-item-font: 1.25rem;
249
+ }
120
250
  </style>
@@ -1,5 +1,6 @@
1
- import type { RoundedType, Component } from '../../@types';
1
+ import type { RoundedType, Component, SizeType, DensityType, ElevationProps } from '../../@types';
2
2
  import type { Snippet } from 'svelte';
3
+ type AccordionVariant = 'filled' | 'outline' | 'text';
3
4
  export type ModelAccordionItemProps = {
4
5
  open: boolean;
5
6
  };
@@ -9,7 +10,10 @@ export interface AccordionProps extends Component {
9
10
  text?: string;
10
11
  color?: string;
11
12
  background?: string;
12
- rounded?: RoundedType;
13
+ rounded?: RoundedType | 'full';
14
+ size?: SizeType;
15
+ variant?: AccordionVariant;
16
+ density?: DensityType;
13
17
  spacer?: boolean;
14
18
  hideIcon?: boolean;
15
19
  }
@@ -21,7 +25,6 @@ export interface AccordionItemProps extends Component {
21
25
  is?: 'div';
22
26
  index: number | string;
23
27
  text?: string;
24
- rounded?: RoundedType;
25
28
  color?: string;
26
29
  background?: string;
27
30
  readOnly?: boolean;
@@ -30,4 +33,6 @@ export interface AccordionItemProps extends Component {
30
33
  toggle?: (index: number | string) => void;
31
34
  indicator?: Snippet<[AccordionItemModelProps]>;
32
35
  activator?: Snippet;
36
+ elevation?: ElevationProps;
33
37
  }
38
+ export {};
@@ -1,27 +1,27 @@
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 { AccordionItemModelProps, AccordionItemProps } from '../accordion.types.js';
5
5
 
6
6
  let {
7
7
  ref = $bindable(),
8
8
  is = 'div',
9
- children = undefined,
9
+ children,
10
10
  class: className = '',
11
11
  style: styleAttr = '',
12
12
  's-class': sClass,
13
13
  's-style': sStyle,
14
- activator = undefined,
15
- indicator = undefined,
16
- text = undefined,
17
- rounded = undefined,
18
- color = undefined,
19
- background = undefined,
14
+ activator,
15
+ indicator,
16
+ text,
17
+ color,
18
+ background,
20
19
  index,
21
- open = false,
22
- toggle = undefined,
20
+ open,
21
+ toggle,
23
22
  disabled = false,
24
23
  readOnly = false,
24
+ elevation,
25
25
  ...rest
26
26
  }: AccordionItemProps = $props();
27
27
 
@@ -46,15 +46,7 @@
46
46
  })
47
47
  );
48
48
 
49
- let mergedStyle = $derived(
50
- [
51
- componentStyle,
52
- color ? `--kit-accordion-item-fg:${color}` : '',
53
- background ? `--kit-accordion-item-bg:${background}` : ''
54
- ]
55
- .filter(Boolean)
56
- .join('; ')
57
- );
49
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
58
50
 
59
51
  let safeOpen = $derived(!!open);
60
52
  let model: AccordionItemModelProps = {
@@ -63,6 +55,8 @@
63
55
  }
64
56
  };
65
57
 
58
+ let elevationState = $derived(useElevation(elevation));
59
+
66
60
  function handleToggle() {
67
61
  if (readOnly || disabled || !toggle) return;
68
62
  toggle(index);
@@ -74,11 +68,18 @@
74
68
  bind:this={ref}
75
69
  class={componentClass}
76
70
  style={mergedStyle}
77
- {...restProps}
78
- data-open={safeOpen}
79
71
  data-disabled={disabled}
80
- data-rounded={rounded}
72
+ data-read-only={readOnly}
73
+ data-active={safeOpen}
74
+ data-elevation={elevationState.base}
75
+ data-elevation-hover={elevationState.hover}
76
+ data-elevation-active={elevationState.active}
77
+ style:--kit-accordion-item-fg={color && `var(--kit-color-${color})`}
78
+ style:--kit-accordion-item-bg={background && `var(--kit-color-${background})`}
79
+ {...restProps}
81
80
  >
81
+ <span class="outline"></span>
82
+
82
83
  <button
83
84
  class="kit-accordion-item__trigger"
84
85
  type="button"
@@ -110,6 +111,8 @@
110
111
  </span>
111
112
  </button>
112
113
 
114
+ <span class="kit-accordion-item__separator"></span>
115
+
113
116
  <div class="kit-accordion-item__content" hidden={!safeOpen}>
114
117
  <div class="kit-accordion-item__content-inner">
115
118
  {@render children?.()}
@@ -118,62 +121,25 @@
118
121
  </svelte:element>
119
122
 
120
123
  <style>
121
- button {
122
- appearance: none;
123
- background: none;
124
- border: none;
125
- font: inherit;
126
- color: inherit;
127
- }
128
-
129
124
  .kit-accordion-item {
130
- --kit-accordion-item-radius: var(--kit-accordion-radius, 8px);
131
- --kit-accordion-item-fg: var(--kit-accordion-fg, var(--kit-fg));
132
- --kit-accordion-item-bg: var(--kit-surface-2);
133
- --kit-accordion-item-bd: color-mix(in oklab, var(--kit-accordion-item-bg), var(--kit-fg) 12%);
134
- --kit-accordion-item-trigger-y: 1rem;
135
- --kit-accordion-item-trigger-x: 1.25rem;
136
-
137
125
  flex: 1 0 100%;
138
126
  max-width: 100%;
139
127
  position: relative;
140
- border-radius: var(--kit-accordion-item-radius);
128
+ border: 0;
129
+ box-sizing: border-box;
141
130
  background: var(--kit-accordion-item-bg);
142
131
  color: var(--kit-accordion-item-fg);
143
- border: 1px solid var(--kit-accordion-item-bd);
144
- transition:
145
- border-color 150ms ease,
146
- background 150ms ease,
147
- box-shadow 150ms ease;
132
+ gap: var(--kit-accordion-item-gap);
133
+ text-decoration: none;
134
+ font-size: var(--kit-accordion-item-font);
148
135
  overflow: clip;
149
136
  }
150
137
 
151
- .kit-accordion-item[data-rounded='0'] {
152
- --kit-accordion-item-radius: 0;
153
- }
154
-
155
- .kit-accordion-item[data-rounded='xs'] {
156
- --kit-accordion-item-radius: 2px;
157
- }
158
-
159
- .kit-accordion-item[data-rounded='sm'] {
160
- --kit-accordion-item-radius: 4px;
161
- }
162
-
163
- .kit-accordion-item[data-rounded='md'] {
164
- --kit-accordion-item-radius: 8px;
165
- }
166
-
167
- .kit-accordion-item[data-rounded='lg'] {
168
- --kit-accordion-item-radius: 16px;
169
- }
170
-
171
- .kit-accordion-item[data-rounded='xl'] {
172
- --kit-accordion-item-radius: 99999px;
173
- }
174
-
175
- .kit-accordion-item[data-open='true'] {
176
- box-shadow: 0 10px 28px color-mix(in oklab, var(--kit-fg), transparent 90%);
138
+ .kit-accordion-item > button {
139
+ appearance: none;
140
+ border: 0;
141
+ font: inherit;
142
+ text-align: inherit;
177
143
  }
178
144
 
179
145
  .kit-accordion-item__trigger {
@@ -181,10 +147,13 @@
181
147
  display: flex;
182
148
  align-items: center;
183
149
  justify-content: space-between;
184
- gap: 1rem;
185
- padding: var(--kit-accordion-item-trigger-y) var(--kit-accordion-item-trigger-x);
150
+ gap: var(--kit-accordion-item-gap);
151
+ min-height: calc(var(--kit-accordion-item-h) * var(--kit-accordion-density-h-scale));
152
+ padding: calc(var(--kit-accordion-item-px) * var(--kit-accordion-density-scale));
186
153
  cursor: pointer;
187
154
  text-align: left;
155
+ background: var(--kit-accordion-item-bg);
156
+ color: var(--kit-accordion-item-fg);
188
157
  }
189
158
 
190
159
  .kit-accordion-item__trigger:disabled,
@@ -220,6 +189,36 @@
220
189
  }
221
190
 
222
191
  .kit-accordion-item__content-inner {
223
- padding: 0 1.25rem 1rem;
192
+ padding: calc(var(--kit-accordion-item-px) * var(--kit-accordion-density-scale));
193
+ }
194
+
195
+ .kit-accordion-item__separator {
196
+ width: 96%;
197
+ height: 1px;
198
+ display: block;
199
+ position: relative;
200
+ background: var(--kit-accordion-item-fg);
201
+ margin: 0 auto;
202
+ }
203
+
204
+ .kit-accordion-item[data-read-only='false'][data-disabled='false'] > button:hover {
205
+ background: var(--kit-accordion-item-hover-bg);
206
+ }
207
+
208
+ /**I think is a good idea for not use this*/
209
+ /* .kit-accordion-item[data-active='true'][data-disabled='false'][data-read-only='false'] > button {
210
+ background: var(--kit-accordion-item-active-bg);
211
+ }
212
+ .kit-accordion-item[data-disabled='false'][data-read-only='false'] > button:active {
213
+ background: var(--kit-accordion-item-active-bg);
214
+ } */
215
+
216
+ .kit-accordion-item[data-disabled='false'][data-read-only='false'] > button:focus-visible {
217
+ outline: 2px solid var(--kit-focus);
218
+ outline-offset: 2px;
219
+ }
220
+
221
+ .kit-accordion-item .outline {
222
+ --outline-color: var(--kit-accordion-item-bd);
224
223
  }
225
224
  </style>