@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.
Files changed (129) hide show
  1. package/README.md +93 -33
  2. package/dist/components/BetterMenu/BetterMenu.svelte +21 -37
  3. package/dist/components/BetterMenu/BetterMenuAsyncButton.svelte +21 -31
  4. package/dist/components/BetterMenu/BetterMenuPreview.svelte +27 -29
  5. package/dist/components/BetterMenu/MenuRenderer.svelte +40 -51
  6. package/dist/components/Boxer/Boxer.svelte +492 -602
  7. package/dist/components/Boxer/BoxerTarget.svelte +6 -46
  8. package/dist/components/Boxer/BoxerTarget.svelte.d.ts +1 -0
  9. package/dist/components/Boxer/types.d.ts +0 -1
  10. package/dist/components/Button.svelte +19 -43
  11. package/dist/components/ButtonPreview.svelte +2 -11
  12. package/dist/components/CardGrid/CardGrid.svelte +489 -614
  13. package/dist/components/CardGrid/CardGrid.svelte.d.ts +4 -0
  14. package/dist/components/CardGrid/CardGridFilterPanel.svelte +111 -90
  15. package/dist/components/CardGrid/DefaultCard.svelte +86 -97
  16. package/dist/components/CardGrid/DefaultCard.svelte.d.ts +1 -0
  17. package/dist/components/CardGrid/ImageCardStory.svelte +87 -36
  18. package/dist/components/CardGrid/cardGrid.d.ts +24 -0
  19. package/dist/components/CardGrid/cardGrid.js +20 -0
  20. package/dist/components/ContentEditor/CollaboraInsertTextDemo.svelte +5 -10
  21. package/dist/components/ContentEditor/ContentEditor.svelte +24 -50
  22. package/dist/components/ContentEditor/subcomponents/AudioPlayer.svelte +17 -17
  23. package/dist/components/ContentEditor/subcomponents/CollaboraEditor.svelte +244 -309
  24. package/dist/components/ContentEditor/subcomponents/EmailViewer.svelte +2 -3
  25. package/dist/components/ContentEditor/subcomponents/ImageViewer.svelte +14 -15
  26. package/dist/components/ContentEditor/subcomponents/MarkdownViewer.svelte +74 -90
  27. package/dist/components/ContentEditor/subcomponents/MonacoEditor.svelte +75 -103
  28. package/dist/components/ContentEditor/subcomponents/Office365Editor.svelte +234 -297
  29. package/dist/components/ContentEditor/subcomponents/PdfViewer.svelte +14 -20
  30. package/dist/components/ContentEditor/subcomponents/TextEditor.svelte +122 -150
  31. package/dist/components/ContentEditor/subcomponents/UnknownFile.svelte +105 -126
  32. package/dist/components/ContentEditor/subcomponents/VideoPlayer.svelte +17 -17
  33. package/dist/components/ContentEditor/subcomponents/ZipViewer.svelte +2 -3
  34. package/dist/components/ErrorBoundary/ErrorBoundary.svelte +41 -58
  35. package/dist/components/ErrorBoundary/ErrorBoundaryPreview.svelte +8 -16
  36. package/dist/components/Former/Former.svelte +306 -424
  37. package/dist/components/Former/FormerButtonArea.svelte +17 -68
  38. package/dist/components/Former/FormerDrawer.svelte +16 -80
  39. package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
  40. package/dist/components/Former/FormerModal.svelte +16 -74
  41. package/dist/components/Former/FormerModalPreview.svelte +99 -89
  42. package/dist/components/Former/FormerPreview.svelte +76 -78
  43. package/dist/components/Former/FormerRestApiPreview.svelte +55 -48
  44. package/dist/components/Former/formerOverlayHelpers.svelte.d.ts +11 -0
  45. package/dist/components/Former/formerOverlayHelpers.svelte.js +38 -0
  46. package/dist/components/Former/index.d.ts +1 -0
  47. package/dist/components/Former/index.js +1 -0
  48. package/dist/components/FormerControllers/ButtonCtrl.svelte +13 -49
  49. package/dist/components/FormerControllers/CtrlFieldShell.svelte +15 -0
  50. package/dist/components/FormerControllers/CtrlFieldShell.svelte.d.ts +12 -0
  51. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +285 -457
  52. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlCalendar.svelte +95 -136
  53. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlPickerPanel.svelte +3 -62
  54. package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrlTimeFields.svelte +143 -217
  55. package/dist/components/FormerControllers/IconButtonCtrl.svelte +13 -47
  56. package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
  57. package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
  58. package/dist/components/FormerControllers/NativeSelectCtrl.svelte +7 -39
  59. package/dist/components/FormerControllers/NumberInputCtrl.svelte +21 -43
  60. package/dist/components/FormerControllers/PasswordInputCtrl.svelte +8 -33
  61. package/dist/components/FormerControllers/SwitchCtrl.svelte +4 -20
  62. package/dist/components/FormerControllers/TextAreaCtrl.svelte +7 -34
  63. package/dist/components/FormerControllers/TextInputCtrl.svelte +7 -34
  64. package/dist/components/FormerControllers/ctrlLoading.svelte.d.ts +8 -0
  65. package/dist/components/FormerControllers/ctrlLoading.svelte.js +43 -0
  66. package/dist/components/FormerControllers/index.d.ts +2 -0
  67. package/dist/components/FormerControllers/index.js +2 -0
  68. package/dist/components/FormerControllers/utils.d.ts +1 -0
  69. package/dist/components/FormerControllers/utils.js +3 -0
  70. package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
  71. package/dist/components/Gridler/components/Gridler.svelte +344 -442
  72. package/dist/components/Gridler/components/GridlerCanvas.svelte +720 -1115
  73. package/dist/components/Gridler/components/GridlerEditor.svelte +2 -15
  74. package/dist/components/Gridler/components/GridlerFull.svelte +521 -841
  75. package/dist/components/Gridler/components/GridlerFull.svelte.d.ts +1 -1
  76. package/dist/components/Gridler/components/GridlerFullWithFormerPreview.svelte +194 -147
  77. package/dist/components/Gridler/components/GridlerSearch.svelte +7 -16
  78. package/dist/components/Gridler/components/GridlerSearchToggle.svelte +7 -19
  79. package/dist/components/Gridler/types.d.ts +1 -1
  80. package/dist/components/Gridler/utils/serverPaging.d.ts +1 -0
  81. package/dist/components/Gridler/utils/serverPaging.js +7 -0
  82. package/dist/components/Icons/IconAdd.svelte +1 -3
  83. package/dist/components/Icons/IconAlertCircle.svelte +1 -3
  84. package/dist/components/Icons/IconAlertTriangle.svelte +1 -3
  85. package/dist/components/Icons/IconCamera.svelte +1 -3
  86. package/dist/components/Icons/IconClose.svelte +1 -3
  87. package/dist/components/Icons/IconEdit.svelte +1 -3
  88. package/dist/components/Icons/IconFilter.svelte +1 -3
  89. package/dist/components/Icons/IconSearch.svelte +1 -3
  90. package/dist/components/Icons/IconSort.svelte +1 -3
  91. package/dist/components/Icons/IconTrash.svelte +1 -3
  92. package/dist/components/Portal/Portal.svelte +14 -38
  93. package/dist/components/Screenshot/Screenshot.svelte +7 -13
  94. package/dist/components/Svark/Svark.svelte +680 -852
  95. package/dist/components/Svark/SvarkContextMenu.svelte +44 -63
  96. package/dist/components/Svark/SvarkInfiniteLoader.svelte +2 -6
  97. package/dist/components/Svark/SvarkPager.svelte +2 -28
  98. package/dist/components/Svark/SvarkSelectionDemo.svelte +4 -8
  99. package/dist/components/Svark/SvarkTopBar.svelte +9 -74
  100. package/dist/components/SvarkGrid/SvarkGrid.svelte +877 -1123
  101. package/dist/components/SvarkGrid/components/SvarkColumnFilterForm.svelte +45 -58
  102. package/dist/components/SvarkGrid/components/SvarkContextMenu.svelte +44 -63
  103. package/dist/components/SvarkGrid/components/SvarkHeaderFilterCell.svelte +41 -75
  104. package/dist/components/SvarkGrid/components/SvarkInfiniteLoader.svelte +2 -6
  105. package/dist/components/SvarkGrid/components/SvarkPager.svelte +2 -28
  106. package/dist/components/SvarkGrid/components/SvarkSearchPopover.svelte +8 -16
  107. package/dist/components/SvarkGrid/components/SvarkTopBar.svelte +6 -62
  108. package/dist/components/SvarkGrid/internal/SvarkGridView.svelte +345 -507
  109. package/dist/components/VTree/VTree.svelte +454 -431
  110. package/dist/components/VTree/VTree.utils.d.ts +23 -0
  111. package/dist/components/VTree/VTree.utils.js +73 -0
  112. package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
  113. package/dist/components/VTree/VTreeControlledSelectionDemo.svelte +20 -0
  114. package/dist/components/VTree/VTreeControlledSelectionDemo.svelte.d.ts +18 -0
  115. package/dist/components/VTree/VTreeCustomizationDemo.svelte +23 -0
  116. package/dist/components/VTree/VTreeCustomizationDemo.svelte.d.ts +18 -0
  117. package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
  118. package/dist/components/VTree/VTreeInteractionDemo.svelte +29 -0
  119. package/dist/components/VTree/VTreeInteractionDemo.svelte.d.ts +18 -0
  120. package/dist/components/VTree/VTreeMultiSelectDemo.svelte +27 -0
  121. package/dist/components/VTree/VTreeMultiSelectDemo.svelte.d.ts +18 -0
  122. package/dist/components/VTree/VTreeRow.svelte +77 -115
  123. package/dist/components/VTree/VTreeRow.svelte.d.ts +34 -18
  124. package/dist/components/VTree/VTreeSearch.svelte +6 -13
  125. package/dist/components/VTree/VTreeVirtualViewport.svelte +54 -143
  126. package/dist/components/VTree/VTreeVirtualViewport.svelte.d.ts +35 -18
  127. package/dist/components/VTree/types.d.ts +39 -1
  128. package/llm/COMPONENT_GUIDE.md +25 -0
  129. 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
