svelte-tiler 0.3.0 → 0.4.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/context.d.ts +5 -24
- package/dist/context.js +9 -10
- package/dist/debug.svelte +2 -5
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/panel.svelte +2 -5
- package/dist/provider.svelte +8 -0
- package/dist/provider.svelte.d.ts +8 -0
- package/dist/render.svelte +10 -22
- package/dist/tiler.svelte +10 -15
- package/dist/tiles/leaf.svelte +19 -40
- package/dist/tiles/split.svelte +356 -414
- package/dist/tiles/split.svelte.d.ts +57 -1
- package/dist/tiles/tabs.svelte +179 -280
- package/dist/tiles/tabs.svelte.d.ts +12 -1
- package/package.json +12 -12
package/dist/context.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
1
2
|
import { DndContext } from './shared/dnd.svelte.ts';
|
|
2
3
|
import type { Tile, TileComponent, TileInsertData, Tiles, TileType } from './model.js';
|
|
3
4
|
export declare const getTilerContext: () => TilerContext, setTilerContext: (context: TilerContext) => TilerContext;
|
|
@@ -10,40 +11,20 @@ export interface TileDefinition<T extends TileType> {
|
|
|
10
11
|
export type TileDefinitions = {
|
|
11
12
|
[T in TileType]: TileDefinition<T>;
|
|
12
13
|
};
|
|
13
|
-
export type TileEffects = {
|
|
14
|
-
[T in TileType]?: (tile: Tiles[T]) => void | (() => void);
|
|
15
|
-
};
|
|
16
14
|
export interface TilerContextOptions {
|
|
17
15
|
definitions: TileDefinitions;
|
|
18
16
|
dnd?: DndContext<Tile>;
|
|
19
|
-
effects?: TileEffects;
|
|
20
17
|
}
|
|
21
18
|
export declare class TilerContext {
|
|
22
19
|
protected definitions: TileDefinitions;
|
|
23
|
-
protected effects: TileEffects;
|
|
24
20
|
protected updateRootFn: ((tile: Tile) => void) | undefined;
|
|
25
21
|
protected registry: FinalizationRegistry<string>;
|
|
26
|
-
protected tiles:
|
|
22
|
+
protected tiles: SvelteMap<string, WeakRef<Tile>>;
|
|
27
23
|
protected parents: WeakMap<Tile, Tile>;
|
|
28
24
|
readonly dnd: DndContext<Tile>;
|
|
29
25
|
constructor(options: TilerContextOptions);
|
|
30
|
-
registerTile(tile: Tile, parent: Tile | ((tile: Tile) => void)): void;
|
|
31
|
-
|
|
32
|
-
name: string;
|
|
33
|
-
}) => void | (() => void)) | ((tile: import("./model.js").TileBase<"split"> & {
|
|
34
|
-
constraints: Array<import("./shared/constraints.ts").Constraint[]>;
|
|
35
|
-
weights: number[];
|
|
36
|
-
direction: import("./shared/spatial.ts").Direction;
|
|
37
|
-
resizer?: string;
|
|
38
|
-
gapPx: number;
|
|
39
|
-
}) => void | (() => void)) | ((tile: import("./model.js").TileBase<"tabs"> & {
|
|
40
|
-
titles: string[];
|
|
41
|
-
selectedTab: number;
|
|
42
|
-
headersDirection: import("./tiles/tabs.svelte.ts").HeadersDirection;
|
|
43
|
-
actions?: string;
|
|
44
|
-
tabHeader?: string;
|
|
45
|
-
empty?: string;
|
|
46
|
-
}) => void | (() => void)) | undefined;
|
|
26
|
+
registerTile(tile: Tile, parent: Tile | ((tile: Tile) => void)): (() => void) | void;
|
|
27
|
+
getTileById(tileId: string): Tile | undefined;
|
|
47
28
|
getTileComponent(tile: Tile): TileComponent<"leaf"> | TileComponent<"split"> | TileComponent<"tabs">;
|
|
48
29
|
replace(tile: Tile | undefined, replace: Tile): void;
|
|
49
30
|
replaceTile(tileId: string | undefined, replace: Tile): void;
|
|
@@ -53,5 +34,5 @@ export declare class TilerContext {
|
|
|
53
34
|
removeChildFromTile(tileId: string, index: number): void;
|
|
54
35
|
remove(tile: Tile): void;
|
|
55
36
|
removeTile(tileId: string): void;
|
|
56
|
-
protected
|
|
37
|
+
protected getTileByIdOrThrow(tileId: string): Tile;
|
|
57
38
|
}
|
package/dist/context.js
CHANGED
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
import { createContext } from 'svelte';
|
|
2
|
+
import { SvelteMap } from 'svelte/reactivity';
|
|
2
3
|
import { DndContext } from "./shared/dnd.svelte.js";
|
|
3
4
|
export const [getTilerContext, setTilerContext] = createContext();
|
|
4
5
|
export class TilerContext {
|
|
5
6
|
definitions;
|
|
6
|
-
effects;
|
|
7
7
|
updateRootFn;
|
|
8
8
|
registry = new FinalizationRegistry((id) => {
|
|
9
9
|
this.tiles.delete(id);
|
|
10
10
|
});
|
|
11
|
-
tiles = new
|
|
11
|
+
tiles = new SvelteMap();
|
|
12
12
|
parents = new WeakMap();
|
|
13
13
|
dnd;
|
|
14
14
|
constructor(options) {
|
|
15
15
|
this.definitions = options.definitions;
|
|
16
16
|
this.dnd = options.dnd ?? new DndContext();
|
|
17
|
-
this.effects = options.effects ?? {};
|
|
18
17
|
}
|
|
19
18
|
registerTile(tile, parent) {
|
|
20
19
|
this.tiles.set(tile.id, new WeakRef(tile));
|
|
@@ -27,8 +26,8 @@ export class TilerContext {
|
|
|
27
26
|
this.parents.set(tile, parent);
|
|
28
27
|
}
|
|
29
28
|
}
|
|
30
|
-
|
|
31
|
-
return this.
|
|
29
|
+
getTileById(tileId) {
|
|
30
|
+
return this.tiles.get(tileId)?.deref();
|
|
32
31
|
}
|
|
33
32
|
getTileComponent(tile) {
|
|
34
33
|
return this.definitions[tile.type].default;
|
|
@@ -48,14 +47,14 @@ export class TilerContext {
|
|
|
48
47
|
this.updateRootFn?.(replace);
|
|
49
48
|
}
|
|
50
49
|
replaceTile(tileId, replace) {
|
|
51
|
-
const tile = tileId && this.
|
|
50
|
+
const tile = tileId && this.getTileByIdOrThrow(tileId);
|
|
52
51
|
this.replace(tile || undefined, replace);
|
|
53
52
|
}
|
|
54
53
|
insertInto(tile, index, data) {
|
|
55
54
|
this.definitions[tile.type].onInsert(this, tile, index, data);
|
|
56
55
|
}
|
|
57
56
|
insertIntoTile(tileId, type, index, data) {
|
|
58
|
-
const tile = this.
|
|
57
|
+
const tile = this.getTileByIdOrThrow(tileId);
|
|
59
58
|
if (tile.type !== type) {
|
|
60
59
|
throw new Error(`Tile type mismatch: expected "${type}", but got "${tile.type}"`);
|
|
61
60
|
}
|
|
@@ -65,7 +64,7 @@ export class TilerContext {
|
|
|
65
64
|
this.definitions[tile.type].onRemoveChild(this, tile, index);
|
|
66
65
|
}
|
|
67
66
|
removeChildFromTile(tileId, index) {
|
|
68
|
-
this.removeChildFrom(this.
|
|
67
|
+
this.removeChildFrom(this.getTileByIdOrThrow(tileId), index);
|
|
69
68
|
}
|
|
70
69
|
remove(tile) {
|
|
71
70
|
const parent = this.parents.get(tile);
|
|
@@ -80,9 +79,9 @@ export class TilerContext {
|
|
|
80
79
|
this.removeChildFrom(parent, index);
|
|
81
80
|
}
|
|
82
81
|
removeTile(tileId) {
|
|
83
|
-
this.remove(this.
|
|
82
|
+
this.remove(this.getTileByIdOrThrow(tileId));
|
|
84
83
|
}
|
|
85
|
-
|
|
84
|
+
getTileByIdOrThrow(tileId) {
|
|
86
85
|
const tile = this.tiles.get(tileId)?.deref();
|
|
87
86
|
if (tile === undefined) {
|
|
88
87
|
throw new Error(`Unable to find tile with "${tileId}" id`);
|
package/dist/debug.svelte
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
import Self from './debug.svelte';
|
|
4
|
-
|
|
5
|
-
const { tile, level = 0 }: { tile: Tile; level?: number } = $props();
|
|
1
|
+
<script lang="ts">import Self from "./debug.svelte";
|
|
2
|
+
const { tile, level = 0 } = $props();
|
|
6
3
|
</script>
|
|
7
4
|
|
|
8
5
|
<div style="padding-left: {level * 12}px;">{tile.type} ({tile.id})</div>
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/panel.svelte
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
import type { Tile } from './model.js';
|
|
4
|
-
|
|
5
|
-
let { layout = $bindable() }: { layout: Tile | undefined } = $props();
|
|
1
|
+
<script lang="ts">import Render from "./render.svelte";
|
|
2
|
+
let { layout = $bindable() } = $props();
|
|
6
3
|
</script>
|
|
7
4
|
|
|
8
5
|
{#if layout}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { Snippet } from 'svelte';
|
|
2
|
+
type $$ComponentProps = {
|
|
3
|
+
setContext: () => void;
|
|
4
|
+
children: Snippet;
|
|
5
|
+
};
|
|
6
|
+
declare const Provider: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
7
|
+
type Provider = ReturnType<typeof Provider>;
|
|
8
|
+
export default Provider;
|
package/dist/render.svelte
CHANGED
|
@@ -1,25 +1,13 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
tile: Tile;
|
|
12
|
-
parent: Tile | undefined;
|
|
13
|
-
index: number;
|
|
14
|
-
} = $props();
|
|
15
|
-
|
|
16
|
-
const ctx = getTilerContext();
|
|
17
|
-
|
|
18
|
-
$effect(() => ctx.registerTile(tile, parent ?? ((t) => (parent = t))));
|
|
19
|
-
|
|
20
|
-
$effect(() => ctx.getTileEffect(tile)?.(tile as never));
|
|
21
|
-
|
|
22
|
-
const TileComponent = $derived(ctx.getTileComponent(tile));
|
|
1
|
+
<script lang="ts">import { getTilerContext } from "./context.js";
|
|
2
|
+
import Self from "./render.svelte";
|
|
3
|
+
let {
|
|
4
|
+
tile = $bindable(),
|
|
5
|
+
parent = $bindable(),
|
|
6
|
+
index
|
|
7
|
+
} = $props();
|
|
8
|
+
const ctx = getTilerContext();
|
|
9
|
+
$effect(() => ctx.registerTile(tile, parent ?? ((t) => parent = t)));
|
|
10
|
+
const TileComponent = $derived(ctx.getTileComponent(tile));
|
|
23
11
|
</script>
|
|
24
12
|
|
|
25
13
|
{#snippet child(index: number)}
|
package/dist/tiler.svelte
CHANGED
|
@@ -1,18 +1,13 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
layout = $bindable(),
|
|
12
|
-
...rest
|
|
13
|
-
}: { layout: Tile | undefined } & TilerContextOptions = $props();
|
|
14
|
-
|
|
15
|
-
setTilerContext(new TilerContext(rest));
|
|
1
|
+
<script lang="ts">import {
|
|
2
|
+
setTilerContext,
|
|
3
|
+
TilerContext
|
|
4
|
+
} from "./context.js";
|
|
5
|
+
import Panel from "./panel.svelte";
|
|
6
|
+
let {
|
|
7
|
+
layout = $bindable(),
|
|
8
|
+
...rest
|
|
9
|
+
} = $props();
|
|
10
|
+
setTilerContext(new TilerContext(rest));
|
|
16
11
|
</script>
|
|
17
12
|
|
|
18
13
|
<Panel bind:layout />
|
package/dist/tiles/leaf.svelte
CHANGED
|
@@ -1,45 +1,24 @@
|
|
|
1
|
-
<script lang="ts" module>
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
>;
|
|
19
|
-
|
|
20
|
-
const [getContext, setContext] = createContext<LeafContext>();
|
|
21
|
-
|
|
22
|
-
export function setup<N extends string>(leafs: LeafContext<N>) {
|
|
23
|
-
setContext(leafs);
|
|
24
|
-
return (name: N): Tiles['leaf'] => ({
|
|
25
|
-
id: crypto.randomUUID(),
|
|
26
|
-
type: 'leaf',
|
|
27
|
-
name,
|
|
28
|
-
children: [],
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export function onRemoveChild() {}
|
|
33
|
-
|
|
34
|
-
export function onClear() {}
|
|
35
|
-
|
|
36
|
-
export function onInsert() {}
|
|
1
|
+
<script lang="ts" module>import { createContext } from "svelte";
|
|
2
|
+
const [getContext, setContext] = createContext();
|
|
3
|
+
export function setup(leafs) {
|
|
4
|
+
setContext(leafs);
|
|
5
|
+
return (name) => ({
|
|
6
|
+
id: crypto.randomUUID(),
|
|
7
|
+
type: "leaf",
|
|
8
|
+
name,
|
|
9
|
+
children: []
|
|
10
|
+
});
|
|
11
|
+
}
|
|
12
|
+
export function onRemoveChild() {
|
|
13
|
+
}
|
|
14
|
+
export function onClear() {
|
|
15
|
+
}
|
|
16
|
+
export function onInsert() {
|
|
17
|
+
}
|
|
37
18
|
</script>
|
|
38
19
|
|
|
39
|
-
<script lang="ts">
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
let { tile = $bindable(), index, parent }: TileProps<'leaf'> = $props();
|
|
20
|
+
<script lang="ts">const leafCtx = getContext();
|
|
21
|
+
let { tile = $bindable(), index, parent } = $props();
|
|
43
22
|
</script>
|
|
44
23
|
|
|
45
24
|
{@render leafCtx.get(tile.name)?.(tile, index, parent)}
|