@streamscloud/kit 0.16.2 → 0.18.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 +3 -0
- package/dist/ui/badge/cmp.badge.svelte +4 -0
- package/dist/ui/badge/cmp.badge.svelte.d.ts +1 -0
- package/dist/ui/button/cmp.button.svelte +6 -2
- package/dist/ui/button/cmp.button.svelte.d.ts +1 -1
- package/dist/ui/date-picker/cmp.date-picker.svelte +21 -18
- package/dist/ui/date-picker/cmp.date-picker.svelte.d.ts +1 -1
- package/dist/ui/form-field/cmp.form-field-validatable.svelte +1 -1
- package/dist/ui/form-field/cmp.form-field-validatable.svelte.d.ts +1 -1
- package/dist/ui/input/cmp.input.svelte +21 -18
- package/dist/ui/input/cmp.input.svelte.d.ts +1 -1
- package/dist/ui/numeral-input/cmp.numeral-input.svelte +21 -18
- package/dist/ui/numeral-input/cmp.numeral-input.svelte.d.ts +1 -1
- package/dist/ui/page-toolbar/cmp.reorderable-checkbox-list.svelte +131 -0
- package/dist/ui/page-toolbar/cmp.reorderable-checkbox-list.svelte.d.ts +31 -0
- package/dist/ui/page-toolbar/cmp.toolbar-checkbox.svelte +14 -0
- package/dist/ui/page-toolbar/cmp.toolbar-checkbox.svelte.d.ts +19 -0
- package/dist/ui/page-toolbar/cmp.toolbar-divider.svelte +19 -0
- package/dist/ui/page-toolbar/cmp.toolbar-divider.svelte.d.ts +35 -0
- package/dist/ui/page-toolbar/cmp.toolbar-filter-select.svelte +143 -0
- package/dist/ui/page-toolbar/cmp.toolbar-filter-select.svelte.d.ts +68 -0
- package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte +71 -0
- package/dist/ui/page-toolbar/cmp.toolbar-icon-button.svelte.d.ts +32 -0
- package/dist/ui/page-toolbar/cmp.toolbar-option.svelte +189 -0
- package/dist/ui/page-toolbar/cmp.toolbar-option.svelte.d.ts +47 -0
- package/dist/ui/page-toolbar/cmp.toolbar-popover.svelte +23 -8
- package/dist/ui/page-toolbar/cmp.toolbar-popover.svelte.d.ts +14 -6
- package/dist/ui/page-toolbar/cmp.toolbar-section-title.svelte +46 -0
- package/dist/ui/page-toolbar/cmp.toolbar-section-title.svelte.d.ts +24 -0
- package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte +31 -0
- package/dist/ui/page-toolbar/cmp.toolbar-sort-select.svelte.d.ts +44 -0
- package/dist/ui/page-toolbar/{cmp.toolbar-switch-item.svelte → cmp.toolbar-switch.svelte} +10 -10
- package/dist/ui/page-toolbar/{cmp.toolbar-switch-item.svelte.d.ts → cmp.toolbar-switch.svelte.d.ts} +2 -2
- package/dist/ui/page-toolbar/cmp.toolbar-toggle.svelte +14 -0
- package/dist/ui/page-toolbar/cmp.toolbar-toggle.svelte.d.ts +19 -0
- package/dist/ui/page-toolbar/cmp.toolbar-value-stepper.svelte +4 -1
- package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte +51 -0
- package/dist/ui/page-toolbar/cmp.toolbar-view-controls.svelte.d.ts +27 -0
- package/dist/ui/page-toolbar/index.d.ts +12 -7
- package/dist/ui/page-toolbar/index.js +11 -6
- package/dist/ui/page-toolbar/reorderable-checkbox-list-localization.d.ts +5 -0
- package/dist/ui/page-toolbar/reorderable-checkbox-list-localization.js +17 -0
- package/dist/ui/page-toolbar/toolbar-filter-select-localization.d.ts +5 -0
- package/dist/ui/page-toolbar/toolbar-filter-select-localization.js +20 -0
- package/dist/ui/page-toolbar/toolbar-sort-select-localization.d.ts +3 -0
- package/dist/ui/page-toolbar/toolbar-sort-select-localization.js +9 -0
- package/dist/ui/page-toolbar/toolbar-view-controls-localization.d.ts +5 -0
- package/dist/ui/page-toolbar/toolbar-view-controls-localization.js +17 -0
- package/dist/ui/page-toolbar/types.d.ts +1 -1
- package/dist/ui/rich-text-input/cmp.rich-text-input.svelte +9 -6
- package/dist/ui/rich-text-input/cmp.rich-text-input.svelte.d.ts +1 -1
- package/dist/ui/segmented-control/cmp.segmented-control.svelte +4 -2
- package/dist/ui/segmented-control/cmp.segmented-control.svelte.d.ts +1 -1
- package/dist/ui/select/_select-trigger.scss +20 -17
- package/dist/ui/select/cmp.singleselect-async.svelte +20 -17
- package/dist/ui/select/index.d.ts +1 -0
- package/dist/ui/select/index.js +1 -0
- package/dist/ui/select/multiselect-base.svelte +21 -18
- package/dist/ui/select/select-listbox.svelte +11 -5
- package/dist/ui/select/select-listbox.svelte.d.ts +1 -1
- package/dist/ui/table/_table-styles.scss +156 -0
- package/dist/ui/table/cmp.table-draggable.svelte +338 -0
- package/dist/ui/table/cmp.table-draggable.svelte.d.ts +79 -0
- package/dist/ui/table/cmp.table.svelte +96 -265
- package/dist/ui/table/cmp.table.svelte.d.ts +16 -8
- package/dist/ui/table/index.d.ts +1 -0
- package/dist/ui/table/index.js +1 -0
- package/dist/ui/table/table-cells/index.d.ts +1 -12
- package/dist/ui/table/table-cells/index.js +1 -12
- package/dist/ui/table/table-cells/table-cell.svelte +77 -0
- package/dist/ui/table/table-cells/{table-select-cell.svelte.d.ts → table-cell.svelte.d.ts} +12 -6
- package/dist/ui/table/table-column-models.svelte.d.ts +1 -2
- package/dist/ui/table/table-column-models.svelte.js +0 -1
- package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte +20 -47
- package/dist/ui/table/table-columns-manager/cmp.table-columns-manager.svelte.d.ts +3 -7
- package/dist/ui/table/table-columns-manager/table-columns-manager-localization.d.ts +1 -1
- package/dist/ui/table/table-columns-manager/table-columns-manager-localization.js +7 -7
- package/dist/ui/table/table-localization.d.ts +0 -2
- package/dist/ui/table/table-localization.js +0 -14
- package/dist/ui/table/table-model.svelte.d.ts +2 -3
- package/dist/ui/table/table-model.svelte.js +5 -35
- package/dist/ui/table/table-view.svelte.d.ts +14 -0
- package/dist/ui/table/table-view.svelte.js +32 -0
- package/dist/ui/table/types.d.ts +5 -28
- package/dist/ui/textarea/cmp.textarea.svelte +17 -14
- package/dist/ui/textarea/cmp.textarea.svelte.d.ts +1 -1
- package/dist/ui/toggle/cmp.toggle.svelte +32 -26
- package/dist/ui/toggle/cmp.toggle.svelte.d.ts +2 -0
- package/dist/ui/tree/cmp.tree-node-view.svelte +7 -2
- package/dist/ui/tree/cmp.tree.svelte +9 -1
- package/dist/ui/tree/cmp.tree.svelte.d.ts +1 -1
- package/dist/ui/tree/tree-navigation.svelte.d.ts +2 -0
- package/dist/ui/tree/tree-navigation.svelte.js +3 -0
- package/dist/ui/validatable/cmp.validatable.svelte +5 -5
- package/dist/ui/validatable/cmp.validatable.svelte.d.ts +2 -2
- package/dist/ui/validatable/cmp.validation-error.svelte +4 -4
- package/dist/ui/validatable/cmp.validation-error.svelte.d.ts +1 -1
- package/dist/ui/validatable/{cmp.field-error.svelte → field-frame.svelte} +6 -6
- package/dist/ui/validatable/{cmp.field-error.svelte.d.ts → field-frame.svelte.d.ts} +4 -4
- package/package.json +1 -1
- package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte +0 -153
- package/dist/ui/page-toolbar/cmp.reorderable-toggle-list.svelte.d.ts +0 -20
- package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte +0 -19
- package/dist/ui/page-toolbar/cmp.toolbar-checkbox-item.svelte.d.ts +0 -12
- package/dist/ui/page-toolbar/cmp.toolbar-panel-button.svelte +0 -42
- package/dist/ui/page-toolbar/cmp.toolbar-panel-button.svelte.d.ts +0 -20
- package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte +0 -57
- package/dist/ui/page-toolbar/cmp.toolbar-panel.svelte.d.ts +0 -19
- package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte +0 -16
- package/dist/ui/page-toolbar/cmp.toolbar-toggle-item.svelte.d.ts +0 -12
- package/dist/ui/table/table-cells/table-select-cell.svelte +0 -28
- package/dist/ui/table/table-cells/table-text-input-cell.svelte +0 -69
- package/dist/ui/table/table-cells/table-text-input-cell.svelte.d.ts +0 -38
|
@@ -4,7 +4,15 @@ let { nodes, showSelectedCheckmark, children } = $props();
|
|
|
4
4
|
const nodesComputed = $derived(nodes ? (Array.isArray(nodes) ? nodes : [nodes]) : []);
|
|
5
5
|
const hideExpandIcon = $derived(nodesComputed.every((f) => !f.children.length));
|
|
6
6
|
const nav = new TreeNavigation(() => nodesComputed);
|
|
7
|
+
const handleFocusIn = (e) => {
|
|
8
|
+
nav.focus();
|
|
9
|
+
nav.keyboardActive = e.currentTarget.matches(':focus-visible');
|
|
10
|
+
};
|
|
7
11
|
const handleKeydown = (e) => {
|
|
12
|
+
// Only the container itself drives tree navigation; a focused descendant (e.g. the actions popover) keeps its own keys.
|
|
13
|
+
if (e.target !== e.currentTarget) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
8
16
|
nav.handleKeydown(e);
|
|
9
17
|
// ArrowLeft collapses a subtree; if focus sat on a treeitem inside it, the unmount would drop focus
|
|
10
18
|
// to <body> and arrow keys would die. Re-grab the container before the unmount so the single
|
|
@@ -20,7 +28,7 @@ const handleKeydown = (e) => {
|
|
|
20
28
|
role="tree"
|
|
21
29
|
tabindex="0"
|
|
22
30
|
aria-activedescendant={nav.activeId ? `tree-item-${nav.activeId}` : undefined}
|
|
23
|
-
onfocusin={
|
|
31
|
+
onfocusin={handleFocusIn}
|
|
24
32
|
onfocusout={(e) => {
|
|
25
33
|
if (!(e.relatedTarget instanceof Node) || !e.currentTarget.contains(e.relatedTarget)) {
|
|
26
34
|
nav.blur();
|
|
@@ -2,7 +2,7 @@ import type { TreeNode } from './tree-node.svelte';
|
|
|
2
2
|
import type { Snippet } from 'svelte';
|
|
3
3
|
type Props = {
|
|
4
4
|
/** Root node, or array of root nodes. */
|
|
5
|
-
nodes: TreeNode | TreeNode[];
|
|
5
|
+
nodes: TreeNode | readonly TreeNode[];
|
|
6
6
|
/** Show a success checkmark on the selected node when it has no actions. */
|
|
7
7
|
showSelectedCheckmark?: boolean;
|
|
8
8
|
/** Optional content rendered above the nodes (e.g. a header). */
|
|
@@ -2,6 +2,8 @@ import type { TreeNode } from './tree-node.svelte';
|
|
|
2
2
|
export declare class TreeNavigation {
|
|
3
3
|
activeId: string | null;
|
|
4
4
|
hasFocus: boolean;
|
|
5
|
+
/** True only while the active node was reached via keyboard — gates the focus ring (mouse selection shows background only). */
|
|
6
|
+
keyboardActive: boolean;
|
|
5
7
|
private _getRoots;
|
|
6
8
|
constructor(getRoots: () => readonly TreeNode[]);
|
|
7
9
|
itemId(node: TreeNode): string;
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export class TreeNavigation {
|
|
2
2
|
activeId = $state(null);
|
|
3
3
|
hasFocus = $state(false);
|
|
4
|
+
/** True only while the active node was reached via keyboard — gates the focus ring (mouse selection shows background only). */
|
|
5
|
+
keyboardActive = $state(false);
|
|
4
6
|
_getRoots;
|
|
5
7
|
constructor(getRoots) {
|
|
6
8
|
this._getRoots = getRoots;
|
|
@@ -31,6 +33,7 @@ export class TreeNavigation {
|
|
|
31
33
|
if (!visible.length) {
|
|
32
34
|
return;
|
|
33
35
|
}
|
|
36
|
+
this.keyboardActive = true;
|
|
34
37
|
const index = visible.findIndex((n) => n.id === this.activeId);
|
|
35
38
|
const current = index < 0 ? null : visible[index];
|
|
36
39
|
switch (e.key) {
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
</script>
|
|
3
3
|
|
|
4
4
|
<script lang="ts" generics="T extends Record<string, unknown>, K extends keyof T & string">import { Utils } from '../../core/utils';
|
|
5
|
-
import { default as
|
|
6
|
-
let { handler, name, validateOn = ['input', 'change', 'blur'], debounceMs = 0, disableTouchedTracking = false, reserveErrorSpace =
|
|
5
|
+
import { default as FieldFrame } from './field-frame.svelte';
|
|
6
|
+
let { handler, name, validateOn = ['input', 'change', 'blur'], debounceMs = 0, disableTouchedTracking = false, reserveErrorSpace = false, on, children } = $props();
|
|
7
7
|
// True between a value change and the next completed validation. Hides the stale error in the
|
|
8
8
|
// UI without mutating handler.errors — the model keeps the last known result, the view just
|
|
9
9
|
// doesn't trust it until the validator has caught up.
|
|
@@ -59,15 +59,15 @@ const field = $derived({
|
|
|
59
59
|
});
|
|
60
60
|
</script>
|
|
61
61
|
|
|
62
|
-
<
|
|
62
|
+
<FieldFrame error={showErrors ? handler.errors[name] : null} reserveErrorSpace={reserveErrorSpace}>
|
|
63
63
|
{@render children(field)}
|
|
64
|
-
</
|
|
64
|
+
</FieldFrame>
|
|
65
65
|
|
|
66
66
|
<!--
|
|
67
67
|
@component
|
|
68
68
|
Binds a form field to any kit input via a render-prop snippet. The base inputs stay unchanged;
|
|
69
69
|
`Validatable` is the only place that knows about `FormValidationHandler`. Wraps children in an
|
|
70
|
-
internal `
|
|
70
|
+
internal `FieldFrame` that reserves space for the error message so toggling doesn't shift
|
|
71
71
|
layout; `reserveErrorSpace={false}` drops the reserve — the message overlays content below.
|
|
72
72
|
|
|
73
73
|
### Usage
|
|
@@ -33,7 +33,7 @@ declare function $$render<T extends Record<string, unknown>, K extends keyof T &
|
|
|
33
33
|
/**
|
|
34
34
|
* Reserve space below the field for the error message. Turn off when a sibling must align to
|
|
35
35
|
* the field's real bottom edge — the message then overlays whatever sits below the field.
|
|
36
|
-
* @default
|
|
36
|
+
* @default false
|
|
37
37
|
*/
|
|
38
38
|
reserveErrorSpace?: boolean;
|
|
39
39
|
/**
|
|
@@ -70,7 +70,7 @@ interface $$IsomorphicComponent {
|
|
|
70
70
|
/**
|
|
71
71
|
* Binds a form field to any kit input via a render-prop snippet. The base inputs stay unchanged;
|
|
72
72
|
* `Validatable` is the only place that knows about `FormValidationHandler`. Wraps children in an
|
|
73
|
-
* internal `
|
|
73
|
+
* internal `FieldFrame` that reserves space for the error message so toggling doesn't shift
|
|
74
74
|
* layout; `reserveErrorSpace={false}` drops the reserve — the message overlays content below.
|
|
75
75
|
*
|
|
76
76
|
* ### Usage
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<script lang="ts" generics="T extends Record<string, unknown>">import { default as
|
|
2
|
-
let { name, validationResult, reserveErrorSpace =
|
|
1
|
+
<script lang="ts" generics="T extends Record<string, unknown>">import { default as FieldFrame } from './field-frame.svelte';
|
|
2
|
+
let { name, validationResult, reserveErrorSpace = false, children } = $props();
|
|
3
3
|
const errorText = $derived(validationResult?.errors[name] ?? null);
|
|
4
4
|
</script>
|
|
5
5
|
|
|
6
|
-
<
|
|
6
|
+
<FieldFrame error={errorText} reserveErrorSpace={reserveErrorSpace}>
|
|
7
7
|
{@render children()}
|
|
8
|
-
</
|
|
8
|
+
</FieldFrame>
|
|
9
9
|
|
|
10
10
|
<!--
|
|
11
11
|
@component
|
|
@@ -9,7 +9,7 @@ declare function $$render<T extends Record<string, unknown>>(): {
|
|
|
9
9
|
/**
|
|
10
10
|
* Reserve space below the field for the error message. Turn off when a sibling must align to
|
|
11
11
|
* the field's real bottom edge — the message then overlays whatever sits below the field.
|
|
12
|
-
* @default
|
|
12
|
+
* @default false
|
|
13
13
|
*/
|
|
14
14
|
reserveErrorSpace?: boolean;
|
|
15
15
|
children: Snippet;
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
<script lang="ts">let { error, reserveErrorSpace =
|
|
1
|
+
<script lang="ts">let { error, reserveErrorSpace = false, children } = $props();
|
|
2
2
|
export {};
|
|
3
3
|
</script>
|
|
4
4
|
|
|
5
|
-
<div class="field-
|
|
5
|
+
<div class="field-frame" class:field-frame--errored={!!error} class:field-frame--no-reserve={!reserveErrorSpace}>
|
|
6
6
|
{@render children()}
|
|
7
7
|
{#if error}
|
|
8
|
-
<small class="field-
|
|
8
|
+
<small class="field-frame__message">{error}</small>
|
|
9
9
|
{/if}
|
|
10
10
|
</div>
|
|
11
11
|
|
|
@@ -20,15 +20,15 @@ any other field-shaped kit consumer that needs the same visual contract).
|
|
|
20
20
|
Not exported from `index.ts` — for kit-internal use only.
|
|
21
21
|
-->
|
|
22
22
|
|
|
23
|
-
<style>.field-
|
|
23
|
+
<style>.field-frame {
|
|
24
24
|
position: relative;
|
|
25
25
|
margin-bottom: 1.1em;
|
|
26
26
|
display: block;
|
|
27
27
|
}
|
|
28
|
-
.field-
|
|
28
|
+
.field-frame--no-reserve {
|
|
29
29
|
margin-bottom: 0;
|
|
30
30
|
}
|
|
31
|
-
.field-
|
|
31
|
+
.field-frame__message {
|
|
32
32
|
position: absolute;
|
|
33
33
|
top: calc(100% + 0.1em);
|
|
34
34
|
left: 0;
|
|
@@ -2,7 +2,7 @@ import type { Snippet } from 'svelte';
|
|
|
2
2
|
type Props = {
|
|
3
3
|
/** Error message to display below the field. Falsy hides the message and the `--errored` flag. */
|
|
4
4
|
error?: string | null | undefined;
|
|
5
|
-
/** Reserve space below the field for the error message. Off drops the reserve — the message overlays content below. @default
|
|
5
|
+
/** Reserve space below the field for the error message. Off drops the reserve — the message overlays content below. @default false */
|
|
6
6
|
reserveErrorSpace?: boolean;
|
|
7
7
|
children: Snippet;
|
|
8
8
|
};
|
|
@@ -15,6 +15,6 @@ type Props = {
|
|
|
15
15
|
*
|
|
16
16
|
* Not exported from `index.ts` — for kit-internal use only.
|
|
17
17
|
*/
|
|
18
|
-
declare const
|
|
19
|
-
type
|
|
20
|
-
export default
|
|
18
|
+
declare const FieldFrame: import("svelte").Component<Props, {}, "">;
|
|
19
|
+
type FieldFrame = ReturnType<typeof FieldFrame>;
|
|
20
|
+
export default FieldFrame;
|
package/package.json
CHANGED
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
<script lang="ts">import { Icon } from '../icon';
|
|
2
|
-
import { Toggle } from '../toggle';
|
|
3
|
-
import IconReorderDotsVertical from '@fluentui/svg-icons/icons/re_order_dots_vertical_20_regular.svg?raw';
|
|
4
|
-
import { flip } from 'svelte/animate';
|
|
5
|
-
import { dndzone } from 'svelte-dnd-action';
|
|
6
|
-
let { items, on } = $props();
|
|
7
|
-
const reorderableItems = $derived(items.filter((i) => !i.fixed));
|
|
8
|
-
const fixedItems = $derived(items.filter((i) => i.fixed));
|
|
9
|
-
let dndItems = $state.raw([]);
|
|
10
|
-
$effect(() => {
|
|
11
|
-
dndItems = reorderableItems.map(({ id, label, enabled }) => ({ id, label, enabled }));
|
|
12
|
-
});
|
|
13
|
-
const flipDurationMs = 200;
|
|
14
|
-
const emitChange = (reordered) => {
|
|
15
|
-
const merged = [
|
|
16
|
-
...fixedItems.map(({ id, label, enabled, fixed }) => ({ id, label, enabled, fixed })),
|
|
17
|
-
...reordered.map(({ id, label, enabled }) => ({ id, label, enabled }))
|
|
18
|
-
];
|
|
19
|
-
on.change(merged);
|
|
20
|
-
};
|
|
21
|
-
const handleConsider = (e) => {
|
|
22
|
-
dndItems = e.detail.items;
|
|
23
|
-
};
|
|
24
|
-
const handleFinalize = (e) => {
|
|
25
|
-
emitChange(e.detail.items);
|
|
26
|
-
};
|
|
27
|
-
const handleToggle = (id, enabled) => {
|
|
28
|
-
emitChange(dndItems.map((i) => (i.id === id ? { ...i, enabled } : i)));
|
|
29
|
-
};
|
|
30
|
-
const handleFixedToggle = (id, enabled) => {
|
|
31
|
-
const updatedFixed = fixedItems.map(({ id: fId, label, enabled: fEnabled, fixed }) => ({
|
|
32
|
-
id: fId,
|
|
33
|
-
label,
|
|
34
|
-
enabled: fId === id ? enabled : fEnabled,
|
|
35
|
-
fixed
|
|
36
|
-
}));
|
|
37
|
-
on.change([...updatedFixed, ...dndItems.map(({ id, label, enabled }) => ({ id, label, enabled }))]);
|
|
38
|
-
};
|
|
39
|
-
</script>
|
|
40
|
-
|
|
41
|
-
<div class="reorderable-toggle-list">
|
|
42
|
-
{#each fixedItems as item (item.id)}
|
|
43
|
-
<div class="reorderable-toggle-list__item">
|
|
44
|
-
<div class="reorderable-toggle-list__drag-handle reorderable-toggle-list__drag-handle--hidden">
|
|
45
|
-
<Icon src={IconReorderDotsVertical} />
|
|
46
|
-
</div>
|
|
47
|
-
<div class="reorderable-toggle-list__label">
|
|
48
|
-
{item.label}
|
|
49
|
-
</div>
|
|
50
|
-
<div class="reorderable-toggle-list__toggle">
|
|
51
|
-
<Toggle
|
|
52
|
-
checked={item.enabled}
|
|
53
|
-
on={{
|
|
54
|
-
change: (value) => handleFixedToggle(item.id, value)
|
|
55
|
-
}} />
|
|
56
|
-
</div>
|
|
57
|
-
</div>
|
|
58
|
-
{/each}
|
|
59
|
-
<div
|
|
60
|
-
class="reorderable-toggle-list__dnd"
|
|
61
|
-
use:dndzone={{
|
|
62
|
-
items: dndItems,
|
|
63
|
-
dropTargetStyle: {},
|
|
64
|
-
flipDurationMs,
|
|
65
|
-
morphDisabled: true
|
|
66
|
-
}}
|
|
67
|
-
onconsider={handleConsider}
|
|
68
|
-
onfinalize={handleFinalize}>
|
|
69
|
-
{#each dndItems as item (item.id)}
|
|
70
|
-
<div class="reorderable-toggle-list__item" animate:flip={{ duration: flipDurationMs }}>
|
|
71
|
-
<div class="reorderable-toggle-list__drag-handle">
|
|
72
|
-
<Icon src={IconReorderDotsVertical} />
|
|
73
|
-
</div>
|
|
74
|
-
<div class="reorderable-toggle-list__label">
|
|
75
|
-
{item.label}
|
|
76
|
-
</div>
|
|
77
|
-
<div class="reorderable-toggle-list__toggle">
|
|
78
|
-
<Toggle
|
|
79
|
-
checked={item.enabled}
|
|
80
|
-
on={{
|
|
81
|
-
change: (value) => handleToggle(item.id, value)
|
|
82
|
-
}} />
|
|
83
|
-
</div>
|
|
84
|
-
</div>
|
|
85
|
-
{/each}
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
|
|
89
|
-
<!--
|
|
90
|
-
@component
|
|
91
|
-
A reorderable list of toggle items with drag-and-drop support. Fixed items appear above the reorderable zone.
|
|
92
|
-
|
|
93
|
-
### CSS Custom Properties
|
|
94
|
-
| Property | Description | Default |
|
|
95
|
-
|---|---|---|
|
|
96
|
-
| `--sc-kit--reorderable-toggle-list--label--color` | Label text color | `var(--sc-kit--color--text--primary)` |
|
|
97
|
-
| `--sc-kit--reorderable-toggle-list--handle--color` | Drag handle icon color | `var(--sc-kit--color--text--secondary)` |
|
|
98
|
-
| `--sc-kit--reorderable-toggle-list--handle--background` | Drag handle background | `var(--sc-kit--color--bg--element)` |
|
|
99
|
-
-->
|
|
100
|
-
|
|
101
|
-
<style>.reorderable-toggle-list {
|
|
102
|
-
--_reorderable-toggle-list--label--color: var(--sc-kit--reorderable-toggle-list--label--color, var(--sc-kit--color--text--primary));
|
|
103
|
-
--_reorderable-toggle-list--handle--color: var(--sc-kit--reorderable-toggle-list--handle--color, var(--sc-kit--color--text--secondary));
|
|
104
|
-
--_reorderable-toggle-list--handle--background: var(--sc-kit--reorderable-toggle-list--handle--background, var(--sc-kit--color--bg--element));
|
|
105
|
-
display: flex;
|
|
106
|
-
flex-direction: column;
|
|
107
|
-
gap: var(--sc-kit--space--3);
|
|
108
|
-
}
|
|
109
|
-
.reorderable-toggle-list__dnd {
|
|
110
|
-
display: flex;
|
|
111
|
-
flex-direction: column;
|
|
112
|
-
gap: var(--sc-kit--space--3);
|
|
113
|
-
}
|
|
114
|
-
.reorderable-toggle-list__item {
|
|
115
|
-
display: flex;
|
|
116
|
-
align-items: center;
|
|
117
|
-
gap: var(--sc-kit--space--3);
|
|
118
|
-
padding: var(--sc-kit--space--1) var(--sc-kit--space--2);
|
|
119
|
-
}
|
|
120
|
-
.reorderable-toggle-list__drag-handle {
|
|
121
|
-
--sc-kit--icon--size: 1rem;
|
|
122
|
-
--sc-kit--icon--color: var(--_reorderable-toggle-list--handle--color);
|
|
123
|
-
display: flex;
|
|
124
|
-
align-items: center;
|
|
125
|
-
justify-content: center;
|
|
126
|
-
height: 1.375rem;
|
|
127
|
-
padding-inline: 0.1875rem;
|
|
128
|
-
border-radius: var(--sc-kit--radius--sm) 0 0 var(--sc-kit--radius--sm);
|
|
129
|
-
cursor: grab;
|
|
130
|
-
background: var(--_reorderable-toggle-list--handle--background);
|
|
131
|
-
}
|
|
132
|
-
.reorderable-toggle-list__drag-handle:active {
|
|
133
|
-
cursor: grabbing;
|
|
134
|
-
}
|
|
135
|
-
.reorderable-toggle-list__drag-handle--hidden {
|
|
136
|
-
visibility: hidden;
|
|
137
|
-
}
|
|
138
|
-
.reorderable-toggle-list__label {
|
|
139
|
-
flex: 1;
|
|
140
|
-
min-width: 0;
|
|
141
|
-
font-size: var(--sc-kit--font-size--md);
|
|
142
|
-
font-weight: var(--sc-kit--font-weight--regular);
|
|
143
|
-
line-height: var(--sc-kit--line-height--md);
|
|
144
|
-
color: var(--_reorderable-toggle-list--label--color);
|
|
145
|
-
text-overflow: ellipsis;
|
|
146
|
-
max-width: 100%;
|
|
147
|
-
white-space: nowrap;
|
|
148
|
-
overflow: hidden;
|
|
149
|
-
}
|
|
150
|
-
.reorderable-toggle-list__toggle {
|
|
151
|
-
flex-shrink: 0;
|
|
152
|
-
margin-left: auto;
|
|
153
|
-
}</style>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { ReorderableToggleItem } from './types';
|
|
2
|
-
type Props = {
|
|
3
|
-
items: ReorderableToggleItem[];
|
|
4
|
-
on: {
|
|
5
|
-
change: (items: ReorderableToggleItem[]) => void;
|
|
6
|
-
};
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* A reorderable list of toggle items with drag-and-drop support. Fixed items appear above the reorderable zone.
|
|
10
|
-
*
|
|
11
|
-
* ### CSS Custom Properties
|
|
12
|
-
* | Property | Description | Default |
|
|
13
|
-
* |---|---|---|
|
|
14
|
-
* | `--sc-kit--reorderable-toggle-list--label--color` | Label text color | `var(--sc-kit--color--text--primary)` |
|
|
15
|
-
* | `--sc-kit--reorderable-toggle-list--handle--color` | Drag handle icon color | `var(--sc-kit--color--text--secondary)` |
|
|
16
|
-
* | `--sc-kit--reorderable-toggle-list--handle--background` | Drag handle background | `var(--sc-kit--color--bg--element)` |
|
|
17
|
-
*/
|
|
18
|
-
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
19
|
-
type Cmp = ReturnType<typeof Cmp>;
|
|
20
|
-
export default Cmp;
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
<script lang="ts">import { Checkbox } from '../checkbox';
|
|
2
|
-
const { checked, children, on } = $props();
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<div class="toolbar-checkbox-item">
|
|
6
|
-
<Checkbox checked={checked} label={children} on={{ change: (value) => on?.change?.(value) }} />
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<!--
|
|
10
|
-
@component
|
|
11
|
-
A checkbox item for toolbar panels. Wraps the kit Checkbox with toolbar-appropriate sizing.
|
|
12
|
-
-->
|
|
13
|
-
|
|
14
|
-
<style>.toolbar-checkbox-item {
|
|
15
|
-
padding: var(--sc-kit--space--1) var(--sc-kit--space--2);
|
|
16
|
-
overflow: hidden;
|
|
17
|
-
--sc-kit--checkbox--gap: var(--sc-kit--space--5);
|
|
18
|
-
--sc-kit--checkbox--icon--size: 1.125rem;
|
|
19
|
-
}</style>
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Snippet } from 'svelte';
|
|
2
|
-
type Props = {
|
|
3
|
-
checked: boolean;
|
|
4
|
-
children: Snippet;
|
|
5
|
-
on?: {
|
|
6
|
-
change?: (value: boolean) => void;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
/** A checkbox item for toolbar panels. Wraps the kit Checkbox with toolbar-appropriate sizing. */
|
|
10
|
-
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
11
|
-
type Cmp = ReturnType<typeof Cmp>;
|
|
12
|
-
export default Cmp;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
<script lang="ts">const { children, on } = $props();
|
|
2
|
-
export {};
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<button type="button" class="toolbar-panel-button" onclick={() => on?.click?.()}>
|
|
6
|
-
{@render children()}
|
|
7
|
-
</button>
|
|
8
|
-
|
|
9
|
-
<!--
|
|
10
|
-
@component
|
|
11
|
-
A text-row button for toolbar panels / popovers (rendered inside `<ToolbarPanel>` / `<ToolbarPopover>`).
|
|
12
|
-
For the toolbar's primary action area use `<ToolbarButton>` instead.
|
|
13
|
-
|
|
14
|
-
### CSS Custom Properties
|
|
15
|
-
| Property | Description | Default |
|
|
16
|
-
|---|---|---|
|
|
17
|
-
| `--sc-kit--toolbar-panel-button--color` | Text color | `var(--sc-kit--color--text--primary)` |
|
|
18
|
-
| `--sc-kit--toolbar-panel-button--color-hover` | Text color on hover | `var(--sc-kit--color--accent)` |
|
|
19
|
-
-->
|
|
20
|
-
|
|
21
|
-
<style>.toolbar-panel-button {
|
|
22
|
-
--_toolbar-panel-button--color: var(--sc-kit--toolbar-panel-button--color, var(--sc-kit--color--text--primary));
|
|
23
|
-
--_toolbar-panel-button--color-hover: var(--sc-kit--toolbar-panel-button--color-hover, var(--sc-kit--color--accent));
|
|
24
|
-
appearance: none;
|
|
25
|
-
background: transparent;
|
|
26
|
-
border: 0;
|
|
27
|
-
text-align: inherit;
|
|
28
|
-
cursor: pointer;
|
|
29
|
-
font-size: var(--sc-kit--font-size--md);
|
|
30
|
-
font-weight: var(--sc-kit--font-weight--regular);
|
|
31
|
-
line-height: var(--sc-kit--line-height--md);
|
|
32
|
-
color: var(--_toolbar-panel-button--color);
|
|
33
|
-
padding: var(--sc-kit--space--1) var(--sc-kit--space--2);
|
|
34
|
-
max-width: 100%;
|
|
35
|
-
text-overflow: ellipsis;
|
|
36
|
-
max-width: 100%;
|
|
37
|
-
white-space: nowrap;
|
|
38
|
-
overflow: hidden;
|
|
39
|
-
}
|
|
40
|
-
.toolbar-panel-button:hover {
|
|
41
|
-
color: var(--_toolbar-panel-button--color-hover);
|
|
42
|
-
}</style>
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
import type { Snippet } from 'svelte';
|
|
2
|
-
type Props = {
|
|
3
|
-
children: Snippet;
|
|
4
|
-
on?: {
|
|
5
|
-
click?: () => void;
|
|
6
|
-
};
|
|
7
|
-
};
|
|
8
|
-
/**
|
|
9
|
-
* A text-row button for toolbar panels / popovers (rendered inside `<ToolbarPanel>` / `<ToolbarPopover>`).
|
|
10
|
-
* For the toolbar's primary action area use `<ToolbarButton>` instead.
|
|
11
|
-
*
|
|
12
|
-
* ### CSS Custom Properties
|
|
13
|
-
* | Property | Description | Default |
|
|
14
|
-
* |---|---|---|
|
|
15
|
-
* | `--sc-kit--toolbar-panel-button--color` | Text color | `var(--sc-kit--color--text--primary)` |
|
|
16
|
-
* | `--sc-kit--toolbar-panel-button--color-hover` | Text color on hover | `var(--sc-kit--color--accent)` |
|
|
17
|
-
*/
|
|
18
|
-
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
19
|
-
type Cmp = ReturnType<typeof Cmp>;
|
|
20
|
-
export default Cmp;
|
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
<script lang="ts">const { title, children, footer } = $props();
|
|
2
|
-
export {};
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<div class="toolbar-panel">
|
|
6
|
-
<div class="toolbar-panel__title">{title}</div>
|
|
7
|
-
<div class="toolbar-panel__body">
|
|
8
|
-
{@render children()}
|
|
9
|
-
{#if footer}
|
|
10
|
-
<div class="toolbar-panel__divider"></div>
|
|
11
|
-
{@render footer()}
|
|
12
|
-
{/if}
|
|
13
|
-
</div>
|
|
14
|
-
</div>
|
|
15
|
-
|
|
16
|
-
<!--
|
|
17
|
-
@component
|
|
18
|
-
A panel container used inside toolbar dropdowns. Provides a title, body area, and optional footer.
|
|
19
|
-
|
|
20
|
-
### CSS Custom Properties
|
|
21
|
-
| Property | Description | Default |
|
|
22
|
-
|---|---|---|
|
|
23
|
-
| `--sc-kit--toolbar-panel--width` | Panel width | `21.875rem` |
|
|
24
|
-
| `--sc-kit--toolbar-panel--title--color` | Title text color | `var(--sc-kit--color--text--primary)` |
|
|
25
|
-
| `--sc-kit--toolbar-panel--divider--color` | Divider line color | `var(--sc-kit--color--border)` |
|
|
26
|
-
-->
|
|
27
|
-
|
|
28
|
-
<style>.toolbar-panel {
|
|
29
|
-
--_toolbar-panel--width: var(--sc-kit--toolbar-panel--width, 21.875rem);
|
|
30
|
-
--_toolbar-panel--title--color: var(--sc-kit--toolbar-panel--title--color, var(--sc-kit--color--text--primary));
|
|
31
|
-
--_toolbar-panel--divider--color: var(--sc-kit--toolbar-panel--divider--color, var(--sc-kit--color--border));
|
|
32
|
-
width: var(--_toolbar-panel--width);
|
|
33
|
-
padding: var(--sc-kit--space--6);
|
|
34
|
-
}
|
|
35
|
-
.toolbar-panel__title {
|
|
36
|
-
font-size: var(--sc-kit--font-size--md);
|
|
37
|
-
font-weight: var(--sc-kit--font-weight--semibold);
|
|
38
|
-
line-height: var(--sc-kit--line-height--md);
|
|
39
|
-
color: var(--_toolbar-panel--title--color);
|
|
40
|
-
margin-bottom: var(--sc-kit--space--2);
|
|
41
|
-
min-width: 0;
|
|
42
|
-
text-overflow: ellipsis;
|
|
43
|
-
max-width: 100%;
|
|
44
|
-
white-space: nowrap;
|
|
45
|
-
overflow: hidden;
|
|
46
|
-
}
|
|
47
|
-
.toolbar-panel__body {
|
|
48
|
-
display: flex;
|
|
49
|
-
flex-direction: column;
|
|
50
|
-
gap: var(--sc-kit--space--4);
|
|
51
|
-
padding-block: var(--sc-kit--space--2);
|
|
52
|
-
}
|
|
53
|
-
.toolbar-panel__divider {
|
|
54
|
-
height: 1px;
|
|
55
|
-
background: var(--_toolbar-panel--divider--color);
|
|
56
|
-
margin: var(--sc-kit--space--1) var(--sc-kit--space--2);
|
|
57
|
-
}</style>
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { Snippet } from 'svelte';
|
|
2
|
-
type Props = {
|
|
3
|
-
title: string;
|
|
4
|
-
children: Snippet;
|
|
5
|
-
footer?: Snippet;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* A panel container used inside toolbar dropdowns. Provides a title, body area, and optional footer.
|
|
9
|
-
*
|
|
10
|
-
* ### CSS Custom Properties
|
|
11
|
-
* | Property | Description | Default |
|
|
12
|
-
* |---|---|---|
|
|
13
|
-
* | `--sc-kit--toolbar-panel--width` | Panel width | `21.875rem` |
|
|
14
|
-
* | `--sc-kit--toolbar-panel--title--color` | Title text color | `var(--sc-kit--color--text--primary)` |
|
|
15
|
-
* | `--sc-kit--toolbar-panel--divider--color` | Divider line color | `var(--sc-kit--color--border)` |
|
|
16
|
-
*/
|
|
17
|
-
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
18
|
-
type Cmp = ReturnType<typeof Cmp>;
|
|
19
|
-
export default Cmp;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
<script lang="ts">import { Toggle } from '../toggle';
|
|
2
|
-
const { checked, children, on } = $props();
|
|
3
|
-
</script>
|
|
4
|
-
|
|
5
|
-
<div class="toolbar-toggle-item">
|
|
6
|
-
<Toggle checked={checked} label={children} layout="spread" on={{ change: (value) => on?.change?.(value) }} />
|
|
7
|
-
</div>
|
|
8
|
-
|
|
9
|
-
<!--
|
|
10
|
-
@component
|
|
11
|
-
A toggle item for toolbar panels. Wraps the kit Toggle with toolbar-appropriate padding.
|
|
12
|
-
-->
|
|
13
|
-
|
|
14
|
-
<style>.toolbar-toggle-item {
|
|
15
|
-
padding: var(--sc-kit--space--1) var(--sc-kit--space--2);
|
|
16
|
-
}</style>
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import type { Snippet } from 'svelte';
|
|
2
|
-
type Props = {
|
|
3
|
-
checked: boolean;
|
|
4
|
-
children: Snippet;
|
|
5
|
-
on?: {
|
|
6
|
-
change?: (value: boolean) => void;
|
|
7
|
-
};
|
|
8
|
-
};
|
|
9
|
-
/** A toggle item for toolbar panels. Wraps the kit Toggle with toolbar-appropriate padding. */
|
|
10
|
-
declare const Cmp: import("svelte").Component<Props, {}, "">;
|
|
11
|
-
type Cmp = ReturnType<typeof Cmp>;
|
|
12
|
-
export default Cmp;
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
<script lang="ts" generics="T extends {id: string}">import { Singleselect } from '../../select';
|
|
2
|
-
let { item, column } = $props();
|
|
3
|
-
const getValueForColumn = (column, item) => (column.valueFactory ? column.valueFactory(item) : item[column.id]);
|
|
4
|
-
const onSelected = (value) => {
|
|
5
|
-
column.onSelected(item, value);
|
|
6
|
-
item = item;
|
|
7
|
-
};
|
|
8
|
-
</script>
|
|
9
|
-
|
|
10
|
-
{#if !column.visibilityFactory || column.visibilityFactory(item)}
|
|
11
|
-
{#if column.clearable}
|
|
12
|
-
<Singleselect
|
|
13
|
-
clearable
|
|
14
|
-
placeholder={column.placeholder || ' '}
|
|
15
|
-
value={getValueForColumn(column, item)}
|
|
16
|
-
options={column.optionsFactory(item)}
|
|
17
|
-
disabled={(column.disabledFactory && column.disabledFactory(item)) || false}
|
|
18
|
-
on={{ change: (v) => onSelected(v) }} />
|
|
19
|
-
{:else}
|
|
20
|
-
<Singleselect
|
|
21
|
-
clearable={false}
|
|
22
|
-
placeholder={column.placeholder || ' '}
|
|
23
|
-
value={getValueForColumn(column, item)}
|
|
24
|
-
options={column.optionsFactory(item)}
|
|
25
|
-
disabled={(column.disabledFactory && column.disabledFactory(item)) || false}
|
|
26
|
-
on={{ change: (v) => onSelected(v) }} />
|
|
27
|
-
{/if}
|
|
28
|
-
{/if}
|