- import Portal from '../Portal/Portal.svelte';
3
- import { registerOverlay } from '../OverlayStack';
4
- import type { VTreeContextMenuItem, VTreeRecord } from './types.js';
5
-
6
- export interface Props<T extends VTreeRecord = VTreeRecord> {
7
- open: boolean;
8
- x: number;
9
- y: number;
10
- items: VTreeContextMenuItem<T>[];
11
- onselectitem?: (item: VTreeContextMenuItem<T>) => void;
12
- }
13
-
14
- const { open, x, y, items, onselectitem }: Props = $props();
15
-
16
- let backdropZ = $state(1090);
17
- let menuZ = $state(1100);
18
-
19
- $effect(() => {
20
- if (!open) {
21
- return;
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
- // @ts-nocheck
3
- import VTree from './VTree.svelte';
4
- import type { VTreeContextMenuItem, VTreeRecord } from './types.js';
5
-
6
- interface DemoNode extends VTreeRecord {
7
- id: string;
8
- label: string;
9
- description?: string;
10
- children?: DemoNode[];
11
- hasChildren?: boolean;
12
- }
13
-
14
- const data: DemoNode[] = [
15
- {
16
- id: 'alpha',
17
- label: 'Alpha Team',
18
- description: 'Top-level group',
19
- hasChildren: true,
20
- children: [
21
- { id: 'alpha-1', label: 'Alpha User 1', description: 'Owner' },
22
- { id: 'alpha-2', label: 'Alpha User 2', description: 'Contributor' }
23
- ]
24
- },
25
- {
26
- id: 'beta',
27
- label: 'Beta Team',
28
- description: 'Top-level group',
29
- hasChildren: true,
30
- children: [
31
- { id: 'beta-1', label: 'Beta User 1', description: 'Owner' },
32
- { id: 'beta-2', label: 'Beta User 2', description: 'Contributor' }
33
- ]
34
- }
35
- ];
36
-
37
- let eventLog = $state('No row event yet.');
38
-
39
- function printEvent(kind: string, row: DemoNode | null, treeData: DemoNode[]) {
40
- eventLog = `${kind}: ${row?.label ?? 'null'} | tree roots: ${treeData.length}`;
41
- }
42
-
43
- const menuItems: VTreeContextMenuItem<DemoNode>[] = [
44
- {
45
- id: 'open',
46
- label: 'Open',
47
- onselect: (row) => {
48
- eventLog = `menu: open -> ${row?.label ?? 'null'}`;
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;