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
@@ -2,30 +2,9 @@
2
2
  import { onDestroy } from 'svelte';
3
3
  import { get } from 'svelte/store';
4
4
  import { makeComponentProps } from '../../html-mapped';
5
- import { useClassName, useStyles } from '../../utils';
5
+ import { useClassName, useElevation, useStyles } from '../../utils';
6
6
  import { modalOpen, modalStack, popModal, pushModal, setOpenModal } from './modal.js';
7
- import type { ModalDensity, ModalPosition, ModalProps, ModalSize } from './modal.types.js';
8
-
9
- function resolveSize(value: ModalSize | undefined): ModalSize {
10
- return value === 'xs' ||
11
- value === 'sm' ||
12
- value === 'md' ||
13
- value === 'lg' ||
14
- value === 'xl' ||
15
- value === 'full'
16
- ? value
17
- : 'md';
18
- }
19
-
20
- function resolvePosition(value: ModalPosition | undefined): ModalPosition {
21
- return value === 'top' || value === 'center' || value === 'bottom' ? value : 'center';
22
- }
23
-
24
- function resolveDensity(value: ModalDensity | undefined): ModalDensity {
25
- return value === 'compact' || value === 'comfortable' || value === 'default'
26
- ? value
27
- : 'default';
28
- }
7
+ import type { ModalProps } from './modal.types.js';
29
8
 
30
9
  const modalId = crypto.randomUUID();
31
10
  let wasPushed = $state(false);
@@ -48,6 +27,8 @@
48
27
  color = undefined,
49
28
  background = undefined,
50
29
  closeWithEsc = true,
30
+ space,
31
+ elevation = '2',
51
32
  ...rest
52
33
  }: ModalProps = $props();
53
34
 
@@ -55,6 +36,8 @@
55
36
  makeComponentProps(rest as Record<string, unknown>)
56
37
  );
57
38
 
