@streamscloud/kit 0.2.11 → 0.2.13

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 (61) hide show
  1. package/dist/core/local-storage/index.d.ts +1 -0
  2. package/dist/core/local-storage/index.js +1 -0
  3. package/dist/core/local-storage/local-storage-item.d.ts +10 -0
  4. package/dist/core/local-storage/local-storage-item.js +27 -0
  5. package/dist/styles/_responsive.scss +48 -0
  6. package/dist/ui/button/cmp.button.svelte +2 -2
  7. package/dist/ui/button/cmp.button.svelte.d.ts +2 -2
  8. package/dist/ui/button/cmp.options-button.svelte +2 -2
  9. package/dist/ui/button/resources/button-base.svelte +3 -3
  10. package/dist/ui/button/resources/button-theme.svelte +2 -2
  11. package/dist/ui/dropdown/cmp.dropdown.svelte +8 -3
  12. package/dist/ui/icon-text/cmp.icon-text.svelte +2 -2
  13. package/dist/ui/icon-text/cmp.icon-text.svelte.d.ts +2 -0
  14. package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte +160 -0
  15. package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte.d.ts +20 -0
  16. package/dist/ui/page-toolbar/cmp.toolbar-button-item.svelte +34 -0
  17. package/dist/ui/page-toolbar/cmp.toolbar-button-item.svelte.d.ts +18 -0
  18. package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte +21 -0
  19. package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte.d.ts +12 -0
  20. package/dist/ui/page-toolbar/cmp.toolbar-dropdown.svelte +29 -0
  21. package/dist/ui/page-toolbar/cmp.toolbar-dropdown.svelte.d.ts +17 -0
  22. package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte +58 -0
  23. package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte.d.ts +19 -0
  24. package/dist/ui/page-toolbar/cmp.toolbar-search-input.svelte +49 -0
  25. package/dist/ui/page-toolbar/cmp.toolbar-search-input.svelte.d.ts +20 -0
  26. package/dist/ui/page-toolbar/cmp.toolbar-segmented-control.svelte +40 -0
  27. package/dist/ui/page-toolbar/cmp.toolbar-segmented-control.svelte.d.ts +39 -0
  28. package/dist/ui/page-toolbar/cmp.toolbar-switch-item.svelte +51 -0
  29. package/dist/ui/page-toolbar/cmp.toolbar-switch-item.svelte.d.ts +43 -0
  30. package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte +45 -0
  31. package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte.d.ts +19 -0
  32. package/dist/ui/page-toolbar/index.d.ts +10 -0
  33. package/dist/ui/page-toolbar/index.js +9 -0
  34. package/dist/ui/page-toolbar/types.d.ts +6 -0
  35. package/dist/ui/page-toolbar/types.js +1 -0
  36. package/dist/ui/player/carousel/cmp.carousel.svelte +20 -11
  37. package/dist/ui/player/carousel/cmp.carousel.svelte.d.ts +4 -0
  38. package/dist/ui/seek-bar/cmp.seek-bar.svelte +5 -3
  39. package/dist/ui/segmented-control/cmp.segmented-control.svelte +97 -0
  40. package/dist/ui/segmented-control/cmp.segmented-control.svelte.d.ts +52 -0
  41. package/dist/ui/segmented-control/index.d.ts +1 -0
  42. package/dist/ui/segmented-control/index.js +1 -0
  43. package/dist/ui/table/cmp.table.svelte +5 -3
  44. package/dist/ui/table/index.d.ts +1 -1
  45. package/dist/ui/table/table-cells/table-text-cell.svelte +2 -2
  46. package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte +77 -38
  47. package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte.d.ts +16 -6
  48. package/dist/ui/table/table-columns-manager/table-columns-manager-localization.d.ts +4 -0
  49. package/dist/ui/table/table-columns-manager/table-columns-manager-localization.js +19 -0
  50. package/dist/ui/table/table-group-actions/cmp.table-group-actions.svelte +3 -1
  51. package/dist/ui/table/table-group-actions/table-group-actions-localization.d.ts +3 -0
  52. package/dist/ui/table/table-group-actions/table-group-actions-localization.js +12 -0
  53. package/dist/ui/table/table-headers/table-header-sortable-localization.d.ts +7 -0
  54. package/dist/ui/table/table-headers/table-header-sortable-localization.js +40 -0
  55. package/dist/ui/table/table-headers/table-header-sortable.svelte +7 -5
  56. package/dist/ui/table/table-localization.d.ts +6 -0
  57. package/dist/ui/table/table-localization.js +33 -0
  58. package/dist/ui/table/table-model.svelte.d.ts +1 -0
  59. package/dist/ui/table/table-model.svelte.js +3 -0
  60. package/dist/ui/table/types.d.ts +5 -0
  61. package/package.json +13 -1
