@warkypublic/svelix 0.1.46 → 0.2.1
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/README.md +93 -33
- package/dist/components/BetterMenu/BetterMenu.svelte +21 -37
- package/dist/components/BetterMenu/BetterMenuAsyncButton.svelte +21 -31
- package/dist/components/BetterMenu/BetterMenuPreview.svelte +27 -29
- package/dist/components/BetterMenu/MenuRenderer.svelte +40 -51
- package/dist/components/Boxer/Boxer.svelte +492 -602
- package/dist/components/Boxer/BoxerTarget.svelte +6 -46
- package/dist/components/Boxer/BoxerTarget.svelte.d.ts +1 -0
- package/dist/components/Boxer/types.d.ts +0 -1
- package/dist/components/Button.svelte +19 -43
- package/dist/components/ButtonPreview.svelte +2 -11
- package/dist/components/CardGrid/CardGrid.svelte +489 -614
- package/dist/components/CardGrid/CardGrid.svelte.d.ts +4 -0
- package/dist/components/CardGrid/CardGridFilterPanel.svelte +111 -90
- package/dist/components/CardGrid/DefaultCard.svelte +86 -97
- package/dist/components/CardGrid/DefaultCard.svelte.d.ts +1 -0
- package/dist/components/CardGrid/ImageCardStory.svelte +87 -36
- package/dist/components/CardGrid/cardGrid.d.ts +24 -0
- package/dist/components/CardGrid/cardGrid.js +20 -0
- package/dist/components/ContentEditor/CollaboraInsertTextDemo.svelte +5 -10
- package/dist/components/ContentEditor/ContentEditor.svelte +24 -50
- package/dist/components/ContentEditor/subcomponents/AudioPlayer.svelte +17 -17
- package/dist/components/ContentEditor/subcomponents/CollaboraEditor.svelte +244 -309
- package/dist/components/ContentEditor/subcomponents/EmailViewer.svelte +2 -3
- package/dist/components/ContentEditor/subcomponents/ImageViewer.svelte +14 -15
- package/dist/components/ContentEditor/subcomponents/MarkdownViewer.svelte +74 -90
- package/dist/components/ContentEditor/subcomponents/MonacoEditor.svelte +75 -103
- package/dist/components/ContentEditor/subcomponents/Office365Editor.svelte +234 -297
- package/dist/components/ContentEditor/subcomponents/PdfViewer.svelte +14 -20
- package/dist/components/ContentEditor/subcomponents/TextEditor.svelte +122 -150
- package/dist/components/ContentEditor/subcomponents/UnknownFile.svelte +105 -126
- package/dist/components/ContentEditor/subcomponents/VideoPlayer.svelte +17 -17
- package/dist/components/ContentEditor/subcomponents/ZipViewer.svelte +2 -3
- package/dist/components/ErrorBoundary/ErrorBoundary.svelte +41 -58
- package/dist/components/ErrorBoundary/ErrorBoundaryPreview.svelte +8 -16
- package/dist/components/Former/Former.svelte +306 -424
- package/dist/components/Former/FormerButtonArea.svelte +17 -68
- package/dist/components/Former/FormerDrawer.svelte +16 -80
- package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
- package/dist/components/Former/FormerModal.svelte +16 -74
- package/dist/components/Former/FormerModalPreview.svelte +99 -89
- package/dist/components/Former/FormerPreview.svelte +76 -78
- package/dist/components/Former/FormerRestApiPreview.svelte +55 -48
- package/dist/components/Former/formerOverlayHelpers.svelte.d.ts +11 -0
- package/dist/components/Former/formerOverlayHelpers.svelte.js +38 -0
- package/dist/components/Former/index.d.ts +1 -0
- package/dist/components/Former/index.js +1 -0
- package/dist/components/FormerControllers/ButtonCtrl.svelte +13 -49
- package/dist/components/FormerControllers/CtrlFieldShell.svelte +15 -0
- package/dist/components/FormerControllers/CtrlFieldShell.svelte.d.ts +12 -0
- package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +285 -457
- package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlCalendar.svelte +95 -136
- package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlPickerPanel.svelte +3 -62
- package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlTimeFields.svelte +143 -217
- package/dist/components/FormerControllers/IconButtonCtrl.svelte +13 -47
- package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
- package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
- package/dist/components/FormerControllers/NativeSelectCtrl.svelte +7 -39
- package/dist/components/FormerControllers/NumberInputCtrl.svelte +21 -43
- package/dist/components/FormerControllers/PasswordInputCtrl.svelte +8 -33
- package/dist/components/FormerControllers/SwitchCtrl.svelte +4 -20
- package/dist/components/FormerControllers/TextAreaCtrl.svelte +7 -34
- package/dist/components/FormerControllers/TextInputCtrl.svelte +7 -34
- package/dist/components/FormerControllers/ctrlLoading.svelte.d.ts +8 -0
- package/dist/components/FormerControllers/ctrlLoading.svelte.js +43 -0
- package/dist/components/FormerControllers/index.d.ts +2 -0
- package/dist/components/FormerControllers/index.js +2 -0
- package/dist/components/FormerControllers/utils.d.ts +1 -0
- package/dist/components/FormerControllers/utils.js +3 -0
- package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
- package/dist/components/Gridler/components/Gridler.svelte +344 -442
- package/dist/components/Gridler/components/GridlerCanvas.svelte +720 -1115
- package/dist/components/Gridler/components/GridlerEditor.svelte +2 -15
- package/dist/components/Gridler/components/GridlerFull.svelte +521 -841
- package/dist/components/Gridler/components/GridlerFull.svelte.d.ts +1 -1
- package/dist/components/Gridler/components/GridlerFullWithFormerPreview.svelte +194 -147
- package/dist/components/Gridler/components/GridlerSearch.svelte +7 -16
- package/dist/components/Gridler/components/GridlerSearchToggle.svelte +7 -19
- package/dist/components/Gridler/types.d.ts +1 -1
- package/dist/components/Gridler/utils/serverPaging.d.ts +1 -0
- package/dist/components/Gridler/utils/serverPaging.js +7 -0
- package/dist/components/Icons/IconAdd.svelte +1 -3
- package/dist/components/Icons/IconAlertCircle.svelte +1 -3
- package/dist/components/Icons/IconAlertTriangle.svelte +1 -3
- package/dist/components/Icons/IconCamera.svelte +1 -3
- package/dist/components/Icons/IconClose.svelte +1 -3
- package/dist/components/Icons/IconEdit.svelte +1 -3
- package/dist/components/Icons/IconFilter.svelte +1 -3
- package/dist/components/Icons/IconSearch.svelte +1 -3
- package/dist/components/Icons/IconSort.svelte +1 -3
- package/dist/components/Icons/IconTrash.svelte +1 -3
- package/dist/components/Portal/Portal.svelte +14 -38
- package/dist/components/Screenshot/Screenshot.svelte +7 -13
- package/dist/components/Svark/Svark.svelte +680 -852
- package/dist/components/Svark/SvarkContextMenu.svelte +44 -63
- package/dist/components/Svark/SvarkInfiniteLoader.svelte +2 -6
- package/dist/components/Svark/SvarkPager.svelte +2 -28
- package/dist/components/Svark/SvarkSelectionDemo.svelte +4 -8
- package/dist/components/Svark/SvarkTopBar.svelte +9 -74
- package/dist/components/SvarkGrid/SvarkGrid.svelte +877 -1123
- package/dist/components/SvarkGrid/components/SvarkColumnFilterForm.svelte +45 -58
- package/dist/components/SvarkGrid/components/SvarkContextMenu.svelte +44 -63
- package/dist/components/SvarkGrid/components/SvarkHeaderFilterCell.svelte +41 -75
- package/dist/components/SvarkGrid/components/SvarkInfiniteLoader.svelte +2 -6
- package/dist/components/SvarkGrid/components/SvarkPager.svelte +2 -28
- package/dist/components/SvarkGrid/components/SvarkSearchPopover.svelte +8 -16
- package/dist/components/SvarkGrid/components/SvarkTopBar.svelte +6 -62
- package/dist/components/SvarkGrid/internal/SvarkGridView.svelte +345 -507
- package/dist/components/VTree/VTree.svelte +454 -431
- package/dist/components/VTree/VTree.utils.d.ts +23 -0
- package/dist/components/VTree/VTree.utils.js +73 -0
- package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
- package/dist/components/VTree/VTreeControlledSelectionDemo.svelte +20 -0
- package/dist/components/VTree/VTreeControlledSelectionDemo.svelte.d.ts +18 -0
- package/dist/components/VTree/VTreeCustomizationDemo.svelte +23 -0
- package/dist/components/VTree/VTreeCustomizationDemo.svelte.d.ts +18 -0
- package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
- package/dist/components/VTree/VTreeInteractionDemo.svelte +29 -0
- package/dist/components/VTree/VTreeInteractionDemo.svelte.d.ts +18 -0
- package/dist/components/VTree/VTreeMultiSelectDemo.svelte +27 -0
- package/dist/components/VTree/VTreeMultiSelectDemo.svelte.d.ts +18 -0
- package/dist/components/VTree/VTreeRow.svelte +77 -115
- package/dist/components/VTree/VTreeRow.svelte.d.ts +34 -18
- package/dist/components/VTree/VTreeSearch.svelte +6 -13
- package/dist/components/VTree/VTreeVirtualViewport.svelte +54 -143
- package/dist/components/VTree/VTreeVirtualViewport.svelte.d.ts +35 -18
- package/dist/components/VTree/types.d.ts +39 -1
- package/llm/COMPONENT_GUIDE.md +25 -0
- package/package.json +51 -50
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { VTreeRecord } from './types.js';
|
|
2
|
+
export interface NodeIndex<T extends VTreeRecord = VTreeRecord> {
|
|
3
|
+
byId: Map<string, T>;
|
|
4
|
+
parentById: Map<string, string | null>;
|
|
5
|
+
}
|
|
6
|
+
export declare function mergeClasses(base: string, override?: string): string;
|
|
7
|
+
export declare function buildNodeIndex<T extends VTreeRecord>(roots: T[], getId: (node: T) => string, getChildren: (node: T) => T[]): NodeIndex<T>;
|
|
8
|
+
export declare function findAncestorIds(parentById: Map<string, string | null>, targetId: string): string[];
|
|
9
|
+
export declare function resolveRowHeight<T extends VTreeRecord>(rowHeight: number | ((node: T, level: number, index: number) => number), node: T | undefined, level: number, index: number, fallback?: number): number;
|
|
10
|
+
export interface MultiSelectClickInput {
|
|
11
|
+
currentIds: string[];
|
|
12
|
+
clickedId: string;
|
|
13
|
+
clickedIndex: number;
|
|
14
|
+
anchorIndex: number | null;
|
|
15
|
+
orderedRowIds: string[];
|
|
16
|
+
ctrlOrMeta?: boolean;
|
|
17
|
+
shift?: boolean;
|
|
18
|
+
}
|
|
19
|
+
export declare function computeMultiSelectClick(input: MultiSelectClickInput): {
|
|
20
|
+
ids: string[];
|
|
21
|
+
nextAnchorIndex: number;
|
|
22
|
+
};
|
|
23
|
+
export declare function isImageLikeValue(value: unknown): boolean;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
export function mergeClasses(base, override) {
|
|
2
|
+
return [base, override].filter(Boolean).join(' ');
|
|
3
|
+
}
|
|
4
|
+
export function buildNodeIndex(roots, getId, getChildren) {
|
|
5
|
+
const byId = new Map();
|
|
6
|
+
const parentById = new Map();
|
|
7
|
+
const visiting = new Set();
|
|
8
|
+
const walk = (nodes, parentId) => {
|
|
9
|
+
for (const node of nodes) {
|
|
10
|
+
if (!node || visiting.has(node))
|
|
11
|
+
continue;
|
|
12
|
+
const id = getId(node);
|
|
13
|
+
if (!id || byId.has(id))
|
|
14
|
+
continue;
|
|
15
|
+
byId.set(id, node);
|
|
16
|
+
parentById.set(id, parentId);
|
|
17
|
+
visiting.add(node);
|
|
18
|
+
walk(getChildren(node), id);
|
|
19
|
+
visiting.delete(node);
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
walk(roots, null);
|
|
23
|
+
return { byId, parentById };
|
|
24
|
+
}
|
|
25
|
+
export function findAncestorIds(parentById, targetId) {
|
|
26
|
+
const visited = new Set();
|
|
27
|
+
const ancestors = [];
|
|
28
|
+
let current = targetId;
|
|
29
|
+
while (current && !visited.has(current)) {
|
|
30
|
+
visited.add(current);
|
|
31
|
+
const parent = parentById.get(current);
|
|
32
|
+
if (!parent)
|
|
33
|
+
break;
|
|
34
|
+
ancestors.push(parent);
|
|
35
|
+
current = parent;
|
|
36
|
+
}
|
|
37
|
+
return ancestors.reverse();
|
|
38
|
+
}
|
|
39
|
+
export function resolveRowHeight(rowHeight, node, level, index, fallback = 36) {
|
|
40
|
+
const value = typeof rowHeight === 'function' ? (node ? rowHeight(node, level, index) : fallback) : rowHeight;
|
|
41
|
+
return Number.isFinite(value) && value > 0 ? value : fallback;
|
|
42
|
+
}
|
|
43
|
+
export function computeMultiSelectClick(input) {
|
|
44
|
+
const current = new Set(input.currentIds);
|
|
45
|
+
let ids;
|
|
46
|
+
const anchor = input.anchorIndex ?? input.clickedIndex;
|
|
47
|
+
if (input.shift) {
|
|
48
|
+
const start = Math.max(0, Math.min(anchor, input.clickedIndex));
|
|
49
|
+
const end = Math.min(input.orderedRowIds.length - 1, Math.max(anchor, input.clickedIndex));
|
|
50
|
+
ids = input.ctrlOrMeta ? new Set(current) : new Set();
|
|
51
|
+
for (const id of input.orderedRowIds.slice(start, end + 1))
|
|
52
|
+
ids.add(id);
|
|
53
|
+
}
|
|
54
|
+
else if (input.ctrlOrMeta) {
|
|
55
|
+
ids = new Set(current);
|
|
56
|
+
if (ids.has(input.clickedId))
|
|
57
|
+
ids.delete(input.clickedId);
|
|
58
|
+
else
|
|
59
|
+
ids.add(input.clickedId);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
ids = new Set([input.clickedId]);
|
|
63
|
+
}
|
|
64
|
+
return {
|
|
65
|
+
ids: input.orderedRowIds.filter((id) => ids.has(id)),
|
|
66
|
+
nextAnchorIndex: input.clickedIndex
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
export function isImageLikeValue(value) {
|
|
70
|
+
if (typeof value !== 'string')
|
|
71
|
+
return false;
|
|
72
|
+
return /^(https?:\/\/|data:image\/|\/|\.\/|\.\.\/).+\.(png|jpe?g|gif|svg|webp)(\?.*)?$/i.test(value) || /^data:image\//i.test(value);
|
|
73
|
+
}
|
|
@@ -1,36 +1,24 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
const overlay = registerOverlay({ kind: 'contextmenu', mount: 'portal' });
|
|
25
|
-
backdropZ = overlay.layer.backdrop;
|
|
26
|
-
menuZ = overlay.layer.content;
|
|
27
|
-
|
|
28
|
-
return () => {
|
|
29
|
-
overlay.unregister();
|
|
30
|
-
backdropZ = 1090;
|
|
31
|
-
menuZ = 1100;
|
|
32
|
-
};
|
|
33
|
-
});
|
|
1
|
+
<script lang="ts">import Portal from "../Portal/Portal.svelte";
|
|
2
|
+
import { registerOverlay } from "../OverlayStack";
|
|
3
|
+
const { open, x, y, items, onselectitem } = $props();
|
|
4
|
+
let backdropZ = $state(1090);
|
|
5
|
+
let menuZ = $state(1100);
|
|
6
|
+
$effect(() => {
|
|
7
|
+
if (!open) {
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
const overlay = registerOverlay({
|
|
11
|
+
kind: "contextmenu",
|
|
12
|
+
mount: "portal"
|
|
13
|
+
});
|
|
14
|
+
backdropZ = overlay.layer.backdrop;
|
|
15
|
+
menuZ = overlay.layer.content;
|
|
16
|
+
return () => {
|
|
17
|
+
overlay.unregister();
|
|
18
|
+
backdropZ = 1090;
|
|
19
|
+
menuZ = 1100;
|
|
20
|
+
};
|
|
21
|
+
});
|
|
34
22
|
</script>
|
|
35
23
|
|
|
36
24
|
<Portal>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script lang="ts">import VTree from "./VTree.svelte";
|
|
2
|
+
const data = [{
|
|
3
|
+
id: "root",
|
|
4
|
+
label: "Root",
|
|
5
|
+
children: [{
|
|
6
|
+
id: "deep",
|
|
7
|
+
label: "Deep child",
|
|
8
|
+
children: [{
|
|
9
|
+
id: "leaf",
|
|
10
|
+
label: "Leaf"
|
|
11
|
+
}]
|
|
12
|
+
}]
|
|
13
|
+
}];
|
|
14
|
+
let selected = null;
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<div class="space-y-2">
|
|
18
|
+
<button class="btn preset-filled-primary-500" type="button" onclick={() => selected = data[0].children[0].children[0]}>Select leaf</button>
|
|
19
|
+
<VTree {data} {selected} onSelectedChange={(node) => selected = node} searchable={false} />
|
|
20
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const VTreeControlledSelectionDemo: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type VTreeControlledSelectionDemo = InstanceType<typeof VTreeControlledSelectionDemo>;
|
|
18
|
+
export default VTreeControlledSelectionDemo;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<script lang="ts">// @ts-nocheck
|
|
2
|
+
import VTree from "./VTree.svelte";
|
|
3
|
+
const data = [{
|
|
4
|
+
id: "folder",
|
|
5
|
+
label: "Folder",
|
|
6
|
+
icon: "📁",
|
|
7
|
+
children: [{
|
|
8
|
+
id: "doc",
|
|
9
|
+
label: "Document",
|
|
10
|
+
icon: "📄"
|
|
11
|
+
}]
|
|
12
|
+
}, {
|
|
13
|
+
id: "settings",
|
|
14
|
+
label: "Settings",
|
|
15
|
+
icon: "⚙️"
|
|
16
|
+
}];
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
{#snippet customIcon({ node })}
|
|
20
|
+
<span aria-hidden="true">{node.id === 'folder' ? '🗂️' : '✨'}</span>
|
|
21
|
+
{/snippet}
|
|
22
|
+
|
|
23
|
+
<VTree {data} iconField="icon" icon={customIcon} searchable={false} />
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const VTreeCustomizationDemo: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type VTreeCustomizationDemo = InstanceType<typeof VTreeCustomizationDemo>;
|
|
18
|
+
export default VTreeCustomizationDemo;
|
|
@@ -1,61 +1,51 @@
|
|
|
1
|
-
<script lang="ts"
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
},
|
|
51
|
-
{
|
|
52
|
-
id: 'inspect',
|
|
53
|
-
label: 'Inspect Node',
|
|
54
|
-
onselect: (row, treeData) => {
|
|
55
|
-
eventLog = `menu: inspect -> ${row.id} (roots: ${treeData.length})`;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
];
|
|
1
|
+
<script lang="ts">// @ts-nocheck
|
|
2
|
+
import VTree from "./VTree.svelte";
|
|
3
|
+
const data = [{
|
|
4
|
+
id: "alpha",
|
|
5
|
+
label: "Alpha Team",
|
|
6
|
+
description: "Top-level group",
|
|
7
|
+
hasChildren: true,
|
|
8
|
+
children: [{
|
|
9
|
+
id: "alpha-1",
|
|
10
|
+
label: "Alpha User 1",
|
|
11
|
+
description: "Owner"
|
|
12
|
+
}, {
|
|
13
|
+
id: "alpha-2",
|
|
14
|
+
label: "Alpha User 2",
|
|
15
|
+
description: "Contributor"
|
|
16
|
+
}]
|
|
17
|
+
}, {
|
|
18
|
+
id: "beta",
|
|
19
|
+
label: "Beta Team",
|
|
20
|
+
description: "Top-level group",
|
|
21
|
+
hasChildren: true,
|
|
22
|
+
children: [{
|
|
23
|
+
id: "beta-1",
|
|
24
|
+
label: "Beta User 1",
|
|
25
|
+
description: "Owner"
|
|
26
|
+
}, {
|
|
27
|
+
id: "beta-2",
|
|
28
|
+
label: "Beta User 2",
|
|
29
|
+
description: "Contributor"
|
|
30
|
+
}]
|
|
31
|
+
}];
|
|
32
|
+
let eventLog = $state("No row event yet.");
|
|
33
|
+
function printEvent(kind, row, treeData) {
|
|
34
|
+
eventLog = `${kind}: ${row?.label ?? "null"} | tree roots: ${treeData.length}`;
|
|
35
|
+
}
|
|
36
|
+
const menuItems = [{
|
|
37
|
+
id: "open",
|
|
38
|
+
label: "Open",
|
|
39
|
+
onselect: (row) => {
|
|
40
|
+
eventLog = `menu: open -> ${row?.label ?? "null"}`;
|
|
41
|
+
}
|
|
42
|
+
}, {
|
|
43
|
+
id: "inspect",
|
|
44
|
+
label: "Inspect Node",
|
|
45
|
+
onselect: (row, treeData) => {
|
|
46
|
+
eventLog = `menu: inspect -> ${row.id} (roots: ${treeData.length})`;
|
|
47
|
+
}
|
|
48
|
+
}];
|
|
59
49
|
</script>
|
|
60
50
|
|
|
61
51
|
{#snippet leftContent(args)}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">import VTree from "./VTree.svelte";
|
|
2
|
+
const data = [{
|
|
3
|
+
id: "a",
|
|
4
|
+
label: "Press/hover me",
|
|
5
|
+
children: [{
|
|
6
|
+
id: "b",
|
|
7
|
+
label: "Child row"
|
|
8
|
+
}]
|
|
9
|
+
}];
|
|
10
|
+
let events = [];
|
|
11
|
+
const log = (name) => (node) => {
|
|
12
|
+
events = [`${name}: ${String(node.label)}`, ...events].slice(0, 8);
|
|
13
|
+
};
|
|
14
|
+
</script>
|
|
15
|
+
|
|
16
|
+
<div class="space-y-2">
|
|
17
|
+
<VTree
|
|
18
|
+
{data}
|
|
19
|
+
searchable={false}
|
|
20
|
+
onclick={log('click')}
|
|
21
|
+
onsingleclick={log('single')}
|
|
22
|
+
ondoubleclick={log('double')}
|
|
23
|
+
onlongpress={log('long')}
|
|
24
|
+
onrowhover={(node) => { events = [`hover: ${String(node.label)}`, ...events].slice(0, 8); }}
|
|
25
|
+
/>
|
|
26
|
+
<ul class="text-xs">
|
|
27
|
+
{#each events as event, i (i)}<li>{event}</li>{/each}
|
|
28
|
+
</ul>
|
|
29
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const VTreeInteractionDemo: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type VTreeInteractionDemo = InstanceType<typeof VTreeInteractionDemo>;
|
|
18
|
+
export default VTreeInteractionDemo;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
<script lang="ts">import VTree from "./VTree.svelte";
|
|
2
|
+
const data = [
|
|
3
|
+
{
|
|
4
|
+
id: "a",
|
|
5
|
+
label: "Alpha"
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
id: "b",
|
|
9
|
+
label: "Beta"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
id: "c",
|
|
13
|
+
label: "Gamma"
|
|
14
|
+
}
|
|
15
|
+
];
|
|
16
|
+
let selectedItems = [];
|
|
17
|
+
let selectionMode = "checkbox";
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<div class="space-y-2">
|
|
21
|
+
<select bind:value={selectionMode}>
|
|
22
|
+
<option value="checkbox">checkbox</option>
|
|
23
|
+
<option value="modifier">modifier</option>
|
|
24
|
+
</select>
|
|
25
|
+
<VTree {data} multiple {selectionMode} {selectedItems} onSelectedItemsChange={(items) => selectedItems = items} searchable={false} />
|
|
26
|
+
<p class="text-xs">Selected: {selectedItems.map((item) => item.label).join(', ') || 'none'}</p>
|
|
27
|
+
</div>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
2
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
3
|
+
$$bindings?: Bindings;
|
|
4
|
+
} & Exports;
|
|
5
|
+
(internal: unknown, props: {
|
|
6
|
+
$$events?: Events;
|
|
7
|
+
$$slots?: Slots;
|
|
8
|
+
}): Exports & {
|
|
9
|
+
$set?: any;
|
|
10
|
+
$on?: any;
|
|
11
|
+
};
|
|
12
|
+
z_$$bindings?: Bindings;
|
|
13
|
+
}
|
|
14
|
+
declare const VTreeMultiSelectDemo: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
}, {}, {}, string>;
|
|
17
|
+
type VTreeMultiSelectDemo = InstanceType<typeof VTreeMultiSelectDemo>;
|
|
18
|
+
export default VTreeMultiSelectDemo;
|