@ims360/svelte-ivory 0.0.52 → 0.0.55
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/components/layout/hiddenBackground/HiddenBackground.svelte +2 -2
- package/dist/components/table/Table.svelte +12 -0
- package/dist/components/table/Table.svelte.d.ts +7 -2
- package/dist/components/table/Table.svelte.d.ts.map +1 -1
- package/dist/components/table/VirtualList.svelte +13 -0
- package/dist/components/table/VirtualList.svelte.d.ts +6 -2
- package/dist/components/table/VirtualList.svelte.d.ts.map +1 -1
- package/dist/utils/actions/index.d.ts +1 -1
- package/dist/utils/actions/index.d.ts.map +1 -1
- package/dist/utils/actions/index.js +1 -1
- package/dist/utils/actions/shortcut.svelte.d.ts +10 -0
- package/dist/utils/actions/shortcut.svelte.d.ts.map +1 -0
- package/dist/utils/actions/shortcut.svelte.js +43 -0
- package/package.json +1 -1
- package/src/lib/components/layout/hiddenBackground/HiddenBackground.svelte +2 -2
- package/src/lib/components/table/Table.svelte +12 -0
- package/src/lib/components/table/VirtualList.svelte +13 -0
- package/src/lib/utils/actions/index.ts +1 -1
- package/src/lib/utils/actions/shortcut.svelte.ts +63 -0
- package/dist/utils/actions/shortcut.d.ts +0 -11
- package/dist/utils/actions/shortcut.d.ts.map +0 -1
- package/dist/utils/actions/shortcut.js +0 -25
- package/src/lib/utils/actions/shortcut.ts +0 -35
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
readonly toggleExpansion: (id: string) => void;
|
|
49
49
|
readonly nestingInset: number;
|
|
50
50
|
readonly rowHeight: number;
|
|
51
|
+
readonly scrollTo: (top?: number, left?: number) => void;
|
|
51
52
|
};
|
|
52
53
|
|
|
53
54
|
function setTableContext<T extends TableRow<T>>(context: TableContext<T>) {
|
|
@@ -88,6 +89,7 @@
|
|
|
88
89
|
else expanded.add(id);
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
// eslint-disable-next-line svelte/no-unnecessary-state-wrap
|
|
91
93
|
let hidden = $state(new SvelteSet<string>());
|
|
92
94
|
const searchResult = $derived.by(() => {
|
|
93
95
|
if (!search)
|
|
@@ -174,11 +176,21 @@
|
|
|
174
176
|
},
|
|
175
177
|
get rowHeight() {
|
|
176
178
|
return rowHeight;
|
|
179
|
+
},
|
|
180
|
+
scrollTo(top?: number, left?: number) {
|
|
181
|
+
list?.scrollTo(top, left);
|
|
177
182
|
}
|
|
178
183
|
});
|
|
184
|
+
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
|
+
let list = $state<VirtualList<any>>();
|
|
187
|
+
export function scrollTo(top?: number, left?: number) {
|
|
188
|
+
list?.scrollTo(top, left);
|
|
189
|
+
}
|
|
179
190
|
</script>
|
|
180
191
|
|
|
181
192
|
<VirtualList
|
|
193
|
+
bind:this={list}
|
|
182
194
|
data={results.entries}
|
|
183
195
|
class={twMerge(clsx(['flex flex-col overflow-hidden border-transparent', clazz]))}
|
|
184
196
|
bind:b_scrollTop
|
|
@@ -42,11 +42,14 @@ export type TableContext<T extends TableRow<T>> = {
|
|
|
42
42
|
readonly toggleExpansion: (id: string) => void;
|
|
43
43
|
readonly nestingInset: number;
|
|
44
44
|
readonly rowHeight: number;
|
|
45
|
+
readonly scrollTo: (top?: number, left?: number) => void;
|
|
45
46
|
};
|
|
46
47
|
export declare function getTableContext<T extends TableRow<T>>(): TableContext<T>;
|
|
47
48
|
declare function $$render<T extends TableRow<T>>(): {
|
|
48
49
|
props: TableProps<T>;
|
|
49
|
-
exports: {
|
|
50
|
+
exports: {
|
|
51
|
+
scrollTo: (top?: number, left?: number) => void;
|
|
52
|
+
};
|
|
50
53
|
bindings: "b_scrollTop" | "b_columns";
|
|
51
54
|
slots: {};
|
|
52
55
|
events: {};
|
|
@@ -56,7 +59,9 @@ declare class __sveltets_Render<T extends TableRow<T>> {
|
|
|
56
59
|
events(): ReturnType<typeof $$render<T>>['events'];
|
|
57
60
|
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
58
61
|
bindings(): "b_scrollTop" | "b_columns";
|
|
59
|
-
exports(): {
|
|
62
|
+
exports(): {
|
|
63
|
+
scrollTo: (top?: number, left?: number) => void;
|
|
64
|
+
};
|
|
60
65
|
}
|
|
61
66
|
interface $$IsomorphicComponent {
|
|
62
67
|
new <T extends TableRow<T>>(options: import('svelte').ComponentConstructorOptions<ReturnType<__sveltets_Render<T>['props']>>): import('svelte').SvelteComponent<ReturnType<__sveltets_Render<T>['props']>, ReturnType<__sveltets_Render<T>['events']>, ReturnType<__sveltets_Render<T>['slots']>> & {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Table.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/table/Table.svelte.ts"],"names":[],"mappings":"AAKI,OAAO,EAAmC,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AACvE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAG9C,OAAO,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEhF,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAKzD,MAAM,WAAW,UAAU,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC;IAC7C,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC;IAC3B,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,MAAM,GAAG,SAAS,CAAC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uBAAuB;IACvB,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACvE,iDAAiD;IACjD,WAAW,CAAC,EAAE,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,CAAC,CAAA;KAAE,CAAC,CAAC,CAAC;IACpC,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,WAAW,CAAC,EAAE,UAAU,CAAC;IACzB,MAAM,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,CAAC,GAAG,EAAE,CAAC,KAAK,OAAO,CAAC;KAChC,CAAC;IACF;;OAEG;IACH,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAC;IAC/B,QAAQ,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;IAC7B;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAGD,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,QAAQ,CAAC,CAAC,CAAC,IAAI;IAC9C,QAAQ,CAAC,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,gBAAgB,CAAC;IACpE,QAAQ,CAAC,eAAe,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAC/C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"Table.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/table/Table.svelte.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,19 @@
|
|
|
36
36
|
let viewport = $state<HTMLElement>();
|
|
37
37
|
let viewport_height = $state(0);
|
|
38
38
|
|
|
39
|
+
export function scrollTo(top?: number, left?: number) {
|
|
40
|
+
if (!viewport) return;
|
|
41
|
+
if (top !== undefined) {
|
|
42
|
+
scroll_top = top;
|
|
43
|
+
viewport.scrollTop = top;
|
|
44
|
+
b_scrollTop = top;
|
|
45
|
+
}
|
|
46
|
+
if (left !== undefined) {
|
|
47
|
+
scroll_left = left;
|
|
48
|
+
viewport.scrollLeft = left;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
39
52
|
const start = $derived(Math.max(0, Math.floor(scroll_top / rowHeight) - overscan));
|
|
40
53
|
|
|
41
54
|
const end = $derived(
|
|
@@ -18,7 +18,9 @@ declare function $$render<T extends {
|
|
|
18
18
|
id: string;
|
|
19
19
|
}>(): {
|
|
20
20
|
props: Props<T>;
|
|
21
|
-
exports: {
|
|
21
|
+
exports: {
|
|
22
|
+
scrollTo: (top?: number, left?: number) => void;
|
|
23
|
+
};
|
|
22
24
|
bindings: "b_scrollTop";
|
|
23
25
|
slots: {};
|
|
24
26
|
events: {};
|
|
@@ -30,7 +32,9 @@ declare class __sveltets_Render<T extends {
|
|
|
30
32
|
events(): ReturnType<typeof $$render<T>>['events'];
|
|
31
33
|
slots(): ReturnType<typeof $$render<T>>['slots'];
|
|
32
34
|
bindings(): "b_scrollTop";
|
|
33
|
-
exports(): {
|
|
35
|
+
exports(): {
|
|
36
|
+
scrollTo: (top?: number, left?: number) => void;
|
|
37
|
+
};
|
|
34
38
|
}
|
|
35
39
|
interface $$IsomorphicComponent {
|
|
36
40
|
new <T extends {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VirtualList.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/table/VirtualList.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI9C,KAAK,KAAK,CAAC,CAAC,IAAI;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAAC,iBAAS,QAAQ,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;
|
|
1
|
+
{"version":3,"file":"VirtualList.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/components/table/VirtualList.svelte.ts"],"names":[],"mappings":"AAIA,OAAO,EAAW,KAAK,OAAO,EAAE,MAAM,QAAQ,CAAC;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAI9C,KAAK,KAAK,CAAC,CAAC,IAAI;IACZ,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,QAAQ,EAAE,OAAO,CAAC,CAAC;QAAE,GAAG,EAAE,CAAC,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IACjE,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,CAAC;CACzB,CAAC;AAAC,iBAAS,QAAQ,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;WAgGpB,KAAK,CAAC,CAAC,CAAC;aAAwB;QAAE,QAAQ,SAnE1C,MAAM,SAAS,MAAM,UAmEsC;KAAE;;;;EAA0E;AACpK,cAAM,iBAAiB,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE;IAC5C,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,MAAM,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC;IAClD,KAAK,IAAI,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAChD,QAAQ;IACR,OAAO;yBAzEkB,MAAM,SAAS,MAAM;;CA0EjD;AAED,UAAU,qBAAqB;IAC3B,KAAK,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,OAAO,EAAE,OAAO,QAAQ,EAAE,2BAA2B,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,QAAQ,EAAE,eAAe,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG;QAAE,UAAU,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAA;KAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IACnZ,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC;IAClJ,YAAY,CAAC,EAAE,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;CACjE;AACD,QAAA,MAAM,WAAW,EAAE,qBAAmC,CAAC;AACrC,KAAK,WAAW,CAAC,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,IAAI,YAAY,CAAC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;AACnF,eAAe,WAAW,CAAC"}
|
|
@@ -2,6 +2,6 @@ export { clickOutside } from './clickOutside';
|
|
|
2
2
|
export { focusTrap } from './focusTrap';
|
|
3
3
|
export { portal } from './portal';
|
|
4
4
|
export { resize } from './resize';
|
|
5
|
-
export { shortcut } from './shortcut';
|
|
5
|
+
export { shortcut } from './shortcut.svelte';
|
|
6
6
|
export { onFirstVisible } from './visible';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/actions/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -2,5 +2,5 @@ export { clickOutside } from './clickOutside';
|
|
|
2
2
|
export { focusTrap } from './focusTrap';
|
|
3
3
|
export { portal } from './portal';
|
|
4
4
|
export { resize } from './resize';
|
|
5
|
-
export { shortcut } from './shortcut';
|
|
5
|
+
export { shortcut } from './shortcut.svelte';
|
|
6
6
|
export { onFirstVisible } from './visible';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { Attachment } from 'svelte/attachments';
|
|
2
|
+
export interface ShortcutParams {
|
|
3
|
+
alt?: boolean;
|
|
4
|
+
shift?: boolean;
|
|
5
|
+
control?: boolean;
|
|
6
|
+
code: string;
|
|
7
|
+
callback: () => void;
|
|
8
|
+
}
|
|
9
|
+
export declare function shortcut(params: ShortcutParams): Attachment;
|
|
10
|
+
//# sourceMappingURL=shortcut.svelte.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shortcut.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/actions/shortcut.svelte.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,MAAM,WAAW,cAAc;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;AA4CD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,UAAU,CAQ3D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { browser } from '$app/environment';
|
|
2
|
+
import { pseudoRandomId } from '../functions';
|
|
3
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
4
|
+
const callbacks = new Map();
|
|
5
|
+
function setupListener() {
|
|
6
|
+
if (!browser)
|
|
7
|
+
return;
|
|
8
|
+
window.addEventListener('keydown', (e) => {
|
|
9
|
+
const key = mapKey({
|
|
10
|
+
code: e.code,
|
|
11
|
+
alt: e.altKey,
|
|
12
|
+
shift: e.shiftKey,
|
|
13
|
+
control: e.ctrlKey
|
|
14
|
+
});
|
|
15
|
+
const value = callbacks.get(key);
|
|
16
|
+
if (!value || value.length === 0)
|
|
17
|
+
return;
|
|
18
|
+
e.preventDefault();
|
|
19
|
+
e.stopPropagation();
|
|
20
|
+
value[value.length - 1].callback();
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
setupListener();
|
|
24
|
+
function mapKey(config) {
|
|
25
|
+
return `${config.alt ? 'alt' : ''}${config.shift ? 'shift' : ''}${config.control ? 'ctrl' : ''}${config.code}`;
|
|
26
|
+
}
|
|
27
|
+
function registerCallback(config) {
|
|
28
|
+
const key = mapKey(config);
|
|
29
|
+
callbacks.set(key, [...(callbacks.get(key) || []), config]);
|
|
30
|
+
}
|
|
31
|
+
function unregisterCallback(config) {
|
|
32
|
+
const key = mapKey(config);
|
|
33
|
+
callbacks.set(key, callbacks.get(key)?.filter((c) => c.id !== config.id) ?? []);
|
|
34
|
+
}
|
|
35
|
+
export function shortcut(params) {
|
|
36
|
+
const id = pseudoRandomId();
|
|
37
|
+
return (_node) => {
|
|
38
|
+
registerCallback({ ...params, id });
|
|
39
|
+
return () => {
|
|
40
|
+
unregisterCallback({ ...params, id });
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
}
|
package/package.json
CHANGED
|
@@ -48,6 +48,7 @@
|
|
|
48
48
|
readonly toggleExpansion: (id: string) => void;
|
|
49
49
|
readonly nestingInset: number;
|
|
50
50
|
readonly rowHeight: number;
|
|
51
|
+
readonly scrollTo: (top?: number, left?: number) => void;
|
|
51
52
|
};
|
|
52
53
|
|
|
53
54
|
function setTableContext<T extends TableRow<T>>(context: TableContext<T>) {
|
|
@@ -88,6 +89,7 @@
|
|
|
88
89
|
else expanded.add(id);
|
|
89
90
|
}
|
|
90
91
|
|
|
92
|
+
// eslint-disable-next-line svelte/no-unnecessary-state-wrap
|
|
91
93
|
let hidden = $state(new SvelteSet<string>());
|
|
92
94
|
const searchResult = $derived.by(() => {
|
|
93
95
|
if (!search)
|
|
@@ -174,11 +176,21 @@
|
|
|
174
176
|
},
|
|
175
177
|
get rowHeight() {
|
|
176
178
|
return rowHeight;
|
|
179
|
+
},
|
|
180
|
+
scrollTo(top?: number, left?: number) {
|
|
181
|
+
list?.scrollTo(top, left);
|
|
177
182
|
}
|
|
178
183
|
});
|
|
184
|
+
|
|
185
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
186
|
+
let list = $state<VirtualList<any>>();
|
|
187
|
+
export function scrollTo(top?: number, left?: number) {
|
|
188
|
+
list?.scrollTo(top, left);
|
|
189
|
+
}
|
|
179
190
|
</script>
|
|
180
191
|
|
|
181
192
|
<VirtualList
|
|
193
|
+
bind:this={list}
|
|
182
194
|
data={results.entries}
|
|
183
195
|
class={twMerge(clsx(['flex flex-col overflow-hidden border-transparent', clazz]))}
|
|
184
196
|
bind:b_scrollTop
|
|
@@ -36,6 +36,19 @@
|
|
|
36
36
|
let viewport = $state<HTMLElement>();
|
|
37
37
|
let viewport_height = $state(0);
|
|
38
38
|
|
|
39
|
+
export function scrollTo(top?: number, left?: number) {
|
|
40
|
+
if (!viewport) return;
|
|
41
|
+
if (top !== undefined) {
|
|
42
|
+
scroll_top = top;
|
|
43
|
+
viewport.scrollTop = top;
|
|
44
|
+
b_scrollTop = top;
|
|
45
|
+
}
|
|
46
|
+
if (left !== undefined) {
|
|
47
|
+
scroll_left = left;
|
|
48
|
+
viewport.scrollLeft = left;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
39
52
|
const start = $derived(Math.max(0, Math.floor(scroll_top / rowHeight) - overscan));
|
|
40
53
|
|
|
41
54
|
const end = $derived(
|
|
@@ -2,5 +2,5 @@ export { clickOutside } from './clickOutside';
|
|
|
2
2
|
export { focusTrap } from './focusTrap';
|
|
3
3
|
export { portal } from './portal';
|
|
4
4
|
export { resize } from './resize';
|
|
5
|
-
export { shortcut } from './shortcut';
|
|
5
|
+
export { shortcut } from './shortcut.svelte';
|
|
6
6
|
export { onFirstVisible } from './visible';
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { browser } from '$app/environment';
|
|
2
|
+
import type { Attachment } from 'svelte/attachments';
|
|
3
|
+
import { pseudoRandomId } from '../functions';
|
|
4
|
+
|
|
5
|
+
export interface ShortcutParams {
|
|
6
|
+
alt?: boolean;
|
|
7
|
+
shift?: boolean;
|
|
8
|
+
control?: boolean;
|
|
9
|
+
code: string;
|
|
10
|
+
callback: () => void;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
// eslint-disable-next-line svelte/prefer-svelte-reactivity
|
|
14
|
+
const callbacks: Map<string, IdShortcutParams[]> = new Map();
|
|
15
|
+
|
|
16
|
+
function setupListener() {
|
|
17
|
+
if (!browser) return;
|
|
18
|
+
window.addEventListener('keydown', (e) => {
|
|
19
|
+
const key = mapKey({
|
|
20
|
+
code: e.code,
|
|
21
|
+
alt: e.altKey,
|
|
22
|
+
shift: e.shiftKey,
|
|
23
|
+
control: e.ctrlKey
|
|
24
|
+
});
|
|
25
|
+
const value = callbacks.get(key);
|
|
26
|
+
if (!value || value.length === 0) return;
|
|
27
|
+
e.preventDefault();
|
|
28
|
+
e.stopPropagation();
|
|
29
|
+
value[value.length - 1].callback();
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
setupListener();
|
|
34
|
+
|
|
35
|
+
function mapKey(config: Omit<ShortcutParams, 'callback'>) {
|
|
36
|
+
return `${config.alt ? 'alt' : ''}${config.shift ? 'shift' : ''}${
|
|
37
|
+
config.control ? 'ctrl' : ''
|
|
38
|
+
}${config.code}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function registerCallback(config: IdShortcutParams) {
|
|
42
|
+
const key = mapKey(config);
|
|
43
|
+
callbacks.set(key, [...(callbacks.get(key) || []), config]);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
function unregisterCallback(config: IdShortcutParams) {
|
|
47
|
+
const key = mapKey(config);
|
|
48
|
+
callbacks.set(key, callbacks.get(key)?.filter((c) => c.id !== config.id) ?? []);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
interface IdShortcutParams extends ShortcutParams {
|
|
52
|
+
id: string;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function shortcut(params: ShortcutParams): Attachment {
|
|
56
|
+
const id = pseudoRandomId();
|
|
57
|
+
return (_node: Element) => {
|
|
58
|
+
registerCallback({ ...params, id });
|
|
59
|
+
return () => {
|
|
60
|
+
unregisterCallback({ ...params, id });
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare const shortcut: (node: HTMLElement, params?: {
|
|
2
|
-
alt?: boolean;
|
|
3
|
-
shift?: boolean;
|
|
4
|
-
control?: boolean;
|
|
5
|
-
code: string;
|
|
6
|
-
callback: () => void;
|
|
7
|
-
}) => {
|
|
8
|
-
update: () => void;
|
|
9
|
-
destroy: () => void;
|
|
10
|
-
} | undefined;
|
|
11
|
-
//# sourceMappingURL=shortcut.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shortcut.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/actions/shortcut.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,GACjB,MAAM,WAAW,EACjB,SAAS;IACL,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,IAAI,CAAC;CACxB;;;aA0BJ,CAAC"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
export const shortcut = (node, params) => {
|
|
2
|
-
if (!params)
|
|
3
|
-
return;
|
|
4
|
-
let handler;
|
|
5
|
-
const removeHandler = () => window.removeEventListener('keydown', handler);
|
|
6
|
-
const setHandler = () => {
|
|
7
|
-
removeHandler();
|
|
8
|
-
handler = (e) => {
|
|
9
|
-
if (!!params.alt != e.altKey ||
|
|
10
|
-
!!params.shift != e.shiftKey ||
|
|
11
|
-
!!params.control != (e.ctrlKey || e.metaKey) ||
|
|
12
|
-
params.code != e.code)
|
|
13
|
-
return;
|
|
14
|
-
e.preventDefault();
|
|
15
|
-
e.stopPropagation();
|
|
16
|
-
params.callback();
|
|
17
|
-
};
|
|
18
|
-
window.addEventListener('keydown', handler);
|
|
19
|
-
};
|
|
20
|
-
setHandler();
|
|
21
|
-
return {
|
|
22
|
-
update: setHandler,
|
|
23
|
-
destroy: removeHandler
|
|
24
|
-
};
|
|
25
|
-
};
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
export const shortcut = (
|
|
2
|
-
node: HTMLElement,
|
|
3
|
-
params?: {
|
|
4
|
-
alt?: boolean;
|
|
5
|
-
shift?: boolean;
|
|
6
|
-
control?: boolean;
|
|
7
|
-
code: string;
|
|
8
|
-
callback: () => void;
|
|
9
|
-
}
|
|
10
|
-
) => {
|
|
11
|
-
if (!params) return;
|
|
12
|
-
let handler: (e: KeyboardEvent) => void;
|
|
13
|
-
const removeHandler = () => window.removeEventListener('keydown', handler);
|
|
14
|
-
const setHandler = () => {
|
|
15
|
-
removeHandler();
|
|
16
|
-
handler = (e) => {
|
|
17
|
-
if (
|
|
18
|
-
!!params.alt != e.altKey ||
|
|
19
|
-
!!params.shift != e.shiftKey ||
|
|
20
|
-
!!params.control != (e.ctrlKey || e.metaKey) ||
|
|
21
|
-
params.code != e.code
|
|
22
|
-
)
|
|
23
|
-
return;
|
|
24
|
-
e.preventDefault();
|
|
25
|
-
e.stopPropagation();
|
|
26
|
-
params.callback();
|
|
27
|
-
};
|
|
28
|
-
window.addEventListener('keydown', handler);
|
|
29
|
-
};
|
|
30
|
-
setHandler();
|
|
31
|
-
return {
|
|
32
|
-
update: setHandler,
|
|
33
|
-
destroy: removeHandler
|
|
34
|
-
};
|
|
35
|
-
};
|