@zag-js/splitter 0.10.5 → 0.11.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/dist/index.d.mts +144 -0
- package/dist/index.d.ts +144 -4
- package/dist/index.js +670 -8
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +646 -3
- package/dist/index.mjs.map +1 -0
- package/package.json +9 -9
- package/dist/splitter.anatomy.d.ts +0 -3
- package/dist/splitter.anatomy.js +0 -11
- package/dist/splitter.anatomy.mjs +0 -6
- package/dist/splitter.connect.d.ts +0 -45
- package/dist/splitter.connect.js +0 -185
- package/dist/splitter.connect.mjs +0 -181
- package/dist/splitter.dom.d.ts +0 -38
- package/dist/splitter.dom.js +0 -62
- package/dist/splitter.dom.mjs +0 -58
- package/dist/splitter.machine.d.ts +0 -3
- package/dist/splitter.machine.js +0 -285
- package/dist/splitter.machine.mjs +0 -281
- package/dist/splitter.types.d.ts +0 -92
- package/dist/splitter.utils.d.ts +0 -49
- package/dist/splitter.utils.js +0 -130
- package/dist/splitter.utils.mjs +0 -122
package/dist/splitter.types.d.ts
DELETED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import type { StateMachine as S } from "@zag-js/core";
|
|
2
|
-
import type { CommonProperties, Context, DirectionProperty, RequiredBy } from "@zag-js/types";
|
|
3
|
-
export type PanelId = string | number;
|
|
4
|
-
type PanelSizeData = {
|
|
5
|
-
id: PanelId;
|
|
6
|
-
size?: number;
|
|
7
|
-
minSize?: number;
|
|
8
|
-
maxSize?: number;
|
|
9
|
-
};
|
|
10
|
-
type ResizeDetails = {
|
|
11
|
-
size: PanelSizeData[];
|
|
12
|
-
activeHandleId: string | null;
|
|
13
|
-
};
|
|
14
|
-
type ElementIds = Partial<{
|
|
15
|
-
root: string;
|
|
16
|
-
resizeTrigger(id: string): string;
|
|
17
|
-
toggleTrigger(id: string): string;
|
|
18
|
-
label(id: string): string;
|
|
19
|
-
panel(id: string | number): string;
|
|
20
|
-
}>;
|
|
21
|
-
type PublicContext = DirectionProperty & CommonProperties & {
|
|
22
|
-
/**
|
|
23
|
-
* The orientation of the splitter. Can be `horizontal` or `vertical`
|
|
24
|
-
*/
|
|
25
|
-
orientation: "horizontal" | "vertical";
|
|
26
|
-
/**
|
|
27
|
-
* The size data of the panels
|
|
28
|
-
*/
|
|
29
|
-
size: PanelSizeData[];
|
|
30
|
-
/**
|
|
31
|
-
* Function called when the splitter is resized.
|
|
32
|
-
*/
|
|
33
|
-
onResize?: (details: ResizeDetails) => void;
|
|
34
|
-
/**
|
|
35
|
-
* Function called when the splitter resize starts.
|
|
36
|
-
*/
|
|
37
|
-
onResizeStart?: (details: ResizeDetails) => void;
|
|
38
|
-
/**
|
|
39
|
-
* Function called when the splitter resize ends.
|
|
40
|
-
*/
|
|
41
|
-
onResizeEnd?: (details: ResizeDetails) => void;
|
|
42
|
-
/**
|
|
43
|
-
* The ids of the elements in the splitter. Useful for composition.
|
|
44
|
-
*/
|
|
45
|
-
ids?: ElementIds;
|
|
46
|
-
};
|
|
47
|
-
export type UserDefinedContext = RequiredBy<PublicContext, "id">;
|
|
48
|
-
export type NormalizedPanelData = Array<Required<PanelSizeData> & {
|
|
49
|
-
remainingSize: number;
|
|
50
|
-
minSize: number;
|
|
51
|
-
maxSize: number;
|
|
52
|
-
start: number;
|
|
53
|
-
end: number;
|
|
54
|
-
}>;
|
|
55
|
-
type ComputedContext = Readonly<{
|
|
56
|
-
isHorizontal: boolean;
|
|
57
|
-
panels: NormalizedPanelData;
|
|
58
|
-
activeResizeBounds?: {
|
|
59
|
-
min: number;
|
|
60
|
-
max: number;
|
|
61
|
-
};
|
|
62
|
-
activeResizePanels?: {
|
|
63
|
-
before: PanelSizeData;
|
|
64
|
-
after: PanelSizeData;
|
|
65
|
-
};
|
|
66
|
-
}>;
|
|
67
|
-
type PrivateContext = Context<{
|
|
68
|
-
activeResizeId: string | null;
|
|
69
|
-
previousPanels: NormalizedPanelData;
|
|
70
|
-
activeResizeState: {
|
|
71
|
-
isAtMin: boolean;
|
|
72
|
-
isAtMax: boolean;
|
|
73
|
-
};
|
|
74
|
-
initialSize: Array<Required<Pick<PanelSizeData, "id" | "size">>>;
|
|
75
|
-
}>;
|
|
76
|
-
export type MachineContext = PublicContext & ComputedContext & PrivateContext;
|
|
77
|
-
export type MachineState = {
|
|
78
|
-
value: "idle" | "hover:temp" | "hover" | "dragging" | "focused";
|
|
79
|
-
tags: "focus";
|
|
80
|
-
};
|
|
81
|
-
export type State = S.State<MachineContext, MachineState>;
|
|
82
|
-
export type Send = S.Send<S.AnyEventObject>;
|
|
83
|
-
export type PanelProps = {
|
|
84
|
-
id: PanelId;
|
|
85
|
-
snapSize?: number;
|
|
86
|
-
};
|
|
87
|
-
export type ResizeTriggerProps = {
|
|
88
|
-
id: `${PanelId}:${PanelId}`;
|
|
89
|
-
step?: number;
|
|
90
|
-
disabled?: boolean;
|
|
91
|
-
};
|
|
92
|
-
export {};
|
package/dist/splitter.utils.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { PanelId, MachineContext as Ctx, NormalizedPanelData } from './splitter.types';
|
|
2
|
-
export declare function getNormalizedPanels(ctx: Ctx): NormalizedPanelData;
|
|
3
|
-
export declare function getHandlePanels(ctx: Ctx, id?: string | null): {
|
|
4
|
-
before: {
|
|
5
|
-
index: number;
|
|
6
|
-
id: PanelId;
|
|
7
|
-
size: number;
|
|
8
|
-
minSize: number;
|
|
9
|
-
maxSize: number;
|
|
10
|
-
remainingSize: number;
|
|
11
|
-
start: number;
|
|
12
|
-
end: number;
|
|
13
|
-
};
|
|
14
|
-
after: {
|
|
15
|
-
index: number;
|
|
16
|
-
id: PanelId;
|
|
17
|
-
size: number;
|
|
18
|
-
minSize: number;
|
|
19
|
-
maxSize: number;
|
|
20
|
-
remainingSize: number;
|
|
21
|
-
start: number;
|
|
22
|
-
end: number;
|
|
23
|
-
};
|
|
24
|
-
} | undefined;
|
|
25
|
-
export declare function getHandleBounds(ctx: Ctx, id?: string | null): {
|
|
26
|
-
min: number;
|
|
27
|
-
max: number;
|
|
28
|
-
} | undefined;
|
|
29
|
-
export declare function getPanelBounds(ctx: Ctx, id?: string | null): {
|
|
30
|
-
before: {
|
|
31
|
-
index: number;
|
|
32
|
-
min: number;
|
|
33
|
-
max: number;
|
|
34
|
-
isAtMin: boolean;
|
|
35
|
-
isAtMax: boolean;
|
|
36
|
-
up(step: number): number;
|
|
37
|
-
down(step: number): number;
|
|
38
|
-
};
|
|
39
|
-
after: {
|
|
40
|
-
index: number;
|
|
41
|
-
min: number;
|
|
42
|
-
max: number;
|
|
43
|
-
isAtMin: boolean;
|
|
44
|
-
isAtMax: boolean;
|
|
45
|
-
up(step: number): number;
|
|
46
|
-
down(step: number): number;
|
|
47
|
-
};
|
|
48
|
-
} | undefined;
|
|
49
|
-
export declare function clamp(value: number, min: number, max: number): number;
|
package/dist/splitter.utils.js
DELETED
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
-
|
|
5
|
-
function validateSize(key, size) {
|
|
6
|
-
if (Math.floor(size) > 100) {
|
|
7
|
-
throw new Error(`Total ${key} of panels cannot be greater than 100`);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
function getNormalizedPanels(ctx) {
|
|
11
|
-
let numOfPanelsWithoutSize = 0;
|
|
12
|
-
let totalSize = 0;
|
|
13
|
-
let totalMinSize = 0;
|
|
14
|
-
const panels = ctx.size.map((panel) => {
|
|
15
|
-
const minSize = panel.minSize ?? 0;
|
|
16
|
-
const maxSize = panel.maxSize ?? 100;
|
|
17
|
-
totalMinSize += minSize;
|
|
18
|
-
if (panel.size == null) {
|
|
19
|
-
numOfPanelsWithoutSize++;
|
|
20
|
-
} else {
|
|
21
|
-
totalSize += panel.size;
|
|
22
|
-
}
|
|
23
|
-
return {
|
|
24
|
-
...panel,
|
|
25
|
-
minSize,
|
|
26
|
-
maxSize
|
|
27
|
-
};
|
|
28
|
-
});
|
|
29
|
-
validateSize("minSize", totalMinSize);
|
|
30
|
-
validateSize("size", totalSize);
|
|
31
|
-
let end = 0;
|
|
32
|
-
let remainingSize = 0;
|
|
33
|
-
const result = panels.map((panel) => {
|
|
34
|
-
let start = end;
|
|
35
|
-
if (panel.size != null) {
|
|
36
|
-
end += panel.size;
|
|
37
|
-
remainingSize = panel.size - panel.minSize;
|
|
38
|
-
return {
|
|
39
|
-
...panel,
|
|
40
|
-
start,
|
|
41
|
-
end,
|
|
42
|
-
remainingSize
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
const size = (100 - totalSize) / numOfPanelsWithoutSize;
|
|
46
|
-
end += size;
|
|
47
|
-
remainingSize = size - panel.minSize;
|
|
48
|
-
return { ...panel, size, start, end, remainingSize };
|
|
49
|
-
});
|
|
50
|
-
return result;
|
|
51
|
-
}
|
|
52
|
-
function getHandlePanels(ctx, id = ctx.activeResizeId) {
|
|
53
|
-
const [beforeId, afterId] = id?.split(":") ?? [];
|
|
54
|
-
if (!beforeId || !afterId)
|
|
55
|
-
return;
|
|
56
|
-
const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId);
|
|
57
|
-
const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId);
|
|
58
|
-
if (beforeIndex === -1 || afterIndex === -1)
|
|
59
|
-
return;
|
|
60
|
-
const before = ctx.previousPanels[beforeIndex];
|
|
61
|
-
const after = ctx.previousPanels[afterIndex];
|
|
62
|
-
return {
|
|
63
|
-
before: {
|
|
64
|
-
...before,
|
|
65
|
-
index: beforeIndex
|
|
66
|
-
},
|
|
67
|
-
after: {
|
|
68
|
-
...after,
|
|
69
|
-
index: afterIndex
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
function getHandleBounds(ctx, id = ctx.activeResizeId) {
|
|
74
|
-
const panels = getHandlePanels(ctx, id);
|
|
75
|
-
if (!panels)
|
|
76
|
-
return;
|
|
77
|
-
const { before, after } = panels;
|
|
78
|
-
return {
|
|
79
|
-
min: Math.max(before.start + before.minSize, after.end - after.maxSize),
|
|
80
|
-
max: Math.min(after.end - after.minSize, before.maxSize + before.start)
|
|
81
|
-
};
|
|
82
|
-
}
|
|
83
|
-
function getPanelBounds(ctx, id) {
|
|
84
|
-
const bounds = getHandleBounds(ctx, id);
|
|
85
|
-
const panels = getHandlePanels(ctx, id);
|
|
86
|
-
if (!bounds || !panels)
|
|
87
|
-
return;
|
|
88
|
-
const { before, after } = panels;
|
|
89
|
-
const beforeMin = Math.abs(before.start - bounds.min);
|
|
90
|
-
const afterMin = after.size + (before.size - beforeMin);
|
|
91
|
-
const beforeMax = Math.abs(before.start - bounds.max);
|
|
92
|
-
const afterMax = after.size - (beforeMax - before.size);
|
|
93
|
-
return {
|
|
94
|
-
before: {
|
|
95
|
-
index: before.index,
|
|
96
|
-
min: beforeMin,
|
|
97
|
-
max: beforeMax,
|
|
98
|
-
isAtMin: beforeMin === before.size,
|
|
99
|
-
isAtMax: beforeMax === before.size,
|
|
100
|
-
up(step) {
|
|
101
|
-
return Math.min(before.size + step, beforeMax);
|
|
102
|
-
},
|
|
103
|
-
down(step) {
|
|
104
|
-
return Math.max(before.size - step, beforeMin);
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
after: {
|
|
108
|
-
index: after.index,
|
|
109
|
-
min: afterMin,
|
|
110
|
-
max: afterMax,
|
|
111
|
-
isAtMin: afterMin === after.size,
|
|
112
|
-
isAtMax: afterMax === after.size,
|
|
113
|
-
up(step) {
|
|
114
|
-
return Math.min(after.size + step, afterMin);
|
|
115
|
-
},
|
|
116
|
-
down(step) {
|
|
117
|
-
return Math.max(after.size - step, afterMax);
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
};
|
|
121
|
-
}
|
|
122
|
-
function clamp(value, min, max) {
|
|
123
|
-
return Math.min(Math.max(value, min), max);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
exports.clamp = clamp;
|
|
127
|
-
exports.getHandleBounds = getHandleBounds;
|
|
128
|
-
exports.getHandlePanels = getHandlePanels;
|
|
129
|
-
exports.getNormalizedPanels = getNormalizedPanels;
|
|
130
|
-
exports.getPanelBounds = getPanelBounds;
|
package/dist/splitter.utils.mjs
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
function validateSize(key, size) {
|
|
2
|
-
if (Math.floor(size) > 100) {
|
|
3
|
-
throw new Error(`Total ${key} of panels cannot be greater than 100`);
|
|
4
|
-
}
|
|
5
|
-
}
|
|
6
|
-
function getNormalizedPanels(ctx) {
|
|
7
|
-
let numOfPanelsWithoutSize = 0;
|
|
8
|
-
let totalSize = 0;
|
|
9
|
-
let totalMinSize = 0;
|
|
10
|
-
const panels = ctx.size.map((panel) => {
|
|
11
|
-
const minSize = panel.minSize ?? 0;
|
|
12
|
-
const maxSize = panel.maxSize ?? 100;
|
|
13
|
-
totalMinSize += minSize;
|
|
14
|
-
if (panel.size == null) {
|
|
15
|
-
numOfPanelsWithoutSize++;
|
|
16
|
-
} else {
|
|
17
|
-
totalSize += panel.size;
|
|
18
|
-
}
|
|
19
|
-
return {
|
|
20
|
-
...panel,
|
|
21
|
-
minSize,
|
|
22
|
-
maxSize
|
|
23
|
-
};
|
|
24
|
-
});
|
|
25
|
-
validateSize("minSize", totalMinSize);
|
|
26
|
-
validateSize("size", totalSize);
|
|
27
|
-
let end = 0;
|
|
28
|
-
let remainingSize = 0;
|
|
29
|
-
const result = panels.map((panel) => {
|
|
30
|
-
let start = end;
|
|
31
|
-
if (panel.size != null) {
|
|
32
|
-
end += panel.size;
|
|
33
|
-
remainingSize = panel.size - panel.minSize;
|
|
34
|
-
return {
|
|
35
|
-
...panel,
|
|
36
|
-
start,
|
|
37
|
-
end,
|
|
38
|
-
remainingSize
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
const size = (100 - totalSize) / numOfPanelsWithoutSize;
|
|
42
|
-
end += size;
|
|
43
|
-
remainingSize = size - panel.minSize;
|
|
44
|
-
return { ...panel, size, start, end, remainingSize };
|
|
45
|
-
});
|
|
46
|
-
return result;
|
|
47
|
-
}
|
|
48
|
-
function getHandlePanels(ctx, id = ctx.activeResizeId) {
|
|
49
|
-
const [beforeId, afterId] = id?.split(":") ?? [];
|
|
50
|
-
if (!beforeId || !afterId)
|
|
51
|
-
return;
|
|
52
|
-
const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId);
|
|
53
|
-
const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId);
|
|
54
|
-
if (beforeIndex === -1 || afterIndex === -1)
|
|
55
|
-
return;
|
|
56
|
-
const before = ctx.previousPanels[beforeIndex];
|
|
57
|
-
const after = ctx.previousPanels[afterIndex];
|
|
58
|
-
return {
|
|
59
|
-
before: {
|
|
60
|
-
...before,
|
|
61
|
-
index: beforeIndex
|
|
62
|
-
},
|
|
63
|
-
after: {
|
|
64
|
-
...after,
|
|
65
|
-
index: afterIndex
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
function getHandleBounds(ctx, id = ctx.activeResizeId) {
|
|
70
|
-
const panels = getHandlePanels(ctx, id);
|
|
71
|
-
if (!panels)
|
|
72
|
-
return;
|
|
73
|
-
const { before, after } = panels;
|
|
74
|
-
return {
|
|
75
|
-
min: Math.max(before.start + before.minSize, after.end - after.maxSize),
|
|
76
|
-
max: Math.min(after.end - after.minSize, before.maxSize + before.start)
|
|
77
|
-
};
|
|
78
|
-
}
|
|
79
|
-
function getPanelBounds(ctx, id) {
|
|
80
|
-
const bounds = getHandleBounds(ctx, id);
|
|
81
|
-
const panels = getHandlePanels(ctx, id);
|
|
82
|
-
if (!bounds || !panels)
|
|
83
|
-
return;
|
|
84
|
-
const { before, after } = panels;
|
|
85
|
-
const beforeMin = Math.abs(before.start - bounds.min);
|
|
86
|
-
const afterMin = after.size + (before.size - beforeMin);
|
|
87
|
-
const beforeMax = Math.abs(before.start - bounds.max);
|
|
88
|
-
const afterMax = after.size - (beforeMax - before.size);
|
|
89
|
-
return {
|
|
90
|
-
before: {
|
|
91
|
-
index: before.index,
|
|
92
|
-
min: beforeMin,
|
|
93
|
-
max: beforeMax,
|
|
94
|
-
isAtMin: beforeMin === before.size,
|
|
95
|
-
isAtMax: beforeMax === before.size,
|
|
96
|
-
up(step) {
|
|
97
|
-
return Math.min(before.size + step, beforeMax);
|
|
98
|
-
},
|
|
99
|
-
down(step) {
|
|
100
|
-
return Math.max(before.size - step, beforeMin);
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
after: {
|
|
104
|
-
index: after.index,
|
|
105
|
-
min: afterMin,
|
|
106
|
-
max: afterMax,
|
|
107
|
-
isAtMin: afterMin === after.size,
|
|
108
|
-
isAtMax: afterMax === after.size,
|
|
109
|
-
up(step) {
|
|
110
|
-
return Math.min(after.size + step, afterMin);
|
|
111
|
-
},
|
|
112
|
-
down(step) {
|
|
113
|
-
return Math.max(after.size - step, afterMax);
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
}
|
|
118
|
-
function clamp(value, min, max) {
|
|
119
|
-
return Math.min(Math.max(value, min), max);
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
export { clamp, getHandleBounds, getHandlePanels, getNormalizedPanels, getPanelBounds };
|