@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.
Files changed (49) hide show
  1. package/dist/styles/_semantic.scss +9 -3
  2. package/dist/ui/button/cmp.button.svelte +7 -2
  3. package/dist/ui/chip-group/cmp.chip-group.svelte +5 -2
  4. package/dist/ui/date-picker/cmp.date-picker.svelte +5 -1
  5. package/dist/ui/document-tabs/cmp.document-tabs.svelte +245 -0
  6. package/dist/ui/document-tabs/cmp.document-tabs.svelte.d.ts +80 -0
  7. package/dist/ui/document-tabs/document-tab.svelte +212 -0
  8. package/dist/ui/document-tabs/document-tab.svelte.d.ts +34 -0
  9. package/dist/ui/document-tabs/document-tabs-localization.d.ts +6 -0
  10. package/dist/ui/document-tabs/document-tabs-localization.js +33 -0
  11. package/dist/ui/document-tabs/index.d.ts +3 -0
  12. package/dist/ui/document-tabs/index.js +2 -0
  13. package/dist/ui/document-tabs/types.d.ts +20 -0
  14. package/dist/ui/document-tabs/types.js +1 -0
  15. package/dist/ui/emoji-picker/cmp.emoji-panel.svelte +1 -1
  16. package/dist/ui/grid-card/fields/cmp.grid-card-select-field.svelte +1 -0
  17. package/dist/ui/handle-input/cmp.handle-input.svelte +0 -1
  18. package/dist/ui/icon/cmp.icon.svelte +2 -2
  19. package/dist/ui/icon/cmp.icon.svelte.d.ts +3 -3
  20. package/dist/ui/icon-picker/cmp.icon-picker.svelte +1 -1
  21. package/dist/ui/icon-text/cmp.icon-text.svelte +4 -0
  22. package/dist/ui/icon-text/cmp.icon-text.svelte.d.ts +2 -2
  23. package/dist/ui/input/cmp.input.svelte +5 -1
  24. package/dist/ui/numeral-input/cmp.numeral-input.svelte +5 -1
  25. package/dist/ui/option-pill/cmp.option-pill.svelte +1 -1
  26. package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte +29 -3
  27. package/dist/ui/page-layout/cmp.page-panel-sidebars.svelte.d.ts +8 -0
  28. package/dist/ui/page-layout/cmp.page-panel.svelte +66 -42
  29. package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte +1 -1
  30. package/dist/ui/page-toolbar/cmp.toolbar-option.svelte +4 -1
  31. package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte.d.ts +1 -1
  32. package/dist/ui/page-toolbar/cmp.toolbar-value-stepper.svelte +4 -0
  33. package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte.d.ts +1 -1
  34. package/dist/ui/segmented-control/cmp.segmented-control.svelte +5 -2
  35. package/dist/ui/select/_select-trigger.scss +5 -1
  36. package/dist/ui/select/cmp.input-suggest.svelte +5 -1
  37. package/dist/ui/select/cmp.singleselect-async.svelte +5 -1
  38. package/dist/ui/select/multiselect-base.svelte +5 -1
  39. package/dist/ui/slider/cmp.slider.svelte +1 -0
  40. package/dist/ui/tabs/cmp.tabs.svelte +6 -14
  41. package/dist/ui/tabs/cmp.tabs.svelte.d.ts +5 -11
  42. package/dist/ui/tabs/tab.svelte +18 -76
  43. package/dist/ui/tabs/tab.svelte.d.ts +0 -1
  44. package/dist/ui/tabs/types.d.ts +1 -1
  45. package/dist/ui/url-input/cmp.url-input.svelte +0 -1
  46. package/dist/ui/website-input/cmp.website-input.svelte +0 -1
  47. package/package.json +5 -1
  48. package/dist/ui/tabs/tabs-localization.d.ts +0 -3
  49. 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 canScrollHeaderLeftBack}
149
- <button
150
- type="button"
151
- class="page-panel__header-scroll-btn page-panel__header-scroll-btn--back"
152
- onclick={scrollHeaderLeftBack}
153
- aria-label={localization.scrollBack}>
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
- class="page-panel__header-left-track"
159
- class:page-panel__header-left-track--mask-back={canScrollHeaderLeftBack && !canScrollHeaderLeftForward}
160
- class:page-panel__header-left-track--mask-forward={canScrollHeaderLeftForward && !canScrollHeaderLeftBack}
161
- class:page-panel__header-left-track--mask-both={canScrollHeaderLeftBack && canScrollHeaderLeftForward}
162
- use:headerLeftTrackMounted
163
- use:horizontalWheelScroll
164
- onscroll={(e) => updateHeaderLeftScrollState(e.currentTarget)}>
165
- {#each leftCollapseIds as cid (cid)}
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
- {#if actionsLeft}
174
- {@render actionsLeft()}
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: flex;
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
- top: 0;
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 0.25rem;
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
- left: 0;
392
- padding-right: 0.625rem;
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
- right: 0;
397
- padding-left: 0.625rem;
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: var(--sc-kit--field--height--sm);
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(--sc-kit--leading--tight);
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 = 28px, md = 32px. @default '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 = 28px, md = 32px. @default '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.75rem;
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(--sc-kit--leading--tight);
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(--sc-kit--leading--tight);
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(--sc-kit--leading--tight);
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(--sc-kit--leading--tight);
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(--sc-kit--leading--tight);
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, close: on?.close }} />
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`). Three visual variants:
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
- Providing `on.close` renders a close affordance on each non-disabled tab (works in any variant).
22
- Each tab carries an optional `disabled` flag (non-interactive). For navigation, not single-choice
23
- form input use `SegmentedControl` for the latter (it's a `radiogroup`; this is a `tablist`).
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/document: `--sc-kit--color--text--primary` |
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`). Three visual variants:
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
- * Providing `on.close` renders a close affordance on each non-disabled tab (works in any variant).
47
- * Each tab carries an optional `disabled` flag (non-interactive). For navigation, not single-choice
48
- * form input use `SegmentedControl` for the latter (it's a `radiogroup`; this is a `tablist`).
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/document: `--sc-kit--color--text--primary` |
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>>;