39
+ let elevationState = $derived(useElevation(elevation));
40
+
58
41
  let componentClass = $derived(
59
42
  useClassName({
60
43
  baseClass: 'kit-modal',
@@ -78,18 +61,7 @@
78
61
  : `${classContent ?? ''}`.trim()
79
62
  );
80
63
 
81
- let safeSize = $derived(resolveSize(size));
82
- let safePosition = $derived(resolvePosition(position));
83
- let safeDensity = $derived(resolveDensity(density));
84
- let mergedStyle = $derived(
85
- [
86
- componentStyle,
87
- color ? `--kit-modal-fg:${color}` : '',
88
- background ? `--kit-modal-bg:${background}` : ''
89
- ]
90
- .filter(Boolean)
91
- .join('; ')
92
- );
64
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
93
65
 
94
66
  $effect(() => {
95
67
  if (open && !wasPushed) {
@@ -151,18 +123,23 @@
151
123
  data-contain={contain}
152
124
  >
153
125
  {#if contain}
154
- <!-- svelte-ignore a11y_click_events_have_key_events -->
155
- <div class="kit-modal__overlay" onclick={handleClose}></div>
126
+ <div class="kit-modal__overlay" role="presentation" onclick={handleClose}></div>
156
127
  {/if}
157
128
 
158
129
  <div
159
130
  {...restProps}
160
131
  class={['kit-modal__content', contentClass]}
161
- data-size={safeSize}
162
- data-position={safePosition}
163
- data-density={safeDensity}
132
+ data-size={size}
133
+ data-position={position}
134
+ data-density={density}
164
135
  data-rounded={rounded}
136
+ data-elevation={elevationState.base}
137
+ data-elevation-hover={elevationState.hover}
138
+ data-elevation-active={elevationState.active}
165
139
  onclick={(event: MouseEvent) => event.stopPropagation()}
140
+ style:--kit-modal-fg={color && `var(--kit-color-${color})`}
141
+ style:--kit-modal-bg={background && `var(--kit-color-${background})`}
142
+ style:--kit-modal-space={space}
166
143
  >
167
144
  {@render children?.()}
168
145
  </div>
@@ -171,16 +148,7 @@
171
148
 
172
149
  <style>
173
150
  .kit-modal {
174
- --kit-modal-bg: var(--kit-surface-1);
175
- --kit-modal-fg: var(--kit-fg);
176
- --kit-modal-bd: var(--kit-border);
177
- --kit-modal-radius: 12px;
178
- --kit-modal-px: 1rem;
179
- --kit-modal-py: 1rem;
180
151
  --kit-modal-max: min(32rem, calc(100vw - 2rem));
181
- --kit-modal-top: 50%;
182
- --kit-modal-bottom: auto;
183
- --kit-modal-translate-y: -50%;
184
152
 
185
153
  position: fixed;
186
154
  inset: 0;
@@ -195,29 +163,30 @@
195
163
  .kit-modal__overlay {
196
164
  position: absolute;
197
165
  inset: 0;
198
- background: rgb(15 23 42 / 0.42);
166
+ background: color-mix(in oklab, var(--kit-color-shadow), transparent 70%);
199
167
  backdrop-filter: blur(2px);
200
168
  pointer-events: auto;
201
169
  }
202
170
 
203
171
  .kit-modal__content {
172
+ --kit-modal-bg: var(--kit-color-surface-1);
173
+ --kit-modal-fg: var(--kit-color-text);
174
+
204
175
  position: fixed;
205
- left: 50%;
176
+ left: var(--kit-modal-left);
177
+ right: var(--kit-modal-right);
206
178
  top: var(--kit-modal-top);
207
179
  bottom: var(--kit-modal-bottom);
208
- translate: -50% var(--kit-modal-translate-y);
180
+ translate: var(--kit-modal-translate-x) var(--kit-modal-translate-y);
209
181
  box-sizing: border-box;
210
182
  width: min(calc(100vw - 2rem), var(--kit-modal-max));
211
183
  max-height: calc(100dvh - 2rem);
212
184
  overflow: auto;
213
- padding: var(--kit-modal-py) var(--kit-modal-px);
214
- border: 1px solid var(--kit-modal-bd);
185
+ padding: calc(var(--kit-modal-px) * var(--kit-modal-density-scale));
186
+ border: 0;
215
187
  border-radius: var(--kit-modal-radius);
216
188
  background: var(--kit-modal-bg);
217
189
  color: var(--kit-modal-fg);
218
- box-shadow:
219
- 0 20px 50px rgb(15 23 42 / 0.18),
220
- 0 4px 16px rgb(15 23 42 / 0.1);
221
190
  pointer-events: auto;
222
191
  }
223
192
 
@@ -225,24 +194,33 @@
225
194
  position: absolute;
226
195
  }
227
196
 
197
+ /**
198
+ * size
199
+ * @link nothing...
200
+ */
228
201
  .kit-modal__content[data-size='xs'] {
229
- --kit-modal-max: min(20rem, calc(100vw - 2rem));
202
+ --kit-modal-max: 20rem;
203
+ --kit-modal-px: 10px;
230
204
  }
231
205
 
232
206
  .kit-modal__content[data-size='sm'] {
233
- --kit-modal-max: min(24rem, calc(100vw - 2rem));
207
+ --kit-modal-max: 24rem;
208
+ --kit-modal-px: 12px;
234
209
  }
235
210
 
236
211
  .kit-modal__content[data-size='md'] {
237
- --kit-modal-max: min(32rem, calc(100vw - 2rem));
212
+ --kit-modal-max: 32rem;
213
+ --kit-modal-px: 16px;
238
214
  }
239
215
 
240
216
  .kit-modal__content[data-size='lg'] {
241
- --kit-modal-max: min(42rem, calc(100vw - 2rem));
217
+ --kit-modal-max: 42rem;
218
+ --kit-modal-px: 20px;
242
219
  }
243
220
 
244
221
  .kit-modal__content[data-size='xl'] {
245
- --kit-modal-max: min(56rem, calc(100vw - 2rem));
222
+ --kit-modal-max: 56rem;
223
+ --kit-modal-px: 24px;
246
224
  }
247
225
 
248
226
  .kit-modal__content[data-size='full'] {
@@ -258,60 +236,88 @@
258
236
  border-bottom-right-radius: 0;
259
237
  }
260
238
 
261
- .kit-modal__content[data-position='top'] {
262
- --kit-modal-top: 1rem;
263
- --kit-modal-bottom: auto;
264
- --kit-modal-translate-y: 0;
265
- }
266
-
267
- .kit-modal__content[data-position='center'] {
268
- --kit-modal-top: 50%;
269
- --kit-modal-bottom: auto;
270
- --kit-modal-translate-y: -50%;
239
+ /**
240
+ * density
241
+ * @link no links
242
+ */
243
+ .kit-modal__content[data-density='none'] {
244
+ --kit-modal-density-scale: 0;
271
245
  }
272
-
273
- .kit-modal__content[data-position='bottom'] {
274
- --kit-modal-top: auto;
275
- --kit-modal-bottom: 1rem;
276
- --kit-modal-translate-y: 0;
277
- }
278
-
279
246
  .kit-modal__content[data-density='compact'] {
280
- --kit-modal-px: 0.75rem;
281
- --kit-modal-py: 0.75rem;
247
+ --kit-modal-density-scale: 0.9;
282
248
  }
283
-
284
249
  .kit-modal__content[data-density='default'] {
285
- --kit-modal-px: 1rem;
286
- --kit-modal-py: 1rem;
250
+ --kit-modal-density-scale: 1;
287
251
  }
288
-
289
252
  .kit-modal__content[data-density='comfortable'] {
290
- --kit-modal-px: 1.25rem;
291
- --kit-modal-py: 1.25rem;
253
+ --kit-modal-density-scale: 1.1;
292
254
  }
293
255
 
256
+ /**
257
+ * rounded
258
+ * @link ...
259
+ */
294
260
  .kit-modal__content[data-rounded='0'] {
295
- --kit-modal-radius: 0;
261
+ --kit-modal-radius: var(--kit-shape-none);
296
262
  }
297
-
298
263
  .kit-modal__content[data-rounded='xs'] {
299
- --kit-modal-radius: 2px;
264
+ --kit-modal-radius: var(--kit-shape-xs);
300
265
  }
301
-
302
266
  .kit-modal__content[data-rounded='sm'] {
303
- --kit-modal-radius: 6px;
267
+ --kit-modal-radius: var(--kit-shape-sm);
304
268
  }
305
-
306
269
  .kit-modal__content[data-rounded='md'] {
307
- --kit-modal-radius: 12px;
270
+ --kit-modal-radius: var(--kit-shape-md);
308
271
  }
309
-
310
272
  .kit-modal__content[data-rounded='lg'] {
311
- --kit-modal-radius: 18px;
273
+ --kit-modal-radius: var(--kit-shape-lg);
312
274
  }
313
-
314
275
  .kit-modal__content[data-rounded='xl'] {
315
- --kit-modal-radius: 9999px;
276
+ --kit-modal-radius: var(--kit-shape-xl);
277
+ }
278
+
279
+ /**
280
+ * position
281
+ * @link nothing...
282
+ */
283
+
284
+ .kit-modal__content[data-position='top'],
285
+ .kit-modal__content[data-position='center'],
286
+ .kit-modal__content[data-position='bottom'] {
287
+ --kit-modal-translate-x: -50%;
288
+ --kit-modal-left: 50%;
289
+ }
290
+ .kit-modal__content[data-position='top'],
291
+ .kit-modal__content[data-position='top-left'],
292
+ .kit-modal__content[data-position='top-right'] {
293
+ --kit-modal-top: var(--kit-modal-space, 1rem);
294
+ --kit-modal-bottom: auto;
295
+ --kit-modal-translate-y: 0;
296
+ }
297
+ .kit-modal__content[data-position='center'],
298
+ .kit-modal__content[data-position='center-left'],
299
+ .kit-modal__content[data-position='center-right'] {
300
+ --kit-modal-top: 50%;
301
+ --kit-modal-bottom: auto;
302
+ --kit-modal-translate-y: -50%;
303
+ }
304
+
305
+ .kit-modal__content[data-position='bottom'],
306
+ .kit-modal__content[data-position='bottom-left'],
307
+ .kit-modal__content[data-position='bottom-right'] {
308
+ --kit-modal-top: auto;
309
+ --kit-modal-bottom: var(--kit-modal-space, 1rem);
310
+ --kit-modal-translate-y: 0;
311
+ }
312
+ .kit-modal__content[data-position='top-left'],
313
+ .kit-modal__content[data-position='center-left'],
314
+ .kit-modal__content[data-position='bottom-left'] {
315
+ --kit-modal-left: var(--kit-modal-space, 1rem);
316
+ --kit-modal-translate-x: 0;
317
+ }
318
+ .kit-modal__content[data-position='top-right'],
319
+ .kit-modal__content[data-position='center-right'],
320
+ .kit-modal__content[data-position='bottom-right'] {
321
+ --kit-modal-right: var(--kit-modal-space, 1rem);
316
322
  }
317
323
  </style>
@@ -1,7 +1,6 @@
1
- import type { Component, RoundedType } from '../../@types';
2
- export type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3
- export type ModalPosition = 'top' | 'center' | 'bottom';
4
- export type ModalDensity = 'compact' | 'comfortable' | 'default';
1
+ import type { Component, DensityType, ElevationProps, RoundedType } from '../../@types';
2
+ type ModalSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'full';
3
+ type ModalPosition = 'top' | 'center' | 'bottom' | 'top-left' | 'top-right' | 'center-left' | 'center-right' | 'bottom-left' | 'bottom-right';
5
4
  export interface ModalProps extends Component {
6
5
  ref?: HTMLDivElement | null;
7
6
  open?: boolean;
@@ -10,9 +9,12 @@ export interface ModalProps extends Component {
10
9
  persistent?: boolean;
11
10
  position?: ModalPosition;
12
11
  rounded?: RoundedType;
13
- density?: ModalDensity;
12
+ density?: DensityType;
14
13
  classContent?: string | string[] | undefined;
15
14
  color?: string;
16
15
  background?: string;
17
16
  closeWithEsc?: boolean;
17
+ space?: string;
18
+ elevation?: ElevationProps;
18
19
  }
20
+ export {};
@@ -1,5 +1,5 @@
1
1
  <script lang="ts">
2
- import { useClassName, useStyles, clickOutside } from '../../utils';
2
+ import { useClassName, useStyles, clickOutside, useElevation } from '../../utils';
3
3
  import { makeComponentProps } from '../../html-mapped';
4
4
  import { getPositions } from './popover.svelte.js';
5
5
  import type { ModelPopoverProps, PopoverProps } from './popover.types.js';
@@ -9,7 +9,7 @@
9
9
  open = $bindable(false),
10
10
  children,
11
11
  activator,
12
- rounded,
12
+ rounded = 'md',
13
13
  position = 'bottom',
14
14
  color,
15
15
  background,
@@ -17,19 +17,17 @@
17
17
  style: styleAttr = '',
18
18
  's-class': sClass,
19
19
  's-style': sStyle,
20
+ elevation = '2',
21
+ density = 'default',
20
22
  ...rest
21
23
  }: PopoverProps = $props();
22
24
 
23
- let safePosition = $derived(
24
- position === 'top' || position === 'bottom' || position === 'left' || position === 'right'
25
- ? position
26
- : 'bottom'
27
- );
28
-
29
25
  let { classProps, styleProps, restProps } = $derived(
30
26
  makeComponentProps(rest as Record<string, unknown>)
31
27
  );
32
28
 
29
+ let elevationState = $derived(useElevation(elevation));
30
+
33
31
  let componentClass = $derived(
34
32
  useClassName({
35
33
  baseClass: 'kit-popover-content',
@@ -47,16 +45,7 @@
47
45
  })
48
46
  );
49
47
 
50
- let mergedStyle = $derived(
51
- [
52
- componentStyle,
53
- background ? `--kit-popover-bg:${background}` : '',
54
- color ? `--kit-popover-fg:${color}` : '',
55
- typeof rounded === 'string' && rounded.includes('px') ? `--kit-popover-radius:${rounded}` : ''
56
- ]
57
- .filter(Boolean)
58
- .join('; ')
59
- );
48
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
60
49
 
61
50
  const positioner = getPositions();
62
51
 
@@ -80,7 +69,7 @@
80
69
 
81
70
  const updatePosition = () => {
82
71
  if (!contentRef || !activatorRef) return;
83
- positioner.update(activatorRef, contentRef, safePosition, false, true);
72
+ positioner.update(activatorRef, contentRef, position, false, true);
84
73
  axis = positioner.values;
85
74
  };
86
75
 
@@ -121,7 +110,13 @@
121
110
  style={`left:${axis.x}px; top:${axis.y}px; ${mergedStyle}`}
122
111
  role="dialog"
123
112
  data-rounded={rounded}
124
- data-position={axis.location ?? safePosition}
113
+ data-position={axis.location ?? position}
114
+ data-density={density}
115
+ data-elevation={elevationState.base}
116
+ data-elevation-hover={elevationState.hover}
117
+ data-elevation-active={elevationState.active}
118
+ style:--kit-modal-fg={color && `var(--kit-color-${color})`}
119
+ style:--kit-modal-bg={background && `var(--kit-color-${background})`}
125
120
  use:clickOutside={{ exclude: [contentRef, activatorRef], onClose: () => (open = false) }}
126
121
  {...restProps}
127
122
  >
@@ -131,43 +126,60 @@
131
126
 
132
127
  <style>
133
128
  .kit-popover-content {
134
- --kit-popover-bg: var(--kit-surface-1);
135
- --kit-popover-fg: var(--kit-fg);
136
- --kit-popover-radius: 12px;
137
- --kit-popover-bd: color-mix(in oklab, var(--kit-fg), transparent 88%);
138
- --kit-popover-shadow: 0 18px 40px -18px color-mix(in oklab, black 24%, transparent);
129
+ --kit-popover-bg: var(--kit-color-surface-3);
130
+ --kit-popover-fg: var(--kit-color-text);
139
131
 
140
132
  position: fixed;
141
133
  z-index: 1900;
142
134
  display: inline-block;
143
135
  width: auto;
144
136
  max-width: min(28rem, calc(100vw - 1rem));
145
- padding: 1rem;
146
- border: 1px solid var(--kit-popover-bd);
137
+ padding: calc(1rem * var(--kit-popover-density-scale));
138
+ border: 0;
147
139
  border-radius: var(--kit-popover-radius);
148
140
  background: var(--kit-popover-bg);
149
141
  color: var(--kit-popover-fg);
150
- box-shadow: var(--kit-popover-shadow);
151
142
  opacity: 1;
152
143
  transition: opacity 140ms ease;
153
144
  }
154
145
 
146
+ /**
147
+ * rounded
148
+ * @link ...
149
+ */
155
150
  .kit-popover-content[data-rounded='0'] {
156
- --kit-popover-radius: 0;
151
+ --kit-popover-radius: var(--kit-shape-none);
157
152
  }
158
153
  .kit-popover-content[data-rounded='xs'] {
159
- --kit-popover-radius: 2px;
154
+ --kit-popover-radius: var(--kit-shape-xs);
160
155
  }
161
156
  .kit-popover-content[data-rounded='sm'] {
162
- --kit-popover-radius: 4px;
157
+ --kit-popover-radius: var(--kit-shape-sm);
163
158
  }
164
159
  .kit-popover-content[data-rounded='md'] {
165
- --kit-popover-radius: 8px;
160
+ --kit-popover-radius: var(--kit-shape-md);
166
161
  }
167
162
  .kit-popover-content[data-rounded='lg'] {
168
- --kit-popover-radius: 16px;
163
+ --kit-popover-radius: var(--kit-shape-lg);
169
164
  }
170
165
  .kit-popover-content[data-rounded='xl'] {
171
- --kit-popover-radius: 99999px;
166
+ --kit-popover-radius: var(--kit-shape-xl);
167
+ }
168
+
169
+ /**
170
+ * density
171
+ * @link no url
172
+ */
173
+ .kit-popover-content[data-density='none'] {
174
+ --kit-popover-density-scale: 0;
175
+ }
176
+ .kit-popover-content[data-density='compact'] {
177
+ --kit-popover-density-scale: 0.8;
178
+ }
179
+ .kit-popover-content[data-density='default'] {
180
+ --kit-popover-density-scale: 1;
181
+ }
182
+ .kit-popover-content[data-density='comfortable'] {
183
+ --kit-popover-density-scale: 1.15;
172
184
  }
173
185
  </style>
@@ -1,4 +1,4 @@
1
- import type { Component, PropValue, RoundedType } from '../../@types';
1
+ import type { Component, DensityType, ElevationProps, PropValue, RoundedType } from '../../@types';
2
2
  import type { Snippet } from 'svelte';
3
3
  export type PositionElement = {
4
4
  x: number;
@@ -16,5 +16,7 @@ export interface PopoverProps extends Component {
16
16
  color?: string;
17
17
  background?: string;
18
18
  activator?: Snippet<[ModelPopoverProps]>;
19
+ elevation?: ElevationProps;
20
+ density?: DensityType;
19
21
  [key: string]: PropValue | Record<string, PropValue> | unknown;
20
22
  }
@@ -7,9 +7,8 @@
7
7
  ref = $bindable(),
8
8
  is = 'hr',
9
9
  inset = false,
10
- thickness,
10
+ thickness = 'thin',
11
11
  orientation = 'horizontal',
12
- opacity,
13
12
  color,
14
13
  class: className = '',
15
14
  style: styleAttr = '',
@@ -18,12 +17,6 @@
18
17
  ...rest
19
18
  }: SeparatorProps = $props();
20
19
 
21
- let safeOrientation = $derived(
22
- typeof orientation === 'string' && (orientation === 'horizontal' || orientation === 'vertical')
23
- ? orientation
24
- : 'horizontal'
25
- );
26
-
27
20
  let { classProps, styleProps, restProps } = $derived(
28
21
  makeComponentProps(rest as Record<string, unknown>)
29
22
  );
@@ -45,21 +38,10 @@
45
38
  })
46
39
  );
47
40
 
48
- let mergedStyle = $derived(
49
- [
50
- componentStyle,
51
- color ? `--kit-separator-color:${color}` : '',
52
- opacity !== undefined ? `--kit-separator-opacity:${opacity}` : '',
53
- thickness !== undefined && safeOrientation === 'horizontal'
54
- ? `--kit-separator-top-width:${typeof thickness === 'number' ? `${thickness}px` : thickness}`
55
- : '',
56
- thickness !== undefined && safeOrientation === 'vertical'
57
- ? `--kit-separator-right-width:${typeof thickness === 'number' ? `${thickness}px` : thickness}`
58
- : ''
59
- ]
60
- .filter(Boolean)
61
- .join('; ')
62
- );
41
+ const formatThickness = (value?: number | string) =>
42
+ typeof thickness === 'number' ? `${value}px` : value;
43
+
44
+ let mergedStyle = $derived([componentStyle].filter(Boolean).join('; '));
63
45
  </script>
64
46
 
65
47
  <svelte:element
@@ -69,24 +51,23 @@
69
51
  class={componentClass}
70
52
  style={mergedStyle}
71
53
  role="separator"
72
- aria-orientation={safeOrientation}
54
+ aria-orientation={orientation || 'horizontal'}
73
55
  data-inset={inset || undefined}
74
- data-orientation={safeOrientation}
56
+ data-orientation={orientation}
57
+ style:--kit-separator-color={color && `var(--kit-color-${color})`}
58
+ style:--kit-separator-top-width={orientation === 'horizontal' ? formatThickness(thickness) : ''}
59
+ style:--kit-separator-right-width={orientation === 'vertical' ? formatThickness(thickness) : ''}
75
60
  />
76
61
 
77
62
  <style>
78
63
  .kit-separator {
79
- --kit-separator-color: var(--kit-fg);
80
- --kit-separator-opacity: 0.12;
81
- --kit-separator-top-width: thin;
82
- --kit-separator-right-width: thin;
64
+ --kit-separator-color: var(--kit-color-border);
83
65
  --kit-separator-vertical-min-size: 1.5rem;
84
66
 
85
67
  display: block;
86
68
  flex: 1 1 100%;
87
69
  height: 0;
88
70
  max-height: 0;
89
- opacity: var(--kit-separator-opacity);
90
71
  border-color: var(--kit-separator-color);
91
72
  border-style: solid;
92
73
  transition: inherit;
@@ -5,8 +5,7 @@ export interface SeparatorProps extends Base {
5
5
  is?: 'div' | 'hr';
6
6
  inset?: boolean;
7
7
  thickness?: string | number;
8
- opacity?: string | number;
9
8
  color?: string;
10
- orientation?: Orientation | Record<string, Orientation>;
9
+ orientation?: Orientation;
11
10
  }
12
11
  export {};