@@ -0,0 +1,49 @@
1
+ <script lang="ts">import { Utils } from '../../core/utils';
2
+ import { Icon } from '../icon';
3
+ import { Input } from '../inputs';
4
+ import IconSearch from '@fluentui/svg-icons/icons/search_20_regular.svg?raw';
5
+ const { value, placeholder = 'Search...', debounce = 0, on } = $props();
6
+ let focused = $state(false);
7
+ const expanded = $derived(focused || !!value);
8
+ const onInput = (v) => {
9
+ on?.input?.(v);
10
+ };
11
+ const onInputDebounced = $derived(debounce > 0 ? Utils.debounce(onInput, debounce) : onInput);
12
+ </script>
13
+
14
+ {#snippet searchIcon()}
15
+ <Icon src={IconSearch} />
16
+ {/snippet}
17
+
18
+ <div class="toolbar-search-input" class:toolbar-search-input--expanded={expanded}>
19
+ <Input
20
+ value={value}
21
+ placeholder={placeholder}
22
+ icon={searchIcon}
23
+ clearable
24
+ borderless={!expanded}
25
+ on={{ input: onInputDebounced, change: onInputDebounced, focus: () => (focused = true), blur: () => (focused = false) }} />
26
+ </div>
27
+
28
+ <!--
29
+ @component
30
+ A collapsible search input for toolbars. Expands when focused or when value is present.
31
+
32
+ ### CSS Custom Properties
33
+ | Property | Description | Default |
34
+ |---|---|---|
35
+ | `--sc-kit--toolbar-search-input--width` | Expanded width | `12.5rem` |
36
+ -->
37
+
38
+ <style>.toolbar-search-input {
39
+ --_toolbar-search-input--width: var(--sc-kit--toolbar-search-input--width, 12.5rem);
40
+ --sc-kit--input--root--font-size: 0.875rem;
41
+ --sc-kit--input--width: 1.75rem;
42
+ --sc-kit--input--height: 1.75rem;
43
+ --sc-kit--input--icon--color: var(--sc-color--text-brand, #5a8dec);
44
+ --sc-kit--input--accent-color: transparent;
45
+ }
46
+ .toolbar-search-input--expanded {
47
+ --sc-kit--input--width: var(--_toolbar-search-input--width);
48
+ --sc-kit--input--icon--color: initial;
49
+ }</style>
@@ -0,0 +1,20 @@
1
+ type Props = {
2
+ value: string;
3
+ placeholder?: string;
4
+ /** Debounce delay in ms @default 0 */
5
+ debounce?: number;
6
+ on?: {
7
+ input?: (value: string) => void;
8
+ };
9
+ };
10
+ /**
11
+ * A collapsible search input for toolbars. Expands when focused or when value is present.
12
+ *
13
+ * ### CSS Custom Properties
14
+ * | Property | Description | Default |
15
+ * |---|---|---|
16
+ * | `--sc-kit--toolbar-search-input--width` | Expanded width | `12.5rem` |
17
+ */
18
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
19
+ type Cmp = ReturnType<typeof Cmp>;
20
+ export default Cmp;
@@ -0,0 +1,40 @@
1
+ <script lang="ts" generics="T extends string | number">import { LocalStorageItem } from '../../core/local-storage';
2
+ import { SegmentedControl } from '../segmented-control';
3
+ import { untrack } from 'svelte';
4
+ const { segments, selected, localStorageKey, on } = $props();
5
+ let storage = null;
6
+ // One-time init: load from localStorage
7
+ $effect(() => untrack(() => {
8
+ if (!localStorageKey) {
9
+ return;
10
+ }
11
+ storage = LocalStorageItem.of(localStorageKey);
12
+ const saved = storage.get();
13
+ if (saved !== null && segments.some((s) => s.id === saved)) {
14
+ on?.change?.(saved);
15
+ }
16
+ }));
17
+ const handleChange = (id) => {
18
+ storage?.set(id);
19
+ on?.change?.(id);
20
+ };
21
+ </script>
22
+
23
+ <div class="toolbar-segmented-control">
24
+ <SegmentedControl segments={segments} selected={selected} on={{ change: handleChange }} />
25
+ </div>
26
+
27
+ <!--
28
+ @component
29
+ A segmented control styled for toolbar use with optional localStorage persistence.
30
+ Wraps SegmentedControl with toolbar-specific sizing (28px height, 10px font, 4px radius).
31
+ -->
32
+
33
+ <style>.toolbar-segmented-control {
34
+ --sc-kit--segmented-control--height: 1.75rem;
35
+ --sc-kit--segmented-control--label--font-size: 0.625rem;
36
+ --sc-kit--segmented-control--border-radius: 0.25rem;
37
+ --sc-kit--segmented-control--selected--background: var(--sc-color--bg-menu-active, light-dark(#f1f6fd, #2c2c2c));
38
+ --sc-kit--segmented-control--selected--box-shadow: inset 0px 1.5px 0px 0px rgba(255, 255, 255, 0.3);
39
+ --sc-kit--segmented-control--border-color: var(--sc-color--border-primary, light-dark(#f2f2f3, #1e1e1e));
40
+ }</style>
@@ -0,0 +1,39 @@
1
+ declare function $$render<T extends string | number>(): {
2
+ props: {
3
+ segments: {
4
+ id: T;
5
+ label: string;
6
+ }[];
7
+ selected: T;
8
+ /** localStorage key for persisting selection */
9
+ localStorageKey?: string;
10
+ on?: {
11
+ change?: (id: T) => void;
12
+ };
13
+ };
14
+ exports: {};
15
+ bindings: "";
16
+ slots: {};
17
+ events: {};
18
+ };
19
+ declare class __sveltets_Render<T extends string | number> {
20
+ props(): ReturnType<typeof $$render<T>>['props'];
21
+ events(): ReturnType<typeof $$render<T>>['events'];
22
+ slots(): ReturnType<typeof $$render<T>>['slots'];
23
+ bindings(): "";
24
+ exports(): {};
25
+ }
26
+ interface $$IsomorphicComponent {
27
+ new <T extends string | number>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
28
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
29
+ } & ReturnType<__sveltets_Render<T>['exports']>;
30
+ <T extends string | number>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
31
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
32
+ }
33
+ /**
34
+ * A segmented control styled for toolbar use with optional localStorage persistence.
35
+ * Wraps SegmentedControl with toolbar-specific sizing (28px height, 10px font, 4px radius).
36
+ */
37
+ declare const Cmp: $$IsomorphicComponent;
38
+ type Cmp<T extends string | number> = InstanceType<typeof Cmp<T>>;
39
+ export default Cmp;
@@ -0,0 +1,51 @@
1
+ <script lang="ts" generics="T extends string | number">import { SegmentedControl } from '../segmented-control';
2
+ const { segments, selected, children, on } = $props();
3
+ </script>
4
+
5
+ <div class="toolbar-switch-item">
6
+ <div class="toolbar-switch-item__label">
7
+ {@render children()}
8
+ </div>
9
+ <div class="toolbar-switch-item__switch">
10
+ <SegmentedControl segments={segments} selected={selected} on={{ change: (id) => on?.change?.(id) }} />
11
+ </div>
12
+ </div>
13
+
14
+ <!--
15
+ @component
16
+ A switch item for toolbar panels. Shows a label on the left and a segmented control on the right.
17
+
18
+ ### CSS Custom Properties
19
+ | Property | Description | Default |
20
+ |---|---|---|
21
+ | `--sc-kit--toolbar-switch-item--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
22
+ -->
23
+
24
+ <style>.toolbar-switch-item {
25
+ --_toolbar-switch-item--label--color: var(
26
+ --sc-kit--toolbar-switch-item--label--color,
27
+ var(--sc-color--text-primary, light-dark(#000000, #ffffff))
28
+ );
29
+ display: flex;
30
+ align-items: center;
31
+ justify-content: space-between;
32
+ gap: 0.5rem;
33
+ padding: 0.25rem 0.5rem;
34
+ }
35
+ .toolbar-switch-item__label {
36
+ font-size: 0.875rem;
37
+ font-weight: 400;
38
+ line-height: 1.25rem;
39
+ color: var(--_toolbar-switch-item--label--color);
40
+ min-width: 0;
41
+ text-overflow: ellipsis;
42
+ max-width: 100%;
43
+ white-space: nowrap;
44
+ overflow: hidden;
45
+ }
46
+ .toolbar-switch-item__switch {
47
+ flex-shrink: 0;
48
+ --sc-kit--segmented-control--border-radius: 0.375rem;
49
+ --sc-kit--segmented-control--selected--background: var(--sc-color--bg-brand, #144ab0);
50
+ --sc-kit--segmented-control--selected--color: #ffffff;
51
+ }</style>
@@ -0,0 +1,43 @@
1
+ import type { Snippet } from 'svelte';
2
+ declare function $$render<T extends string | number>(): {
3
+ props: {
4
+ segments: {
5
+ id: T;
6
+ label: string;
7
+ }[];
8
+ selected: T;
9
+ children: Snippet;
10
+ on?: {
11
+ change?: (id: T) => void;
12
+ };
13
+ };
14
+ exports: {};
15
+ bindings: "";
16
+ slots: {};
17
+ events: {};
18
+ };
19
+ declare class __sveltets_Render<T extends string | number> {
20
+ props(): ReturnType<typeof $$render<T>>['props'];
21
+ events(): ReturnType<typeof $$render<T>>['events'];
22
+ slots(): ReturnType<typeof $$render<T>>['slots'];
23
+ bindings(): "";
24
+ exports(): {};
25
+ }
26
+ interface $$IsomorphicComponent {
27
+ new <T extends string | number>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
28
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
29
+ } & ReturnType<__sveltets_Render<T>['exports']>;
30
+ <T extends string | number>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
31
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
32
+ }
33
+ /**
34
+ * A switch item for toolbar panels. Shows a label on the left and a segmented control on the right.
35
+ *
36
+ * ### CSS Custom Properties
37
+ * | Property | Description | Default |
38
+ * |---|---|---|
39
+ * | `--sc-kit--toolbar-switch-item--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
40
+ */
41
+ declare const Cmp: $$IsomorphicComponent;
42
+ type Cmp<T extends string | number> = InstanceType<typeof Cmp<T>>;
43
+ export default Cmp;
@@ -0,0 +1,45 @@
1
+ <script lang="ts">import { Toggle } from '../toggle';
2
+ const { isOn, children, on } = $props();
3
+ </script>
4
+
5
+ <div class="toolbar-toggle-item">
6
+ <div class="toolbar-toggle-item__label">
7
+ {@render children()}
8
+ </div>
9
+ <Toggle isOn={isOn} on={{ change: (value) => on?.change?.(value) }} />
10
+ </div>
11
+
12
+ <!--
13
+ @component
14
+ A toggle item for toolbar panels. Shows a label on the left and a toggle switch on the right.
15
+
16
+ ### CSS Custom Properties
17
+ | Property | Description | Default |
18
+ |---|---|---|
19
+ | `--sc-kit--toolbar-toggle-item--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
20
+ -->
21
+
22
+ <style>.toolbar-toggle-item {
23
+ --_toolbar-toggle-item--label--color: var(
24
+ --sc-kit--toolbar-toggle-item--label--color,
25
+ var(--sc-color--text-primary, light-dark(#000000, #ffffff))
26
+ );
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: space-between;
30
+ gap: 0.5rem;
31
+ padding: 0.25rem 0.5rem;
32
+ --sc-kit--toggle--switch--height: 1.125rem;
33
+ --sc-kit--toggle--switch--width: 2.3125rem;
34
+ }
35
+ .toolbar-toggle-item__label {
36
+ font-size: 0.875rem;
37
+ font-weight: 400;
38
+ line-height: 1.25rem;
39
+ color: var(--_toolbar-toggle-item--label--color);
40
+ min-width: 0;
41
+ text-overflow: ellipsis;
42
+ max-width: 100%;
43
+ white-space: nowrap;
44
+ overflow: hidden;
45
+ }</style>
@@ -0,0 +1,19 @@
1
+ import type { Snippet } from 'svelte';
2
+ type Props = {
3
+ isOn: boolean;
4
+ children: Snippet;
5
+ on?: {
6
+ change?: (value: boolean) => void;
7
+ };
8
+ };
9
+ /**
10
+ * A toggle item for toolbar panels. Shows a label on the left and a toggle switch on the right.
11
+ *
12
+ * ### CSS Custom Properties
13
+ * | Property | Description | Default |
14
+ * |---|---|---|
15
+ * | `--sc-kit--toolbar-toggle-item--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
16
+ */
17
+ declare const Cmp: import("svelte").Component<Props, {}, "">;
18
+ type Cmp = ReturnType<typeof Cmp>;
19
+ export default Cmp;
@@ -0,0 +1,10 @@
1
+ export { default as ReorderableToggleList } from './cmp.reorderable-toggle-list.svelte';
2
+ export { default as ToolbarButtonItem } from './cmp.toolbar-button-item.svelte';
3
+ export { default as ToolbarCheckboxItem } from './cmp.toolbar-checkbox-item.svelte';
4
+ export { default as ToolbarDropdown } from './cmp.toolbar-dropdown.svelte';
5
+ export { default as ToolbarPanel } from './cmp.toolbar-panel.svelte';
6
+ export { default as ToolbarSearchInput } from './cmp.toolbar-search-input.svelte';
7
+ export { default as ToolbarSegmentedControl } from './cmp.toolbar-segmented-control.svelte';
8
+ export { default as ToolbarSwitchItem } from './cmp.toolbar-switch-item.svelte';
9
+ export { default as ToolbarToggleItem } from './cmp.toolbar-toggle-item.svelte';
10
+ export type { ReorderableToggleItem } from './types';
@@ -0,0 +1,9 @@
1
+ export { default as ReorderableToggleList } from './cmp.reorderable-toggle-list.svelte';
2
+ export { default as ToolbarButtonItem } from './cmp.toolbar-button-item.svelte';
3
+ export { default as ToolbarCheckboxItem } from './cmp.toolbar-checkbox-item.svelte';
4
+ export { default as ToolbarDropdown } from './cmp.toolbar-dropdown.svelte';
5
+ export { default as ToolbarPanel } from './cmp.toolbar-panel.svelte';
6
+ export { default as ToolbarSearchInput } from './cmp.toolbar-search-input.svelte';
7
+ export { default as ToolbarSegmentedControl } from './cmp.toolbar-segmented-control.svelte';
8
+ export { default as ToolbarSwitchItem } from './cmp.toolbar-switch-item.svelte';
9
+ export { default as ToolbarToggleItem } from './cmp.toolbar-toggle-item.svelte';
@@ -0,0 +1,6 @@
1
+ export type ReorderableToggleItem = {
2
+ id: string;
3
+ label: string;
4
+ enabled: boolean;
5
+ fixed?: boolean;
6
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -284,6 +284,10 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
284
284
  | `--sc-kit--carousel--dot-color` | Dot indicator color (fill when active, border when inactive) | `white` |
285
285
  | `--sc-kit--carousel--dot-size` | Dot indicator diameter | `0.5rem` |
286
286
  | `--sc-kit--carousel--text-color` | Arrow button icon and counter text color | `white` |
287
+ | `--sc-kit--carousel--counts--font-size` | Counter text font size | `0.9375rem` |
288
+ | `--sc-kit--carousel--counts--width` | Counter container width | `5.625rem` |
289
+ | `--sc-kit--carousel--counts--text-shadow` | Counter text shadow | `0 1px 0/3px/6px rgba(0,0,0,...)` |
290
+ | `--sc-kit--carousel--navigation-button--size` | Navigation button width and height | `1.875rem` |
287
291
  -->
288
292
 
289
293
  <style>@charset "UTF-8";
@@ -293,6 +297,15 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
293
297
  --_carousel--dot-color: var(--sc-kit--carousel--dot-color, #ffffff);
294
298
  --_carousel--dot-size: var(--sc-kit--carousel--dot-size, 0.5rem);
295
299
  --_carousel--text-color: var(--sc-kit--carousel--text-color, #ffffff);
300
+ --_carousel--counts--font-size: var(--sc-kit--carousel--counts--font-size, 0.9375rem);
301
+ --_carousel--counts--width: var(--sc-kit--carousel--counts--width, 5.625rem);
302
+ --_carousel--counts--text-shadow: var(
303
+ --sc-kit--carousel--counts--text-shadow,
304
+ 0 1px 0 rgba(0, 0, 0, 0.1),
305
+ 0 1px 3px rgba(0, 0, 0, 0.1),
306
+ 0 1px 6px rgba(0, 0, 0, 0.05)
307
+ );
308
+ --_carousel--navigation-button--size: var(--sc-kit--carousel--navigation-button--size, 1.875rem);
296
309
  --_carousel--animation: var(--carousel--animation);
297
310
  /* Mode control — overridden by modifiers */
298
311
  --_carousel--nav-display: block;
@@ -375,8 +388,8 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
375
388
  .carousel__navigation-button {
376
389
  display: var(--_carousel--nav-display);
377
390
  font-size: 0.75rem;
378
- width: 1.875rem;
379
- height: 1.875rem;
391
+ width: var(--_carousel--navigation-button--size);
392
+ height: var(--_carousel--navigation-button--size);
380
393
  background-color: var(--_carousel--button-color);
381
394
  border-radius: 50%;
382
395
  text-align: center;
@@ -387,9 +400,8 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
387
400
  opacity: var(--_carousel--nav-opacity);
388
401
  visibility: var(--_carousel--nav-visibility);
389
402
  transition: opacity 0.2s, visibility 0.2s;
390
- /* Set 'container-type: inline-size;' to reference container*/
391
403
  }
392
- @container (width < 576px) {
404
+ @media screen and (max-width: 768px) {
393
405
  .carousel__navigation-button {
394
406
  opacity: 1;
395
407
  visibility: visible;
@@ -417,12 +429,12 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
417
429
  z-index: 1;
418
430
  }
419
431
  .carousel__counts {
420
- font-size: 0.9375rem;
432
+ font-size: var(--_carousel--counts--font-size);
421
433
  font-weight: 300;
422
- width: 5.625rem;
434
+ width: var(--_carousel--counts--width);
423
435
  text-align: center;
424
436
  color: var(--_carousel--text-color);
425
- text-shadow: 0 1px 0 rgba(0, 0, 0, 0.1), 0 1px 3px rgba(0, 0, 0, 0.1), 0 1px 6px rgba(0, 0, 0, 0.05);
437
+ text-shadow: var(--_carousel--counts--text-shadow);
426
438
  }
427
439
  .carousel__counts-navigation-button {
428
440
  font-size: 0.75rem;
@@ -440,10 +452,7 @@ A horizontal slide carousel with infinite looping, touch swipe support, keyboard
440
452
  opacity: 0.5;
441
453
  cursor: default;
442
454
  }
443
- .carousel__counts-navigation-button {
444
- /* Set 'container-type: inline-size;' to reference container*/
445
- }
446
- @container (width < 576px) {
455
+ @media screen and (max-width: 768px) {
447
456
  .carousel__counts-navigation-button {
448
457
  opacity: 1;
449
458
  visibility: visible;
@@ -52,6 +52,10 @@ interface $$IsomorphicComponent {
52
52
  * | `--sc-kit--carousel--dot-color` | Dot indicator color (fill when active, border when inactive) | `white` |
53
53
  * | `--sc-kit--carousel--dot-size` | Dot indicator diameter | `0.5rem` |
54
54
  * | `--sc-kit--carousel--text-color` | Arrow button icon and counter text color | `white` |
55
+ * | `--sc-kit--carousel--counts--font-size` | Counter text font size | `0.9375rem` |
56
+ * | `--sc-kit--carousel--counts--width` | Counter container width | `5.625rem` |
57
+ * | `--sc-kit--carousel--counts--text-shadow` | Counter text shadow | `0 1px 0/3px/6px rgba(0,0,0,...)` |
58
+ * | `--sc-kit--carousel--navigation-button--size` | Navigation button width and height | `1.875rem` |
55
59
  */
56
60
  declare const Cmp: $$IsomorphicComponent;
57
61
  type Cmp<T> = InstanceType<typeof Cmp<T>>;
@@ -121,14 +121,16 @@ A draggable media seek bar with a track, filled portion, and scrubber handle. Su
121
121
  -->
122
122
 
123
123
  <style>.seek-bar {
124
- cursor: pointer;
125
- position: relative;
126
- padding: 0.3125rem 0;
124
+ --_seek-bar--padding-block: var(--seek-bar--padding-block, 0.3125rem);
127
125
  --_seek-bar--container-color: var(--sc-kit--seek-bar--container-color, #9ca3af);
128
126
  --_seek-bar--value-color: var(--sc-kit--seek-bar--value-color, #ffffff);
129
127
  --_seek-bar--scrubber-color: var(--sc-kit--seek-bar--scrubber-color, #ffffff);
130
128
  --_seek-bar--scrubber-border-color: var(--sc-kit--seek-bar--scrubber-border-color, #9ca3af);
131
129
  --_seek-bar--scrubber-opacity: 0;
130
+ cursor: pointer;
131
+ position: relative;
132
+ padding: var(--_seek-bar--padding-block) 0;
133
+ user-select: none;
132
134
  }
133
135
  .seek-bar:hover {
134
136
  --_seek-bar--scrubber-opacity: 1;
@@ -0,0 +1,97 @@
1
+ <script lang="ts" generics="T extends string | number">const { segments, selected, on } = $props();
2
+ </script>
3
+
4
+ <div class="segmented-control">
5
+ {#each segments as segment (segment.id)}
6
+ <button
7
+ type="button"
8
+ class="segmented-control__segment"
9
+ class:segmented-control__segment--selected={selected === segment.id}
10
+ onclick={() => on?.change?.(segment.id)}>
11
+ <span class="segmented-control__label">{segment.label}</span>
12
+ </button>
13
+ {/each}
14
+ </div>
15
+
16
+ <!--
17
+ @component
18
+ A segmented control for switching between a set of options. Each segment is a button with a label.
19
+
20
+ ### CSS Custom Properties
21
+ | Property | Description | Default |
22
+ |---|---|---|
23
+ | `--sc-kit--segmented-control--root--font-size` | Base font size for em-based sizing | `1rem` |
24
+ | `--sc-kit--segmented-control--height` | Height of the control | `1.75em` |
25
+ | `--sc-kit--segmented-control--background` | Background color | `var(--sc-color--bg-button, light-dark(neutral-50, dark-600))` |
26
+ | `--sc-kit--segmented-control--border-color` | Border color | `var(--sc-color--border-primary, light-dark(neutral-100, dark-800))` |
27
+ | `--sc-kit--segmented-control--border-radius` | Border radius | `0.25em` |
28
+ | `--sc-kit--segmented-control--segment--padding-block` | Segment vertical padding | `0.25em` |
29
+ | `--sc-kit--segmented-control--segment--padding-inline` | Segment horizontal padding | `1.125em` |
30
+ | `--sc-kit--segmented-control--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
31
+ | `--sc-kit--segmented-control--label--font-size` | Label font size | `0.625em` |
32
+ | `--sc-kit--segmented-control--selected--background` | Selected segment background | `var(--sc-color--bg-menu-active, light-dark(primary-50, dark-400))` |
33
+ | `--sc-kit--segmented-control--selected--box-shadow` | Selected segment box shadow | `0px 1px 3px rgba(0,0,0,0.1)` |
34
+ | `--sc-kit--segmented-control--selected--color` | Selected segment text color | `var(--sc-color--text-primary, light-dark(black, white))` |
35
+ -->
36
+
37
+ <style>.segmented-control {
38
+ --_segmented-control--root--font-size: var(--sc-kit--segmented-control--root--font-size, 1rem);
39
+ --_segmented-control--height: var(--sc-kit--segmented-control--height, 1.75em);
40
+ --_segmented-control--background: var(
41
+ --sc-kit--segmented-control--background,
42
+ var(--sc-color--bg-button, light-dark(#f9fafb, #242424))
43
+ );
44
+ --_segmented-control--border-color: var(
45
+ --sc-kit--segmented-control--border-color,
46
+ var(--sc-color--border-primary, light-dark(#f2f2f3, #1e1e1e))
47
+ );
48
+ --_segmented-control--border-radius: var(--sc-kit--segmented-control--border-radius, 0.25em);
49
+ --_segmented-control--segment--padding-block: var(--sc-kit--segmented-control--segment--padding-block, 0.25em);
50
+ --_segmented-control--segment--padding-inline: var(--sc-kit--segmented-control--segment--padding-inline, 1.125em);
51
+ --_segmented-control--label--color: var(
52
+ --sc-kit--segmented-control--label--color,
53
+ var(--sc-color--text-primary, light-dark(#000000, #ffffff))
54
+ );
55
+ --_segmented-control--label--font-size: var(--sc-kit--segmented-control--label--font-size, 0.625em);
56
+ --_segmented-control--selected--background: var(
57
+ --sc-kit--segmented-control--selected--background,
58
+ var(--sc-color--bg-menu-active, light-dark(#f1f6fd, #2c2c2c))
59
+ );
60
+ --_segmented-control--selected--box-shadow: var(
61
+ --sc-kit--segmented-control--selected--box-shadow,
62
+ 0px 1px 3px var(--sc-color--box-shadow, rgba(0, 0, 0, 0.1))
63
+ );
64
+ --_segmented-control--selected--color: var(
65
+ --sc-kit--segmented-control--selected--color,
66
+ var(--sc-color--text-primary, light-dark(#000000, #ffffff))
67
+ );
68
+ display: flex;
69
+ width: 100%;
70
+ font-size: var(--_segmented-control--root--font-size);
71
+ height: var(--_segmented-control--height);
72
+ background: var(--_segmented-control--background);
73
+ border: 1px solid var(--_segmented-control--border-color);
74
+ border-radius: var(--_segmented-control--border-radius);
75
+ gap: 0.0313em;
76
+ overflow: hidden;
77
+ }
78
+ .segmented-control__segment {
79
+ color: var(--_segmented-control--label--color);
80
+ flex: 1;
81
+ display: flex;
82
+ flex-direction: column;
83
+ align-items: center;
84
+ justify-content: center;
85
+ padding: var(--_segmented-control--segment--padding-block) var(--_segmented-control--segment--padding-inline);
86
+ transition: background-color 250ms cubic-bezier(0.4, 0, 0.2, 1), color 250ms cubic-bezier(0.4, 0, 0.2, 1), box-shadow 250ms cubic-bezier(0.4, 0, 0.2, 1);
87
+ }
88
+ .segmented-control__segment--selected {
89
+ box-shadow: var(--_segmented-control--selected--box-shadow);
90
+ }
91
+ .segmented-control__segment--selected, .segmented-control__segment:hover {
92
+ background: var(--_segmented-control--selected--background);
93
+ color: var(--_segmented-control--selected--color);
94
+ }
95
+ .segmented-control__label {
96
+ font-size: var(--_segmented-control--label--font-size);
97
+ }</style>
@@ -0,0 +1,52 @@
1
+ declare function $$render<T extends string | number>(): {
2
+ props: {
3
+ segments: {
4
+ id: T;
5
+ label: string;
6
+ }[];
7
+ selected: T;
8
+ on?: {
9
+ change?: (id: T) => void;
10
+ };
11
+ };
12
+ exports: {};
13
+ bindings: "";
14
+ slots: {};
15
+ events: {};
16
+ };
17
+ declare class __sveltets_Render<T extends string | number> {
18
+ props(): ReturnType<typeof $$render<T>>['props'];
19
+ events(): ReturnType<typeof $$render<T>>['events'];
20
+ slots(): ReturnType<typeof $$render<T>>['slots'];
21
+ bindings(): "";
22
+ exports(): {};
23
+ }
24
+ interface $$IsomorphicComponent {
25
+ new <T extends string | number>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
26
+ $$bindings?: ReturnType<__sveltets_Render<T>['bindings']>;
27
+ } & ReturnType<__sveltets_Render<T>['exports']>;
28
+ <T extends string | number>(internal: unknown, props: ReturnType<__sveltets_Render<T>['props']> & {}): ReturnType<__sveltets_Render<T>['exports']>;
29
+ z_$$bindings?: ReturnType<__sveltets_Render<any>['bindings']>;
30
+ }
31
+ /**
32
+ * A segmented control for switching between a set of options. Each segment is a button with a label.
33
+ *
34
+ * ### CSS Custom Properties
35
+ * | Property | Description | Default |
36
+ * |---|---|---|
37
+ * | `--sc-kit--segmented-control--root--font-size` | Base font size for em-based sizing | `1rem` |
38
+ * | `--sc-kit--segmented-control--height` | Height of the control | `1.75em` |
39
+ * | `--sc-kit--segmented-control--background` | Background color | `var(--sc-color--bg-button, light-dark(neutral-50, dark-600))` |
40
+ * | `--sc-kit--segmented-control--border-color` | Border color | `var(--sc-color--border-primary, light-dark(neutral-100, dark-800))` |
41
+ * | `--sc-kit--segmented-control--border-radius` | Border radius | `0.25em` |
42
+ * | `--sc-kit--segmented-control--segment--padding-block` | Segment vertical padding | `0.25em` |
43
+ * | `--sc-kit--segmented-control--segment--padding-inline` | Segment horizontal padding | `1.125em` |
44
+ * | `--sc-kit--segmented-control--label--color` | Label text color | `var(--sc-color--text-primary, light-dark(black, white))` |
45
+ * | `--sc-kit--segmented-control--label--font-size` | Label font size | `0.625em` |
46
+ * | `--sc-kit--segmented-control--selected--background` | Selected segment background | `var(--sc-color--bg-menu-active, light-dark(primary-50, dark-400))` |
47
+ * | `--sc-kit--segmented-control--selected--box-shadow` | Selected segment box shadow | `0px 1px 3px rgba(0,0,0,0.1)` |
48
+ * | `--sc-kit--segmented-control--selected--color` | Selected segment text color | `var(--sc-color--text-primary, light-dark(black, white))` |
49
+ */
50
+ declare const Cmp: $$IsomorphicComponent;
51
+ type Cmp<T extends string | number> = InstanceType<typeof Cmp<T>>;
52
+ export default Cmp;
@@ -0,0 +1 @@
1
+ export { default as SegmentedControl } from './cmp.segmented-control.svelte';
@@ -0,0 +1 @@
1
+ export { default as SegmentedControl } from './cmp.segmented-control.svelte';
@@ -6,11 +6,13 @@ import { IconText } from '../icon-text';
6
6
  import { Placeholder } from '../placeholder';
7
7
  import { TableActionsCell, TableBadgeCell, TableButtonCell, TableByCell, TableCheckboxCell, TableHideableCell, TableIconCell, TableImageCell, TableMoveRowCell, TableCustomCell, TableSelectCell, TableTextCell, TableTextInputCell } from './table-cells';
8
8
  import { ResolvedColumn } from './table-column-models.svelte';
9
+ import { TableLocalization } from './table-localization';
9
10
  import IconReorderDotsHorizontal from '@fluentui/svg-icons/icons/re_order_dots_horizontal_20_regular.svg?raw';
10
11
  import { untrack } from 'svelte';
11
12
  import { flip } from 'svelte/animate';
12
13
  import { dndzone } from 'svelte-dnd-action';
13
14
  let { model, rowsDraggable = false, showPlaceholder = false, showAlternativeView = false, on, alternativeView, placeholderRow, customNoItemsPlaceholder } = $props();
15
+ const localization = new TableLocalization();
14
16
  let showNoItemsPlaceholder = $state(false);
15
17
  let showNoItemsTimeout = 0;
16
18
  let showNoItemsPlaceholderFn = null;
@@ -151,7 +153,7 @@ const getEditorColumnOrDefault = (column, editMode) => {
151
153
  {:else if customNoItemsPlaceholder}
152
154
  {@render customNoItemsPlaceholder()}
153
155
  {:else}
154
- <Placeholder imageSrc="/placeholders/default.svg" title="No Items <span>Found</span>" body="No data found. Create one to get started" />
156
+ <Placeholder imageSrc="/placeholders/default.svg" title={localization.noItemsFoundTitle} body={localization.noItemsFoundBody} />
155
157
  {/if}
156
158
  </div>
157
159
  </td>
@@ -164,8 +166,8 @@ const getEditorColumnOrDefault = (column, editMode) => {
164
166
  {#if anyVisibleItemActions(item)}
165
167
  {#if editMode}
166
168
  <div class="table__save-cancel">
167
- <Button size="small" variant="transparent-success" on={{ click: () => on?.saveChanges?.(item) }}>Save</Button>
168
- <Button size="small" variant="gray" on={{ click: () => on?.cancelChanges?.() }}>Cancel</Button>
169
+ <Button size="small" variant="transparent-success" on={{ click: () => on?.saveChanges?.(item) }}>{localization.save}</Button>
170
+ <Button size="small" variant="gray" on={{ click: () => on?.cancelChanges?.() }}>{localization.cancel}</Button>
169
171
  </div>
170
172
  {:else}
171
173
  <TableActionsCell dropdownPosition={model.styles?.actionsDropdownTopDirection ? 'top' : 'bottom'}>