@streamscloud/kit 0.46.0 → 0.48.0
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/styles/_semantic.scss +9 -3
- package/dist/ui/button/cmp.button.svelte +7 -2
- package/dist/ui/chip-group/cmp.chip-group.svelte +5 -2
- package/dist/ui/date-picker/cmp.date-picker.svelte +5 -1
- package/dist/ui/document-tabs/cmp.document-tabs.svelte +245 -0
- package/dist/ui/document-tabs/cmp.document-tabs.svelte.d.ts +80 -0
- package/dist/ui/document-tabs/document-tab.svelte +212 -0
- package/dist/ui/document-tabs/document-tab.svelte.d.ts +34 -0
- package/dist/ui/document-tabs/document-tabs-localization.d.ts +6 -0
- package/dist/ui/document-tabs/document-tabs-localization.js +33 -0
- package/dist/ui/document-tabs/index.d.ts +3 -0
- package/dist/ui/document-tabs/index.js +2 -0
- package/dist/ui/document-tabs/types.d.ts +20 -0
- package/dist/ui/document-tabs/types.js +1 -0
- package/dist/ui/emoji-picker/cmp.emoji-panel.svelte +1 -1
- package/dist/ui/grid-card/fields/cmp.grid-card-select-field.svelte +1 -0
- package/dist/ui/handle-input/cmp.handle-input.svelte +0 -1
- package/dist/ui/icon/cmp.icon.svelte +2 -2
- package/dist/ui/icon/cmp.icon.svelte.d.ts +3 -3
- package/dist/ui/icon-picker/cmp.icon-picker.svelte +1 -1
- package/dist/ui/icon-text/cmp.icon-text.svelte +4 -0
- package/dist/ui/icon-text/cmp.icon-text.svelte.d.ts +2 -2
- package/dist/ui/input/cmp.input.svelte +5 -1
- package/dist/ui/numeral-input/cmp.numeral-input.svelte +5 -1
- package/dist/ui/option-pill/cmp.option-pill.svelte +1 -1
- package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte +29 -3
- package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte.d.ts +8 -0
- package/dist/ui/page-layout/cmp.page-panel.svelte +66 -42
- package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte +1 -1
- package/dist/ui/page-toolbar/cmp.toolbar-option.svelte +4 -1
- package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte.d.ts +1 -1
- package/dist/ui/page-toolbar/cmp.toolbar-value-stepper.svelte +4 -0
- package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte.d.ts +1 -1
- package/dist/ui/segmented-control/cmp.segmented-control.svelte +5 -2
- package/dist/ui/select/_select-trigger.scss +5 -1
- package/dist/ui/select/cmp.input-suggest.svelte +5 -1
- package/dist/ui/select/cmp.singleselect-async.svelte +5 -1
- package/dist/ui/select/multiselect-base.svelte +5 -1
- package/dist/ui/slider/cmp.slider.svelte +1 -0
- package/dist/ui/tabs/cmp.tabs.svelte +6 -14
- package/dist/ui/tabs/cmp.tabs.svelte.d.ts +5 -11
- package/dist/ui/tabs/tab.svelte +18 -76
- package/dist/ui/tabs/tab.svelte.d.ts +0 -1
- package/dist/ui/tabs/types.d.ts +1 -1
- package/dist/ui/url-input/cmp.url-input.svelte +0 -1
- package/dist/ui/website-input/cmp.website-input.svelte +0 -1
- package/package.json +5 -1
- package/dist/ui/tabs/tabs-localization.d.ts +0 -3
- package/dist/ui/tabs/tabs-localization.js +0 -12
|
@@ -145,44 +145,50 @@ $effect(() => {
|
|
|
145
145
|
{:else}
|
|
146
146
|
{#if balanceHeaderCenter || leftCollapseIds.length > 0 || title || actionsLeft}
|
|
147
147
|
<div class="page-panel__header-left" class:page-panel__header-left--balanced={balanceHeaderCenter}>
|
|
148
|
-
{#if
|
|
149
|
-
<
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
<Icon src={IconChevronLeft} size="sm" />
|
|
155
|
-
</button>
|
|
148
|
+
{#if leftCollapseIds.length > 0}
|
|
149
|
+
<div class="page-panel__header-collapse">
|
|
150
|
+
{#each leftCollapseIds as cid (cid)}
|
|
151
|
+
<PanelCollapseButton panelState={panelState} panelId={cid} />
|
|
152
|
+
{/each}
|
|
153
|
+
</div>
|
|
156
154
|
{/if}
|
|
157
|
-
<div
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
<PanelCollapseButton panelState={panelState} panelId={cid} />
|
|
167
|
-
{/each}
|
|
168
|
-
{#if typeof title === 'function'}
|
|
169
|
-
{@render title()}
|
|
170
|
-
{:else if title}
|
|
171
|
-
<span class="page-panel__title">{title}</span>
|
|
155
|
+
<div class="page-panel__header-track-wrap">
|
|
156
|
+
{#if canScrollHeaderLeftBack}
|
|
157
|
+
<button
|
|
158
|
+
type="button"
|
|
159
|
+
class="page-panel__header-scroll-btn page-panel__header-scroll-btn--back"
|
|
160
|
+
onclick={scrollHeaderLeftBack}
|
|
161
|
+
aria-label={localization.scrollBack}>
|
|
162
|
+
<Icon src={IconChevronLeft} size="sm" />
|
|
163
|
+
</button>
|
|
172
164
|
{/if}
|
|
173
|
-
|
|
174
|
-
|
|
165
|
+
<div
|
|
166
|
+
class="page-panel__header-left-track"
|
|
167
|
+
class:page-panel__header-left-track--mask-back={canScrollHeaderLeftBack && !canScrollHeaderLeftForward}
|
|
168
|
+
class:page-panel__header-left-track--mask-forward={canScrollHeaderLeftForward && !canScrollHeaderLeftBack}
|
|
169
|
+
class:page-panel__header-left-track--mask-both={canScrollHeaderLeftBack && canScrollHeaderLeftForward}
|
|
170
|
+
use:headerLeftTrackMounted
|
|
171
|
+
use:horizontalWheelScroll
|
|
172
|
+
onscroll={(e) => updateHeaderLeftScrollState(e.currentTarget)}>
|
|
173
|
+
{#if typeof title === 'function'}
|
|
174
|
+
{@render title()}
|
|
175
|
+
{:else if title}
|
|
176
|
+
<span class="page-panel__title">{title}</span>
|
|
177
|
+
{/if}
|
|
178
|
+
{#if actionsLeft}
|
|
179
|
+
{@render actionsLeft()}
|
|
180
|
+
{/if}
|
|
181
|
+
</div>
|
|
182
|
+
{#if canScrollHeaderLeftForward}
|
|
183
|
+
<button
|
|
184
|
+
type="button"
|
|
185
|
+
class="page-panel__header-scroll-btn page-panel__header-scroll-btn--forward"
|
|
186
|
+
onclick={scrollHeaderLeftForward}
|
|
187
|
+
aria-label={localization.scrollForward}>
|
|
188
|
+
<Icon src={IconChevronRight} size="sm" />
|
|
189
|
+
</button>
|
|
175
190
|
{/if}
|
|
176
191
|
</div>
|
|
177
|
-
{#if canScrollHeaderLeftForward}
|
|
178
|
-
<button
|
|
179
|
-
type="button"
|
|
180
|
-
class="page-panel__header-scroll-btn page-panel__header-scroll-btn--forward"
|
|
181
|
-
onclick={scrollHeaderLeftForward}
|
|
182
|
-
aria-label={localization.scrollForward}>
|
|
183
|
-
<Icon src={IconChevronRight} size="sm" />
|
|
184
|
-
</button>
|
|
185
|
-
{/if}
|
|
186
192
|
</div>
|
|
187
193
|
{/if}
|
|
188
194
|
{#if balanceHeaderCenter || actionsCenter}
|
|
@@ -274,6 +280,7 @@ to min / max; Enter / Space toggle collapsed.
|
|
|
274
280
|
--_page-panel--footer-justify: var(--sc-kit--page-panel--footer--justify, flex-end);
|
|
275
281
|
--_page-panel--header-background: var(--sc-kit--page-panel--header--background, var(--sc-kit--color--bg--panel));
|
|
276
282
|
--_page-panel--header-padding-inline: var(--sc-kit--page-panel--header--padding-inline, 1.5rem);
|
|
283
|
+
--_page-panel--content-start: var(--_--page-panel--content-start, 0px);
|
|
277
284
|
--_page-panel--title-font-size: var(--sc-kit--page-panel--title--font-size, 0.875rem);
|
|
278
285
|
--_page-panel--resizer-color: var(--sc-kit--page-panel--resizer-color, var(--sc-kit--color--border));
|
|
279
286
|
--_page-panel--height: var(--_--page-layout--panel--height, 100%);
|
|
@@ -334,7 +341,8 @@ to min / max; Enter / Space toggle collapsed.
|
|
|
334
341
|
font-size: var(--_page-panel--title-font-size);
|
|
335
342
|
}
|
|
336
343
|
.page-panel__header-left {
|
|
337
|
-
display:
|
|
344
|
+
display: grid;
|
|
345
|
+
grid-template-columns: minmax(min-content, max(0px, var(--_page-panel--content-start) - var(--_page-panel--header-padding-inline))) minmax(0, 1fr);
|
|
338
346
|
align-self: stretch;
|
|
339
347
|
align-items: center;
|
|
340
348
|
min-width: 0;
|
|
@@ -346,12 +354,29 @@ to min / max; Enter / Space toggle collapsed.
|
|
|
346
354
|
.page-panel__header-left:hover {
|
|
347
355
|
--_scroll-btn-opacity: 1;
|
|
348
356
|
}
|
|
357
|
+
.page-panel__header-collapse {
|
|
358
|
+
grid-column: 1;
|
|
359
|
+
display: flex;
|
|
360
|
+
align-items: center;
|
|
361
|
+
padding-inline-end: 1rem;
|
|
362
|
+
}
|
|
363
|
+
.page-panel__header-track-wrap {
|
|
364
|
+
grid-column: 2;
|
|
365
|
+
position: relative;
|
|
366
|
+
display: flex;
|
|
367
|
+
align-self: stretch;
|
|
368
|
+
align-items: stretch;
|
|
369
|
+
min-width: 0;
|
|
370
|
+
}
|
|
349
371
|
.page-panel__header-left-track {
|
|
350
372
|
--_mask-size: 1.5rem;
|
|
351
373
|
display: flex;
|
|
374
|
+
align-self: stretch;
|
|
352
375
|
align-items: center;
|
|
353
376
|
gap: 1rem;
|
|
354
377
|
min-width: 0;
|
|
378
|
+
padding-block-end: 1px;
|
|
379
|
+
margin-block-end: -1px;
|
|
355
380
|
overflow-x: auto;
|
|
356
381
|
scrollbar-width: none;
|
|
357
382
|
}
|
|
@@ -369,13 +394,12 @@ to min / max; Enter / Space toggle collapsed.
|
|
|
369
394
|
}
|
|
370
395
|
.page-panel__header-scroll-btn {
|
|
371
396
|
position: absolute;
|
|
372
|
-
|
|
373
|
-
bottom: 0;
|
|
397
|
+
inset-block: 0;
|
|
374
398
|
z-index: 1;
|
|
375
399
|
display: flex;
|
|
376
400
|
align-items: center;
|
|
377
401
|
justify-content: center;
|
|
378
|
-
padding: 0
|
|
402
|
+
padding-inline: 0.25rem;
|
|
379
403
|
background: transparent;
|
|
380
404
|
backdrop-filter: blur(2px);
|
|
381
405
|
border: none;
|
|
@@ -388,13 +412,13 @@ to min / max; Enter / Space toggle collapsed.
|
|
|
388
412
|
color: var(--sc-kit--color--text--primary);
|
|
389
413
|
}
|
|
390
414
|
.page-panel__header-scroll-btn--back {
|
|
391
|
-
|
|
392
|
-
padding-
|
|
415
|
+
inset-inline-start: 0;
|
|
416
|
+
padding-inline-end: 0.625rem;
|
|
393
417
|
background: linear-gradient(to right, var(--_page-panel--header-background) 60%, transparent);
|
|
394
418
|
}
|
|
395
419
|
.page-panel__header-scroll-btn--forward {
|
|
396
|
-
|
|
397
|
-
padding-
|
|
420
|
+
inset-inline-end: 0;
|
|
421
|
+
padding-inline-start: 0.625rem;
|
|
398
422
|
background: linear-gradient(to left, var(--_page-panel--header-background) 60%, transparent);
|
|
399
423
|
}
|
|
400
424
|
.page-panel__header-center {
|
|
@@ -55,7 +55,7 @@ so they stay visually identical.
|
|
|
55
55
|
transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default);
|
|
56
56
|
}
|
|
57
57
|
.toolbar-icon-button--sm {
|
|
58
|
-
--_tib--size-height:
|
|
58
|
+
--_tib--size-height: 1.75rem;
|
|
59
59
|
}
|
|
60
60
|
.toolbar-icon-button--md {
|
|
61
61
|
--_tib--size-height: var(--sc-kit--field--height--md);
|
|
@@ -77,6 +77,7 @@ these — plus `ToolbarSectionTitle` — inside one panel to build column / fiel
|
|
|
77
77
|
--_opt--height: var(--sc-kit--toolbar-option--height, var(--_opt--size-height));
|
|
78
78
|
--_opt--padding-inline: var(--sc-kit--toolbar-option--padding-inline, var(--_opt--size-padding-inline));
|
|
79
79
|
--_opt--font-size: var(--sc-kit--toolbar-option--font-size, var(--_opt--size-font-size));
|
|
80
|
+
--_opt--line-height: var(--_opt--size-line-height);
|
|
80
81
|
--_opt--gap: var(--sc-kit--toolbar-option--gap, var(--sc-kit--space--2));
|
|
81
82
|
--_opt--border-radius: var(--sc-kit--toolbar-option--border-radius, var(--sc-kit--radius--sm));
|
|
82
83
|
--_opt--color: var(--sc-kit--toolbar-option--color, var(--sc-kit--color--text--primary));
|
|
@@ -102,19 +103,21 @@ these — plus `ToolbarSectionTitle` — inside one panel to build column / fiel
|
|
|
102
103
|
border-radius: var(--_opt--border-radius);
|
|
103
104
|
color: var(--_opt--color);
|
|
104
105
|
font-size: var(--_opt--font-size);
|
|
105
|
-
line-height: var(--
|
|
106
|
+
line-height: var(--_opt--line-height);
|
|
106
107
|
transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default);
|
|
107
108
|
}
|
|
108
109
|
.toolbar-option--sm {
|
|
109
110
|
--_opt--size-height: var(--sc-kit--field--height--sm);
|
|
110
111
|
--_opt--size-padding-inline: var(--sc-kit--space--2);
|
|
111
112
|
--_opt--size-font-size: var(--sc-kit--font-size--sm);
|
|
113
|
+
--_opt--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
112
114
|
--_opt--size-glyph-size: var(--sc-kit--field--icon--size--sm);
|
|
113
115
|
}
|
|
114
116
|
.toolbar-option--md {
|
|
115
117
|
--_opt--size-height: var(--sc-kit--field--height--md);
|
|
116
118
|
--_opt--size-padding-inline: var(--sc-kit--space--3);
|
|
117
119
|
--_opt--size-font-size: var(--sc-kit--font-size--md);
|
|
120
|
+
--_opt--size-line-height: var(--sc-kit--line-height--control--md);
|
|
118
121
|
--_opt--size-glyph-size: var(--sc-kit--field--icon--size--md);
|
|
119
122
|
}
|
|
120
123
|
.toolbar-option:hover {
|
|
@@ -6,7 +6,7 @@ declare function $$render<S>(): {
|
|
|
6
6
|
value: S;
|
|
7
7
|
/** Title shown above the options. @default localized `Order by` */
|
|
8
8
|
label?: string;
|
|
9
|
-
/** Button size preset — sm =
|
|
9
|
+
/** Button size preset — sm = 29px, md = 32px. @default 'sm' */
|
|
10
10
|
size?: "sm" | "md";
|
|
11
11
|
/** Presentational trigger — `'icon'` (flat icon button), `'button'` (labelled secondary button), or a custom snippet. The popover owns the click and is named by `label`. @default 'icon' */
|
|
12
12
|
trigger?: "icon" | "button" | Snippet;
|
|
@@ -54,16 +54,19 @@ Shares the field-height preset so it lines up with other toolbar controls.
|
|
|
54
54
|
.toolbar-value-stepper--sm {
|
|
55
55
|
--_toolbar-value-stepper--height: var(--sc-kit--field--height--sm);
|
|
56
56
|
--_toolbar-value-stepper--font-size: var(--sc-kit--font-size--sm);
|
|
57
|
+
--_toolbar-value-stepper--line-height: var(--sc-kit--line-height--control--sm);
|
|
57
58
|
--_toolbar-value-stepper--border-radius: var(--sc-kit--field--border-radius--sm);
|
|
58
59
|
}
|
|
59
60
|
.toolbar-value-stepper--md {
|
|
60
61
|
--_toolbar-value-stepper--height: var(--sc-kit--field--height--md);
|
|
61
62
|
--_toolbar-value-stepper--font-size: var(--sc-kit--font-size--md);
|
|
63
|
+
--_toolbar-value-stepper--line-height: var(--sc-kit--line-height--control--md);
|
|
62
64
|
--_toolbar-value-stepper--border-radius: var(--sc-kit--field--border-radius--md);
|
|
63
65
|
}
|
|
64
66
|
.toolbar-value-stepper--lg {
|
|
65
67
|
--_toolbar-value-stepper--height: var(--sc-kit--field--height--lg);
|
|
66
68
|
--_toolbar-value-stepper--font-size: var(--sc-kit--font-size--lg);
|
|
69
|
+
--_toolbar-value-stepper--line-height: var(--sc-kit--line-height--control--lg);
|
|
67
70
|
--_toolbar-value-stepper--border-radius: var(--sc-kit--field--border-radius--md);
|
|
68
71
|
}
|
|
69
72
|
.toolbar-value-stepper__btn {
|
|
@@ -83,6 +86,7 @@ Shares the field-height preset so it lines up with other toolbar controls.
|
|
|
83
86
|
min-inline-size: var(--_toolbar-value-stepper--value--min-inline-size);
|
|
84
87
|
text-align: center;
|
|
85
88
|
font-size: var(--_toolbar-value-stepper--font-size);
|
|
89
|
+
line-height: var(--_toolbar-value-stepper--line-height);
|
|
86
90
|
color: var(--sc-kit--color--text--primary);
|
|
87
91
|
font-variant-numeric: tabular-nums;
|
|
88
92
|
}</style>
|
|
@@ -2,7 +2,7 @@ import type { Snippet } from 'svelte';
|
|
|
2
2
|
type ViewMode = 'list' | 'grid' | 'card';
|
|
3
3
|
type Props = {
|
|
4
4
|
view: ViewMode;
|
|
5
|
-
/** Button size preset — sm =
|
|
5
|
+
/** Button size preset — sm = 29px, md = 32px. @default 'sm' */
|
|
6
6
|
size?: 'sm' | 'md';
|
|
7
7
|
/** Reveal the `card` view button alongside list / grid. @default false */
|
|
8
8
|
showCard?: boolean;
|
|
@@ -61,6 +61,7 @@ Each segment carries an optional `disabled` flag (non-interactive) and an option
|
|
|
61
61
|
<style>.segmented-control {
|
|
62
62
|
--_sc--height: var(--sc-kit--segmented-control--height, var(--_sc--size-height));
|
|
63
63
|
--_sc--font-size: var(--sc-kit--segmented-control--font-size, var(--_sc--size-font-size));
|
|
64
|
+
--_sc--line-height: var(--_sc--size-line-height);
|
|
64
65
|
--_sc--padding-inline: var(--sc-kit--segmented-control--padding-inline, var(--_sc--size-padding-inline));
|
|
65
66
|
--_sc--radius: var(--sc-kit--segmented-control--border-radius, var(--_sc--size-radius, var(--sc-kit--field--border-radius--md)));
|
|
66
67
|
--_sc--color: var(--sc-kit--segmented-control--color, var(--sc-kit--color--text--muted));
|
|
@@ -83,14 +84,16 @@ Each segment carries an optional `disabled` flag (non-interactive) and an option
|
|
|
83
84
|
width: 100%;
|
|
84
85
|
}
|
|
85
86
|
.segmented-control--sm {
|
|
86
|
-
--_sc--size-height: 1.
|
|
87
|
+
--_sc--size-height: 1.8125rem;
|
|
87
88
|
--_sc--size-font-size: var(--sc-kit--font-size--sm);
|
|
89
|
+
--_sc--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
88
90
|
--_sc--size-padding-inline: 0.625rem;
|
|
89
91
|
--_sc--size-radius: var(--sc-kit--field--border-radius--sm);
|
|
90
92
|
}
|
|
91
93
|
.segmented-control--md {
|
|
92
94
|
--_sc--size-height: 2rem;
|
|
93
95
|
--_sc--size-font-size: var(--sc-kit--font-size--md);
|
|
96
|
+
--_sc--size-line-height: var(--sc-kit--line-height--control--md);
|
|
94
97
|
--_sc--size-padding-inline: 0.75rem;
|
|
95
98
|
--_sc--size-radius: var(--sc-kit--field--border-radius--md);
|
|
96
99
|
}
|
|
@@ -146,7 +149,7 @@ Each segment carries an optional `disabled` flag (non-interactive) and an option
|
|
|
146
149
|
font-family: inherit;
|
|
147
150
|
font-size: var(--_sc--font-size);
|
|
148
151
|
font-weight: var(--sc-kit--font-weight--regular);
|
|
149
|
-
line-height: var(--
|
|
152
|
+
line-height: var(--_sc--line-height);
|
|
150
153
|
cursor: pointer;
|
|
151
154
|
white-space: nowrap;
|
|
152
155
|
min-width: 0;
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
--_sel--border-radius: var(--sc-kit--select--trigger--border-radius, var(--_sel--size-border-radius, var(--sc-kit--field--border-radius--md)));
|
|
19
19
|
--_sel--underline-color: var(--sc-kit--select--trigger--underline-color, transparent);
|
|
20
20
|
--_sel--font-size: var(--sc-kit--select--trigger--font-size, var(--_sel--size-font-size, var(--sc-kit--font-size--md)));
|
|
21
|
+
--_sel--line-height: var(--sc-kit--select--trigger--line-height, var(--_sel--size-line-height, var(--sc-kit--line-height--control--md)));
|
|
21
22
|
--_sel--color: var(--sc-kit--select--trigger--color, var(--sc-kit--color--text--primary));
|
|
22
23
|
--_sel--placeholder-color: var(--sc-kit--select--trigger--placeholder--color, var(--sc-kit--color--text--placeholder));
|
|
23
24
|
--_sel--icon-color: var(--sc-kit--select--trigger--icon--color, var(--sc-kit--color--text--muted));
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
border-radius: var(--_sel--border-radius);
|
|
39
40
|
color: var(--_sel--color);
|
|
40
41
|
font-size: var(--_sel--font-size);
|
|
41
|
-
line-height: var(--
|
|
42
|
+
line-height: var(--_sel--line-height);
|
|
42
43
|
cursor: pointer;
|
|
43
44
|
// prevents hairline anti-aliasing
|
|
44
45
|
box-shadow: inset 0 calc(-1 * max(2px, 0.125em)) var(--_sel--underline-color);
|
|
@@ -48,6 +49,7 @@
|
|
|
48
49
|
--_sel--size-height: var(--sc-kit--field--height--sm);
|
|
49
50
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
|
|
50
51
|
--_sel--size-font-size: var(--sc-kit--font-size--sm);
|
|
52
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
51
53
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--sm);
|
|
52
54
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--sm);
|
|
53
55
|
}
|
|
@@ -55,6 +57,7 @@
|
|
|
55
57
|
--_sel--size-height: var(--sc-kit--field--height--md);
|
|
56
58
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--md);
|
|
57
59
|
--_sel--size-font-size: var(--sc-kit--font-size--md);
|
|
60
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--md);
|
|
58
61
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--md);
|
|
59
62
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
60
63
|
}
|
|
@@ -62,6 +65,7 @@
|
|
|
62
65
|
--_sel--size-height: var(--sc-kit--field--height--lg);
|
|
63
66
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
|
|
64
67
|
--_sel--size-font-size: var(--sc-kit--font-size--lg);
|
|
68
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--lg);
|
|
65
69
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--lg);
|
|
66
70
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
67
71
|
}
|
|
@@ -322,6 +322,7 @@ background--hover}`.
|
|
|
322
322
|
--_sel--border-radius: var(--sc-kit--select--trigger--border-radius, var(--_sel--size-border-radius, var(--sc-kit--field--border-radius--md)));
|
|
323
323
|
--_sel--underline-color: var(--sc-kit--select--trigger--underline-color, transparent);
|
|
324
324
|
--_sel--font-size: var(--sc-kit--select--trigger--font-size, var(--_sel--size-font-size, var(--sc-kit--font-size--md)));
|
|
325
|
+
--_sel--line-height: var(--sc-kit--select--trigger--line-height, var(--_sel--size-line-height, var(--sc-kit--line-height--control--md)));
|
|
325
326
|
--_sel--color: var(--sc-kit--select--trigger--color, var(--sc-kit--color--text--primary));
|
|
326
327
|
--_sel--placeholder-color: var(--sc-kit--select--trigger--placeholder--color, var(--sc-kit--color--text--placeholder));
|
|
327
328
|
--_sel--icon-color: var(--sc-kit--select--trigger--icon--color, var(--sc-kit--color--text--muted));
|
|
@@ -347,7 +348,7 @@ background--hover}`.
|
|
|
347
348
|
border-radius: var(--_sel--border-radius);
|
|
348
349
|
color: var(--_sel--color);
|
|
349
350
|
font-size: var(--_sel--font-size);
|
|
350
|
-
line-height: var(--
|
|
351
|
+
line-height: var(--_sel--line-height);
|
|
351
352
|
cursor: pointer;
|
|
352
353
|
box-shadow: inset 0 calc(-1 * max(2px, 0.125em)) var(--_sel--underline-color);
|
|
353
354
|
transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), border-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default), box-shadow var(--sc-kit--duration--base) var(--sc-kit--ease--default);
|
|
@@ -356,6 +357,7 @@ background--hover}`.
|
|
|
356
357
|
--_sel--size-height: var(--sc-kit--field--height--sm);
|
|
357
358
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
|
|
358
359
|
--_sel--size-font-size: var(--sc-kit--font-size--sm);
|
|
360
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
359
361
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--sm);
|
|
360
362
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--sm);
|
|
361
363
|
}
|
|
@@ -363,6 +365,7 @@ background--hover}`.
|
|
|
363
365
|
--_sel--size-height: var(--sc-kit--field--height--md);
|
|
364
366
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--md);
|
|
365
367
|
--_sel--size-font-size: var(--sc-kit--font-size--md);
|
|
368
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--md);
|
|
366
369
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--md);
|
|
367
370
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
368
371
|
}
|
|
@@ -370,6 +373,7 @@ background--hover}`.
|
|
|
370
373
|
--_sel--size-height: var(--sc-kit--field--height--lg);
|
|
371
374
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
|
|
372
375
|
--_sel--size-font-size: var(--sc-kit--font-size--lg);
|
|
376
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--lg);
|
|
373
377
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--lg);
|
|
374
378
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
375
379
|
}
|
|
@@ -191,6 +191,7 @@ background--hover}`.
|
|
|
191
191
|
--_sel--border-radius: var(--sc-kit--select--trigger--border-radius, var(--_sel--size-border-radius, var(--sc-kit--field--border-radius--md)));
|
|
192
192
|
--_sel--underline-color: var(--sc-kit--select--trigger--underline-color, transparent);
|
|
193
193
|
--_sel--font-size: var(--sc-kit--select--trigger--font-size, var(--_sel--size-font-size, var(--sc-kit--font-size--md)));
|
|
194
|
+
--_sel--line-height: var(--sc-kit--select--trigger--line-height, var(--_sel--size-line-height, var(--sc-kit--line-height--control--md)));
|
|
194
195
|
--_sel--color: var(--sc-kit--select--trigger--color, var(--sc-kit--color--text--primary));
|
|
195
196
|
--_sel--placeholder-color: var(--sc-kit--select--trigger--placeholder--color, var(--sc-kit--color--text--placeholder));
|
|
196
197
|
--_sel--icon-color: var(--sc-kit--select--trigger--icon--color, var(--sc-kit--color--text--muted));
|
|
@@ -216,7 +217,7 @@ background--hover}`.
|
|
|
216
217
|
border-radius: var(--_sel--border-radius);
|
|
217
218
|
color: var(--_sel--color);
|
|
218
219
|
font-size: var(--_sel--font-size);
|
|
219
|
-
line-height: var(--
|
|
220
|
+
line-height: var(--_sel--line-height);
|
|
220
221
|
cursor: pointer;
|
|
221
222
|
box-shadow: inset 0 calc(-1 * max(2px, 0.125em)) var(--_sel--underline-color);
|
|
222
223
|
transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), border-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default), box-shadow var(--sc-kit--duration--base) var(--sc-kit--ease--default);
|
|
@@ -225,6 +226,7 @@ background--hover}`.
|
|
|
225
226
|
--_sel--size-height: var(--sc-kit--field--height--sm);
|
|
226
227
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
|
|
227
228
|
--_sel--size-font-size: var(--sc-kit--font-size--sm);
|
|
229
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
228
230
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--sm);
|
|
229
231
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--sm);
|
|
230
232
|
}
|
|
@@ -232,6 +234,7 @@ background--hover}`.
|
|
|
232
234
|
--_sel--size-height: var(--sc-kit--field--height--md);
|
|
233
235
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--md);
|
|
234
236
|
--_sel--size-font-size: var(--sc-kit--font-size--md);
|
|
237
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--md);
|
|
235
238
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--md);
|
|
236
239
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
237
240
|
}
|
|
@@ -239,6 +242,7 @@ background--hover}`.
|
|
|
239
242
|
--_sel--size-height: var(--sc-kit--field--height--lg);
|
|
240
243
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
|
|
241
244
|
--_sel--size-font-size: var(--sc-kit--font-size--lg);
|
|
245
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--lg);
|
|
242
246
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--lg);
|
|
243
247
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
244
248
|
}
|
|
@@ -405,6 +405,7 @@ padding-inline, font-size, gap, max-width, remove-color, remove-color--hover}`.
|
|
|
405
405
|
--_sel--border-radius: var(--sc-kit--select--trigger--border-radius, var(--_sel--size-border-radius, var(--sc-kit--field--border-radius--md)));
|
|
406
406
|
--_sel--underline-color: var(--sc-kit--select--trigger--underline-color, transparent);
|
|
407
407
|
--_sel--font-size: var(--sc-kit--select--trigger--font-size, var(--_sel--size-font-size, var(--sc-kit--font-size--md)));
|
|
408
|
+
--_sel--line-height: var(--sc-kit--select--trigger--line-height, var(--_sel--size-line-height, var(--sc-kit--line-height--control--md)));
|
|
408
409
|
--_sel--color: var(--sc-kit--select--trigger--color, var(--sc-kit--color--text--primary));
|
|
409
410
|
--_sel--placeholder-color: var(--sc-kit--select--trigger--placeholder--color, var(--sc-kit--color--text--placeholder));
|
|
410
411
|
--_sel--icon-color: var(--sc-kit--select--trigger--icon--color, var(--sc-kit--color--text--muted));
|
|
@@ -430,7 +431,7 @@ padding-inline, font-size, gap, max-width, remove-color, remove-color--hover}`.
|
|
|
430
431
|
border-radius: var(--_sel--border-radius);
|
|
431
432
|
color: var(--_sel--color);
|
|
432
433
|
font-size: var(--_sel--font-size);
|
|
433
|
-
line-height: var(--
|
|
434
|
+
line-height: var(--_sel--line-height);
|
|
434
435
|
cursor: pointer;
|
|
435
436
|
box-shadow: inset 0 calc(-1 * max(2px, 0.125em)) var(--_sel--underline-color);
|
|
436
437
|
transition: background-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), border-color var(--sc-kit--duration--base) var(--sc-kit--ease--default), color var(--sc-kit--duration--base) var(--sc-kit--ease--default), box-shadow var(--sc-kit--duration--base) var(--sc-kit--ease--default);
|
|
@@ -439,6 +440,7 @@ padding-inline, font-size, gap, max-width, remove-color, remove-color--hover}`.
|
|
|
439
440
|
--_sel--size-height: var(--sc-kit--field--height--sm);
|
|
440
441
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--sm);
|
|
441
442
|
--_sel--size-font-size: var(--sc-kit--font-size--sm);
|
|
443
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--sm);
|
|
442
444
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--sm);
|
|
443
445
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--sm);
|
|
444
446
|
}
|
|
@@ -446,6 +448,7 @@ padding-inline, font-size, gap, max-width, remove-color, remove-color--hover}`.
|
|
|
446
448
|
--_sel--size-height: var(--sc-kit--field--height--md);
|
|
447
449
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--md);
|
|
448
450
|
--_sel--size-font-size: var(--sc-kit--font-size--md);
|
|
451
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--md);
|
|
449
452
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--md);
|
|
450
453
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
451
454
|
}
|
|
@@ -453,6 +456,7 @@ padding-inline, font-size, gap, max-width, remove-color, remove-color--hover}`.
|
|
|
453
456
|
--_sel--size-height: var(--sc-kit--field--height--lg);
|
|
454
457
|
--_sel--size-padding-inline: var(--sc-kit--field--padding-inline--lg);
|
|
455
458
|
--_sel--size-font-size: var(--sc-kit--font-size--lg);
|
|
459
|
+
--_sel--size-line-height: var(--sc-kit--line-height--control--lg);
|
|
456
460
|
--_sel--size-icon-size: var(--sc-kit--field--icon--size--lg);
|
|
457
461
|
--_sel--size-border-radius: var(--sc-kit--field--border-radius--md);
|
|
458
462
|
}
|
|
@@ -138,6 +138,7 @@ Optionally renders the current value, a numeric input alongside the track, and t
|
|
|
138
138
|
padding: 0 var(--sc-kit--space--2);
|
|
139
139
|
text-align: center;
|
|
140
140
|
font-size: var(--sc-kit--font-size--sm);
|
|
141
|
+
line-height: var(--sc-kit--line-height--control--sm);
|
|
141
142
|
font-variant-numeric: tabular-nums;
|
|
142
143
|
background: var(--sc-kit--color--bg--field);
|
|
143
144
|
border: 1px solid var(--sc-kit--color--border--field);
|
|
@@ -5,22 +5,21 @@ const isActive = (tab) => (compare ? compare(value, tab.value) : value === tab.v
|
|
|
5
5
|
|
|
6
6
|
<div class="tabs tabs--{variant}" role="tablist">
|
|
7
7
|
{#each tabs as tab, i (i)}
|
|
8
|
-
<TabItem tab={tab} variant={variant} size={size} active={isActive(tab)} on={{ select: on?.change
|
|
8
|
+
<TabItem tab={tab} variant={variant} size={size} active={isActive(tab)} on={{ select: on?.change }} />
|
|
9
9
|
{/each}
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
<!--
|
|
13
13
|
@component
|
|
14
14
|
Tabs — header strip for switching between content panels. Panel rendering is consumer-controlled
|
|
15
|
-
(switch on the active `value`).
|
|
15
|
+
(switch on the active `value`). Two visual variants:
|
|
16
16
|
|
|
17
17
|
- **`default`**: underline — a 2px accent bar travels under the active tab; the strip has a bottom border.
|
|
18
18
|
- **`pills`**: filled — the active tab lifts as a card on an inset tray.
|
|
19
|
-
- **`document`**: browser-style tabs — flush, rounded-top; the active tab background matches the canvas so it reads as continuous with the content below.
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
Each tab carries an optional `disabled` flag (non-interactive). It's a `tablist` — for navigation
|
|
21
|
+
between panels, not single-choice form input. Closable tabs are an editor concern, not a panel
|
|
22
|
+
switcher's, so they are not part of this component.
|
|
24
23
|
|
|
25
24
|
### CSS Custom Properties
|
|
26
25
|
| Property | Description | Default |
|
|
@@ -32,16 +31,13 @@ form input — use `SegmentedControl` for the latter (it's a `radiogroup`; this
|
|
|
32
31
|
| `--sc-kit--tabs--radius` | Tab radius (pills) / tray radius | `--sc-kit--radius--sm` / `--sc-kit--radius--md` |
|
|
33
32
|
| `--sc-kit--tabs--color` | Default tab text color | `--sc-kit--color--text--secondary` |
|
|
34
33
|
| `--sc-kit--tabs--color--hover` | Hover text color | `--sc-kit--color--text--primary` |
|
|
35
|
-
| `--sc-kit--tabs--color--active` | Active tab text color | default: `--sc-kit--color--accent`, pills
|
|
34
|
+
| `--sc-kit--tabs--color--active` | Active tab text color | default: `--sc-kit--color--accent`, pills: `--sc-kit--color--text--primary` |
|
|
36
35
|
| `--sc-kit--tabs--color--disabled` | Disabled tab text color | `--sc-kit--color--text--muted` |
|
|
37
36
|
| `--sc-kit--tabs--accent` | Underline bar color (default variant) | `--sc-kit--color--accent` |
|
|
38
37
|
| `--sc-kit--tabs--border-color` | Bottom border color (default variant) | `--sc-kit--color--border` |
|
|
39
38
|
| `--sc-kit--tabs--pills--background` | Inset tray background (pills variant) | `--sc-kit--color--bg--active` |
|
|
40
39
|
| `--sc-kit--tabs--pills--background--active` | Active tab background (pills variant) | `--sc-kit--color--bg--panel` |
|
|
41
40
|
| `--sc-kit--tabs--pills--shadow--active` | Active tab lift shadow (pills variant) | `--sc-kit--shadow--sm` |
|
|
42
|
-
| `--sc-kit--tabs--document--background` | Inactive tab background (document variant) | `neutral-200` / `dark-500` |
|
|
43
|
-
| `--sc-kit--tabs--document--background--active` | Active tab background (document variant) — matches the canvas | `--sc-kit--color--bg--app` |
|
|
44
|
-
| `--sc-kit--tabs--document--background--hover` | Inactive tab hover background (document variant) | `--sc-kit--color--bg--hover` |
|
|
45
41
|
-->
|
|
46
42
|
|
|
47
43
|
<style>.tabs {
|
|
@@ -60,8 +56,4 @@ form input — use `SegmentedControl` for the latter (it's a `radiogroup`; this
|
|
|
60
56
|
padding: 0.25rem;
|
|
61
57
|
background: var(--_tabs--pills-background);
|
|
62
58
|
border-radius: var(--sc-kit--radius--md);
|
|
63
|
-
}
|
|
64
|
-
.tabs--document {
|
|
65
|
-
gap: 0;
|
|
66
|
-
align-items: flex-end;
|
|
67
59
|
}</style>
|
|
@@ -12,8 +12,6 @@ declare function $$render<T>(): {
|
|
|
12
12
|
compare?: (a: T, b: T) => boolean;
|
|
13
13
|
on?: {
|
|
14
14
|
change?: (value: T) => void;
|
|
15
|
-
/** Providing this renders a close affordance on each non-disabled tab (works in any variant). */
|
|
16
|
-
close?: (value: T) => void;
|
|
17
15
|
};
|
|
18
16
|
};
|
|
19
17
|
exports: {};
|
|
@@ -37,15 +35,14 @@ interface $$IsomorphicComponent {
|
|
|
37
35
|
}
|
|
38
36
|
/**
|
|
39
37
|
* Tabs — header strip for switching between content panels. Panel rendering is consumer-controlled
|
|
40
|
-
* (switch on the active `value`).
|
|
38
|
+
* (switch on the active `value`). Two visual variants:
|
|
41
39
|
*
|
|
42
40
|
* - **`default`**: underline — a 2px accent bar travels under the active tab; the strip has a bottom border.
|
|
43
41
|
* - **`pills`**: filled — the active tab lifts as a card on an inset tray.
|
|
44
|
-
* - **`document`**: browser-style tabs — flush, rounded-top; the active tab background matches the canvas so it reads as continuous with the content below.
|
|
45
42
|
*
|
|
46
|
-
*
|
|
47
|
-
*
|
|
48
|
-
*
|
|
43
|
+
* Each tab carries an optional `disabled` flag (non-interactive). It's a `tablist` — for navigation
|
|
44
|
+
* between panels, not single-choice form input. Closable tabs are an editor concern, not a panel
|
|
45
|
+
* switcher's, so they are not part of this component.
|
|
49
46
|
*
|
|
50
47
|
* ### CSS Custom Properties
|
|
51
48
|
* | Property | Description | Default |
|
|
@@ -57,16 +54,13 @@ interface $$IsomorphicComponent {
|
|
|
57
54
|
* | `--sc-kit--tabs--radius` | Tab radius (pills) / tray radius | `--sc-kit--radius--sm` / `--sc-kit--radius--md` |
|
|
58
55
|
* | `--sc-kit--tabs--color` | Default tab text color | `--sc-kit--color--text--secondary` |
|
|
59
56
|
* | `--sc-kit--tabs--color--hover` | Hover text color | `--sc-kit--color--text--primary` |
|
|
60
|
-
* | `--sc-kit--tabs--color--active` | Active tab text color | default: `--sc-kit--color--accent`, pills
|
|
57
|
+
* | `--sc-kit--tabs--color--active` | Active tab text color | default: `--sc-kit--color--accent`, pills: `--sc-kit--color--text--primary` |
|
|
61
58
|
* | `--sc-kit--tabs--color--disabled` | Disabled tab text color | `--sc-kit--color--text--muted` |
|
|
62
59
|
* | `--sc-kit--tabs--accent` | Underline bar color (default variant) | `--sc-kit--color--accent` |
|
|
63
60
|
* | `--sc-kit--tabs--border-color` | Bottom border color (default variant) | `--sc-kit--color--border` |
|
|
64
61
|
* | `--sc-kit--tabs--pills--background` | Inset tray background (pills variant) | `--sc-kit--color--bg--active` |
|
|
65
62
|
* | `--sc-kit--tabs--pills--background--active` | Active tab background (pills variant) | `--sc-kit--color--bg--panel` |
|
|
66
63
|
* | `--sc-kit--tabs--pills--shadow--active` | Active tab lift shadow (pills variant) | `--sc-kit--shadow--sm` |
|
|
67
|
-
* | `--sc-kit--tabs--document--background` | Inactive tab background (document variant) | `neutral-200` / `dark-500` |
|
|
68
|
-
* | `--sc-kit--tabs--document--background--active` | Active tab background (document variant) — matches the canvas | `--sc-kit--color--bg--app` |
|
|
69
|
-
* | `--sc-kit--tabs--document--background--hover` | Inactive tab hover background (document variant) | `--sc-kit--color--bg--hover` |
|
|
70
64
|
*/
|
|
71
65
|
declare const Cmp: $$IsomorphicComponent;
|
|
72
66
|
type Cmp<T> = InstanceType<typeof Cmp<T>>;
|