@warkypublic/svelix 0.1.44 → 0.1.47
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 +488 -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 +1141 -0
- package/dist/components/CardGrid/CardGrid.svelte.d.ts +61 -0
- package/dist/components/CardGrid/CardGridFilterPanel.svelte +320 -0
- package/dist/components/CardGrid/CardGridFilterPanel.svelte.d.ts +11 -0
- package/dist/components/CardGrid/DefaultCard.svelte +287 -0
- package/dist/components/CardGrid/DefaultCard.svelte.d.ts +10 -0
- package/dist/components/CardGrid/ImageCardStory.svelte +308 -0
- package/dist/components/CardGrid/ImageCardStory.svelte.d.ts +18 -0
- package/dist/components/CardGrid/cardGrid.d.ts +33 -0
- package/dist/components/CardGrid/cardGrid.js +21 -0
- package/dist/components/CardGrid/index.d.ts +4 -0
- package/dist/components/CardGrid/index.js +4 -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 +26 -78
- package/dist/components/Former/FormerDrawerPreview.svelte +99 -89
- package/dist/components/Former/FormerModal.svelte +24 -70
- 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/FormerControllers/ButtonCtrl.svelte +13 -44
- package/dist/components/FormerControllers/DateTimeCtrl/DateTimeCtrl.svelte +280 -445
- 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 -42
- package/dist/components/FormerControllers/InlineWrapper.svelte +12 -41
- package/dist/components/FormerControllers/InlineWrapperPreview.svelte +4 -26
- package/dist/components/FormerControllers/NativeSelectCtrl.svelte +3 -29
- package/dist/components/FormerControllers/NumberInputCtrl.svelte +9 -35
- package/dist/components/FormerControllers/PasswordInputCtrl.svelte +4 -23
- package/dist/components/FormerControllers/SwitchCtrl.svelte +3 -20
- package/dist/components/FormerControllers/TextAreaCtrl.svelte +3 -24
- package/dist/components/FormerControllers/TextInputCtrl.svelte +3 -24
- package/dist/components/GlobalStateStore/GlobalStateStoreProvider.svelte +73 -120
- package/dist/components/Gridler/components/Gridler.svelte +338 -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 +520 -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/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 +349 -431
- package/dist/components/VTree/VTreeContextMenu.svelte +21 -33
- package/dist/components/VTree/VTreeEventsDemo.svelte +48 -58
- package/dist/components/VTree/VTreeRow.svelte +13 -65
- package/dist/components/VTree/VTreeSearch.svelte +6 -13
- package/dist/components/VTree/VTreeVirtualViewport.svelte +37 -106
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/llm/COMPONENT_GUIDE.md +240 -0
- package/llm/plans/card_grid.plan.md +305 -0
- package/package.json +48 -46
|
@@ -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>
|
|
@@ -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)}
|
|
@@ -1,68 +1,16 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
getNodeDescription: (node: T) => string;
|
|
15
|
-
treeDataSnapshot: T[];
|
|
16
|
-
leftSection?: Snippet<[{
|
|
17
|
-
node: T;
|
|
18
|
-
level: number;
|
|
19
|
-
rowIndex: number;
|
|
20
|
-
treeData: T[];
|
|
21
|
-
}]>;
|
|
22
|
-
rightSection?: Snippet<[{
|
|
23
|
-
node: T;
|
|
24
|
-
level: number;
|
|
25
|
-
rowIndex: number;
|
|
26
|
-
treeData: T[];
|
|
27
|
-
}]>;
|
|
28
|
-
onselectrow?: (index: number, event: MouseEvent) => void;
|
|
29
|
-
onrowdoubleclick?: (index: number, event: MouseEvent) => void;
|
|
30
|
-
onrowcontext?: (index: number, event: MouseEvent) => void;
|
|
31
|
-
ontogglerow?: (node: T) => void;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const {
|
|
35
|
-
row,
|
|
36
|
-
index,
|
|
37
|
-
rowHeight,
|
|
38
|
-
indent,
|
|
39
|
-
isFocused,
|
|
40
|
-
isSelected,
|
|
41
|
-
getNodeLabel,
|
|
42
|
-
getNodeDescription,
|
|
43
|
-
treeDataSnapshot,
|
|
44
|
-
leftSection,
|
|
45
|
-
rightSection,
|
|
46
|
-
onselectrow,
|
|
47
|
-
onrowdoubleclick,
|
|
48
|
-
onrowcontext,
|
|
49
|
-
ontogglerow
|
|
50
|
-
}: Props = $props();
|
|
51
|
-
|
|
52
|
-
const rowClasses = $derived(
|
|
53
|
-
[
|
|
54
|
-
'grid grid-cols-[1fr_auto] items-center select-none border-b border-surface-200-700 hover:bg-surface-100-800',
|
|
55
|
-
isFocused ? 'bg-primary-100 dark:bg-primary-900/35' : '',
|
|
56
|
-
isSelected ? 'bg-primary-200 dark:bg-primary-900/60' : ''
|
|
57
|
-
].join(' ')
|
|
58
|
-
);
|
|
59
|
-
|
|
60
|
-
const sectionArgs = $derived({
|
|
61
|
-
node: row.node,
|
|
62
|
-
level: row.level,
|
|
63
|
-
rowIndex: index,
|
|
64
|
-
treeData: treeDataSnapshot
|
|
65
|
-
});
|
|
1
|
+
<script lang="ts">const { row, index, rowHeight, indent, isFocused, isSelected, getNodeLabel, getNodeDescription, treeDataSnapshot, leftSection, rightSection, onselectrow, onrowdoubleclick, onrowcontext, ontogglerow } = $props();
|
|
2
|
+
const rowClasses = $derived([
|
|
3
|
+
"grid grid-cols-[1fr_auto] items-center select-none border-b border-surface-200-700 hover:bg-surface-100-800",
|
|
4
|
+
isFocused ? "bg-primary-100 dark:bg-primary-900/35" : "",
|
|
5
|
+
isSelected ? "bg-primary-200 dark:bg-primary-900/60" : ""
|
|
6
|
+
].join(" "));
|
|
7
|
+
const sectionArgs = $derived({
|
|
8
|
+
node: row.node,
|
|
9
|
+
level: row.level,
|
|
10
|
+
rowIndex: index,
|
|
11
|
+
treeData: treeDataSnapshot
|
|
12
|
+
});
|
|
13
|
+
export {};
|
|
66
14
|
</script>
|
|
67
15
|
|
|
68
16
|
<div
|
|
@@ -1,16 +1,9 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
const { value, placeholder = 'Search tree...', oninputvalue }: Props = $props();
|
|
9
|
-
|
|
10
|
-
function handleInput(event: Event) {
|
|
11
|
-
const target = event.currentTarget as HTMLInputElement;
|
|
12
|
-
oninputvalue?.(target.value);
|
|
13
|
-
}
|
|
1
|
+
<script lang="ts">const { value, placeholder = "Search tree...", oninputvalue } = $props();
|
|
2
|
+
function handleInput(event) {
|
|
3
|
+
const target = event.currentTarget;
|
|
4
|
+
oninputvalue?.(target.value);
|
|
5
|
+
}
|
|
6
|
+
export {};
|
|
14
7
|
</script>
|
|
15
8
|
|
|
16
9
|
<div class="flex">
|
|
@@ -1,109 +1,40 @@
|
|
|
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
|
-
ontogglerow?: (node: T) => void;
|
|
39
|
-
ontreekeydown?: (event: KeyboardEvent) => void;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const {
|
|
43
|
-
rows,
|
|
44
|
-
rowHeight,
|
|
45
|
-
height,
|
|
46
|
-
indent,
|
|
47
|
-
overscan,
|
|
48
|
-
focusedIndex,
|
|
49
|
-
selectedId,
|
|
50
|
-
loadingRoot,
|
|
51
|
-
loadingMessage,
|
|
52
|
-
emptyMessage,
|
|
53
|
-
getNodeLabel,
|
|
54
|
-
getNodeDescription,
|
|
55
|
-
treeDataSnapshot,
|
|
56
|
-
leftSection,
|
|
57
|
-
rightSection,
|
|
58
|
-
onselectrow,
|
|
59
|
-
onrowdoubleclick,
|
|
60
|
-
onrowcontext,
|
|
61
|
-
onviewportcontext,
|
|
62
|
-
ontogglerow,
|
|
63
|
-
ontreekeydown
|
|
64
|
-
}: Props = $props();
|
|
65
|
-
|
|
66
|
-
let viewportRef = $state<HTMLDivElement | null>(null);
|
|
67
|
-
let virtualizerInstance = $state<SvelteVirtualizer<HTMLDivElement, HTMLDivElement> | null>(null);
|
|
68
|
-
|
|
69
|
-
function toCssSize(value: string | number): string {
|
|
70
|
-
return typeof value === 'number' ? `${value}px` : value;
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
export function scrollToIndex(index: number) {
|
|
74
|
-
virtualizerInstance?.scrollToIndex(index, { align: 'auto' });
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
$effect(() => {
|
|
78
|
-
if (!viewportRef) {
|
|
79
|
-
virtualizerInstance = null;
|
|
80
|
-
return;
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
const virtualizer = createVirtualizer<HTMLDivElement, HTMLDivElement>({
|
|
84
|
-
count: rows.length,
|
|
85
|
-
estimateSize: () => rowHeight,
|
|
86
|
-
overscan,
|
|
87
|
-
getScrollElement: () => viewportRef
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
return virtualizer.subscribe((instance) => {
|
|
91
|
-
virtualizerInstance = instance;
|
|
92
|
-
});
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
$effect(() => {
|
|
96
|
-
if (!virtualizerInstance || !viewportRef) return;
|
|
97
|
-
virtualizerInstance.setOptions({
|
|
98
|
-
count: rows.length,
|
|
99
|
-
estimateSize: () => rowHeight,
|
|
100
|
-
overscan,
|
|
101
|
-
getScrollElement: () => viewportRef
|
|
102
|
-
});
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
const virtualItems = $derived(virtualizerInstance?.getVirtualItems() ?? []);
|
|
106
|
-
const totalSize = $derived(virtualizerInstance?.getTotalSize() ?? 0);
|
|
1
|
+
<script lang="ts">import { createVirtualizer } from "@tanstack/svelte-virtual";
|
|
2
|
+
import VTreeRow from "./VTreeRow.svelte";
|
|
3
|
+
const { rows, rowHeight, height, indent, overscan, focusedIndex, selectedId, loadingRoot, loadingMessage, emptyMessage, getNodeLabel, getNodeDescription, treeDataSnapshot, leftSection, rightSection, onselectrow, onrowdoubleclick, onrowcontext, onviewportcontext, ontogglerow, ontreekeydown } = $props();
|
|
4
|
+
let viewportRef = $state(null);
|
|
5
|
+
let virtualizerInstance = $state(null);
|
|
6
|
+
function toCssSize(value) {
|
|
7
|
+
return typeof value === "number" ? `${value}px` : value;
|
|
8
|
+
}
|
|
9
|
+
export function scrollToIndex(index) {
|
|
10
|
+
virtualizerInstance?.scrollToIndex(index, { align: "auto" });
|
|
11
|
+
}
|
|
12
|
+
$effect(() => {
|
|
13
|
+
if (!viewportRef) {
|
|
14
|
+
virtualizerInstance = null;
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
const virtualizer = createVirtualizer({
|
|
18
|
+
count: rows.length,
|
|
19
|
+
estimateSize: () => rowHeight,
|
|
20
|
+
overscan,
|
|
21
|
+
getScrollElement: () => viewportRef
|
|
22
|
+
});
|
|
23
|
+
return virtualizer.subscribe((instance) => {
|
|
24
|
+
virtualizerInstance = instance;
|
|
25
|
+
});
|
|
26
|
+
});
|
|
27
|
+
$effect(() => {
|
|
28
|
+
if (!virtualizerInstance || !viewportRef) return;
|
|
29
|
+
virtualizerInstance.setOptions({
|
|
30
|
+
count: rows.length,
|
|
31
|
+
estimateSize: () => rowHeight,
|
|
32
|
+
overscan,
|
|
33
|
+
getScrollElement: () => viewportRef
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
const virtualItems = $derived(virtualizerInstance?.getVirtualItems() ?? []);
|
|
37
|
+
const totalSize = $derived(virtualizerInstance?.getTotalSize() ?? 0);
|
|
107
38
|
</script>
|
|
108
39
|
|
|
109
40
|
<div
|
package/dist/components/index.js
CHANGED