@zag-js/splitter 0.11.1 → 0.12.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/index.d.mts +46 -45
- package/dist/index.d.ts +46 -45
- package/dist/index.js +0 -21
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +0 -21
- package/dist/index.mjs.map +1 -1
- package/package.json +8 -8
- package/src/index.ts +7 -1
- package/src/splitter.connect.ts +7 -24
- package/src/splitter.types.ts +47 -1
package/dist/index.d.mts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
2
|
-
import { RequiredBy, DirectionProperty, CommonProperties, Context,
|
|
2
|
+
import { PropTypes, RequiredBy, DirectionProperty, CommonProperties, Context, NormalizeProps } from '@zag-js/types';
|
|
3
3
|
import * as _zag_js_core from '@zag-js/core';
|
|
4
4
|
import { StateMachine } from '@zag-js/core';
|
|
5
5
|
|
|
@@ -49,6 +49,49 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
49
49
|
*/
|
|
50
50
|
ids?: ElementIds;
|
|
51
51
|
};
|
|
52
|
+
type PublicApi<T extends PropTypes = PropTypes> = {
|
|
53
|
+
/**
|
|
54
|
+
* Whether the splitter is focused.
|
|
55
|
+
*/
|
|
56
|
+
isFocused: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the splitter is being dragged.
|
|
59
|
+
*/
|
|
60
|
+
isDragging: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* The bounds of the currently dragged splitter handle.
|
|
63
|
+
*/
|
|
64
|
+
bounds: {
|
|
65
|
+
min: number;
|
|
66
|
+
max: number;
|
|
67
|
+
} | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Function to set a panel to its minimum size.
|
|
70
|
+
*/
|
|
71
|
+
setToMinSize(id: PanelId): void;
|
|
72
|
+
/**
|
|
73
|
+
* Function to set a panel to its maximum size.
|
|
74
|
+
*/
|
|
75
|
+
setToMaxSize(id: PanelId): void;
|
|
76
|
+
/**
|
|
77
|
+
* Function to set the size of a panel.
|
|
78
|
+
*/
|
|
79
|
+
setSize(id: PanelId, size: number): void;
|
|
80
|
+
/**
|
|
81
|
+
* Returns the state details for a resize trigger.
|
|
82
|
+
*/
|
|
83
|
+
getResizeTriggerState(props: ResizeTriggerProps): {
|
|
84
|
+
isDisabled: boolean;
|
|
85
|
+
isFocused: boolean;
|
|
86
|
+
panelIds: string[];
|
|
87
|
+
min: number | undefined;
|
|
88
|
+
max: number | undefined;
|
|
89
|
+
value: number;
|
|
90
|
+
};
|
|
91
|
+
rootProps: T["element"];
|
|
92
|
+
getPanelProps(props: PanelProps): T["element"];
|
|
93
|
+
getResizeTriggerProps(props: ResizeTriggerProps): T["element"];
|
|
94
|
+
};
|
|
52
95
|
type UserDefinedContext = RequiredBy<PublicContext, "id">;
|
|
53
96
|
type NormalizedPanelData = Array<Required<PanelSizeData> & {
|
|
54
97
|
remainingSize: number;
|
|
@@ -95,50 +138,8 @@ type ResizeTriggerProps = {
|
|
|
95
138
|
disabled?: boolean;
|
|
96
139
|
};
|
|
97
140
|
|
|
98
|
-
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>):
|
|
99
|
-
/**
|
|
100
|
-
* Whether the splitter is focused.
|
|
101
|
-
*/
|
|
102
|
-
isFocused: boolean;
|
|
103
|
-
/**
|
|
104
|
-
* Whether the splitter is being dragged.
|
|
105
|
-
*/
|
|
106
|
-
isDragging: boolean;
|
|
107
|
-
/**
|
|
108
|
-
* The bounds of the currently dragged splitter handle.
|
|
109
|
-
*/
|
|
110
|
-
bounds: {
|
|
111
|
-
min: number;
|
|
112
|
-
max: number;
|
|
113
|
-
} | undefined;
|
|
114
|
-
/**
|
|
115
|
-
* Function to set a panel to its minimum size.
|
|
116
|
-
*/
|
|
117
|
-
setToMinSize(id: PanelId): void;
|
|
118
|
-
/**
|
|
119
|
-
* Function to set a panel to its maximum size.
|
|
120
|
-
*/
|
|
121
|
-
setToMaxSize(id: PanelId): void;
|
|
122
|
-
/**
|
|
123
|
-
* Function to set the size of a panel.
|
|
124
|
-
*/
|
|
125
|
-
setSize(id: PanelId, size: number): void;
|
|
126
|
-
/**
|
|
127
|
-
* Returns the state details for a resize trigger.
|
|
128
|
-
*/
|
|
129
|
-
getResizeTriggerState(props: ResizeTriggerProps): {
|
|
130
|
-
isDisabled: boolean;
|
|
131
|
-
isFocused: boolean;
|
|
132
|
-
panelIds: string[];
|
|
133
|
-
min: number | undefined;
|
|
134
|
-
max: number | undefined;
|
|
135
|
-
value: number;
|
|
136
|
-
};
|
|
137
|
-
rootProps: T["element"];
|
|
138
|
-
getPanelProps(props: PanelProps): T["element"];
|
|
139
|
-
getResizeTriggerProps(props: ResizeTriggerProps): T["element"];
|
|
140
|
-
};
|
|
141
|
+
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T>;
|
|
141
142
|
|
|
142
143
|
declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
|
|
143
144
|
|
|
144
|
-
export { UserDefinedContext as Context, MachineState, PanelProps, ResizeTriggerProps, anatomy, connect, machine };
|
|
145
|
+
export { UserDefinedContext as Context, MachineState, PanelProps, PublicApi, ResizeTriggerProps, anatomy, connect, machine };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _zag_js_anatomy from '@zag-js/anatomy';
|
|
2
|
-
import { RequiredBy, DirectionProperty, CommonProperties, Context,
|
|
2
|
+
import { PropTypes, RequiredBy, DirectionProperty, CommonProperties, Context, NormalizeProps } from '@zag-js/types';
|
|
3
3
|
import * as _zag_js_core from '@zag-js/core';
|
|
4
4
|
import { StateMachine } from '@zag-js/core';
|
|
5
5
|
|
|
@@ -49,6 +49,49 @@ type PublicContext = DirectionProperty & CommonProperties & {
|
|
|
49
49
|
*/
|
|
50
50
|
ids?: ElementIds;
|
|
51
51
|
};
|
|
52
|
+
type PublicApi<T extends PropTypes = PropTypes> = {
|
|
53
|
+
/**
|
|
54
|
+
* Whether the splitter is focused.
|
|
55
|
+
*/
|
|
56
|
+
isFocused: boolean;
|
|
57
|
+
/**
|
|
58
|
+
* Whether the splitter is being dragged.
|
|
59
|
+
*/
|
|
60
|
+
isDragging: boolean;
|
|
61
|
+
/**
|
|
62
|
+
* The bounds of the currently dragged splitter handle.
|
|
63
|
+
*/
|
|
64
|
+
bounds: {
|
|
65
|
+
min: number;
|
|
66
|
+
max: number;
|
|
67
|
+
} | undefined;
|
|
68
|
+
/**
|
|
69
|
+
* Function to set a panel to its minimum size.
|
|
70
|
+
*/
|
|
71
|
+
setToMinSize(id: PanelId): void;
|
|
72
|
+
/**
|
|
73
|
+
* Function to set a panel to its maximum size.
|
|
74
|
+
*/
|
|
75
|
+
setToMaxSize(id: PanelId): void;
|
|
76
|
+
/**
|
|
77
|
+
* Function to set the size of a panel.
|
|
78
|
+
*/
|
|
79
|
+
setSize(id: PanelId, size: number): void;
|
|
80
|
+
/**
|
|
81
|
+
* Returns the state details for a resize trigger.
|
|
82
|
+
*/
|
|
83
|
+
getResizeTriggerState(props: ResizeTriggerProps): {
|
|
84
|
+
isDisabled: boolean;
|
|
85
|
+
isFocused: boolean;
|
|
86
|
+
panelIds: string[];
|
|
87
|
+
min: number | undefined;
|
|
88
|
+
max: number | undefined;
|
|
89
|
+
value: number;
|
|
90
|
+
};
|
|
91
|
+
rootProps: T["element"];
|
|
92
|
+
getPanelProps(props: PanelProps): T["element"];
|
|
93
|
+
getResizeTriggerProps(props: ResizeTriggerProps): T["element"];
|
|
94
|
+
};
|
|
52
95
|
type UserDefinedContext = RequiredBy<PublicContext, "id">;
|
|
53
96
|
type NormalizedPanelData = Array<Required<PanelSizeData> & {
|
|
54
97
|
remainingSize: number;
|
|
@@ -95,50 +138,8 @@ type ResizeTriggerProps = {
|
|
|
95
138
|
disabled?: boolean;
|
|
96
139
|
};
|
|
97
140
|
|
|
98
|
-
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>):
|
|
99
|
-
/**
|
|
100
|
-
* Whether the splitter is focused.
|
|
101
|
-
*/
|
|
102
|
-
isFocused: boolean;
|
|
103
|
-
/**
|
|
104
|
-
* Whether the splitter is being dragged.
|
|
105
|
-
*/
|
|
106
|
-
isDragging: boolean;
|
|
107
|
-
/**
|
|
108
|
-
* The bounds of the currently dragged splitter handle.
|
|
109
|
-
*/
|
|
110
|
-
bounds: {
|
|
111
|
-
min: number;
|
|
112
|
-
max: number;
|
|
113
|
-
} | undefined;
|
|
114
|
-
/**
|
|
115
|
-
* Function to set a panel to its minimum size.
|
|
116
|
-
*/
|
|
117
|
-
setToMinSize(id: PanelId): void;
|
|
118
|
-
/**
|
|
119
|
-
* Function to set a panel to its maximum size.
|
|
120
|
-
*/
|
|
121
|
-
setToMaxSize(id: PanelId): void;
|
|
122
|
-
/**
|
|
123
|
-
* Function to set the size of a panel.
|
|
124
|
-
*/
|
|
125
|
-
setSize(id: PanelId, size: number): void;
|
|
126
|
-
/**
|
|
127
|
-
* Returns the state details for a resize trigger.
|
|
128
|
-
*/
|
|
129
|
-
getResizeTriggerState(props: ResizeTriggerProps): {
|
|
130
|
-
isDisabled: boolean;
|
|
131
|
-
isFocused: boolean;
|
|
132
|
-
panelIds: string[];
|
|
133
|
-
min: number | undefined;
|
|
134
|
-
max: number | undefined;
|
|
135
|
-
value: number;
|
|
136
|
-
};
|
|
137
|
-
rootProps: T["element"];
|
|
138
|
-
getPanelProps(props: PanelProps): T["element"];
|
|
139
|
-
getResizeTriggerProps(props: ResizeTriggerProps): T["element"];
|
|
140
|
-
};
|
|
141
|
+
declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T>;
|
|
141
142
|
|
|
142
143
|
declare function machine(userContext: UserDefinedContext): _zag_js_core.Machine<MachineContext, MachineState, _zag_js_core.StateMachine.AnyEventObject>;
|
|
143
144
|
|
|
144
|
-
export { UserDefinedContext as Context, MachineState, PanelProps, ResizeTriggerProps, anatomy, connect, machine };
|
|
145
|
+
export { UserDefinedContext as Context, MachineState, PanelProps, PublicApi, ResizeTriggerProps, anatomy, connect, machine };
|
package/dist/index.js
CHANGED
|
@@ -221,41 +221,20 @@ function connect(state, send, normalize) {
|
|
|
221
221
|
const isDragging = state.matches("dragging");
|
|
222
222
|
const panels = state.context.panels;
|
|
223
223
|
const api = {
|
|
224
|
-
/**
|
|
225
|
-
* Whether the splitter is focused.
|
|
226
|
-
*/
|
|
227
224
|
isFocused,
|
|
228
|
-
/**
|
|
229
|
-
* Whether the splitter is being dragged.
|
|
230
|
-
*/
|
|
231
225
|
isDragging,
|
|
232
|
-
/**
|
|
233
|
-
* The bounds of the currently dragged splitter handle.
|
|
234
|
-
*/
|
|
235
226
|
bounds: getHandleBounds(state.context),
|
|
236
|
-
/**
|
|
237
|
-
* Function to set a panel to its minimum size.
|
|
238
|
-
*/
|
|
239
227
|
setToMinSize(id) {
|
|
240
228
|
const panel = panels.find((panel2) => panel2.id === id);
|
|
241
229
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.minSize, src: "setToMinSize" });
|
|
242
230
|
},
|
|
243
|
-
/**
|
|
244
|
-
* Function to set a panel to its maximum size.
|
|
245
|
-
*/
|
|
246
231
|
setToMaxSize(id) {
|
|
247
232
|
const panel = panels.find((panel2) => panel2.id === id);
|
|
248
233
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.maxSize, src: "setToMaxSize" });
|
|
249
234
|
},
|
|
250
|
-
/**
|
|
251
|
-
* Function to set the size of a panel.
|
|
252
|
-
*/
|
|
253
235
|
setSize(id, size) {
|
|
254
236
|
send({ type: "SET_PANEL_SIZE", id, size });
|
|
255
237
|
},
|
|
256
|
-
/**
|
|
257
|
-
* Returns the state details for a resize trigger.
|
|
258
|
-
*/
|
|
259
238
|
getResizeTriggerState(props) {
|
|
260
239
|
const { id, disabled } = props;
|
|
261
240
|
const ids = id.split(":");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/splitter.anatomy.ts","../src/splitter.connect.ts","../src/splitter.dom.ts","../src/splitter.utils.ts","../src/splitter.machine.ts"],"sourcesContent":["export { anatomy } from \"./splitter.anatomy\"\nexport { connect } from \"./splitter.connect\"\nexport { machine } from \"./splitter.machine\"\nexport type { MachineState, UserDefinedContext as Context, PanelProps, ResizeTriggerProps } from \"./splitter.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"splitter\").parts(\"root\", \"panel\", \"toggleTrigger\", \"resizeTrigger\")\n\nexport const parts = anatomy.build()\n","import { EventKeyMap, getEventKey, getEventStep } from \"@zag-js/dom-event\"\nimport { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./splitter.anatomy\"\nimport { dom } from \"./splitter.dom\"\nimport type { PanelId, PanelProps, ResizeTriggerProps, Send, State } from \"./splitter.types\"\nimport { getHandleBounds } from \"./splitter.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isHorizontal = state.context.isHorizontal\n const isFocused = state.hasTag(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const panels = state.context.panels\n\n const api = {\n /**\n * Whether the splitter is focused.\n */\n isFocused,\n /**\n * Whether the splitter is being dragged.\n */\n isDragging,\n /**\n * The bounds of the currently dragged splitter handle.\n */\n bounds: getHandleBounds(state.context),\n /**\n * Function to set a panel to its minimum size.\n */\n setToMinSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.minSize, src: \"setToMinSize\" })\n },\n /**\n * Function to set a panel to its maximum size.\n */\n setToMaxSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.maxSize, src: \"setToMaxSize\" })\n },\n /**\n * Function to set the size of a panel.\n */\n setSize(id: PanelId, size: number) {\n send({ type: \"SET_PANEL_SIZE\", id, size })\n },\n /**\n * Returns the state details for a resize trigger.\n */\n getResizeTriggerState(props: ResizeTriggerProps) {\n const { id, disabled } = props\n const ids = id.split(\":\")\n const panelIds = ids.map((id) => dom.getPanelId(state.context, id))\n const panels = getHandleBounds(state.context, id)\n\n return {\n isDisabled: !!disabled,\n isFocused: state.context.activeResizeId === id && isFocused,\n panelIds,\n min: panels?.min,\n max: panels?.max,\n value: 0,\n }\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-orientation\": state.context.orientation,\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: {\n display: \"flex\",\n flexDirection: isHorizontal ? \"row\" : \"column\",\n height: \"100%\",\n width: \"100%\",\n overflow: \"hidden\",\n },\n }),\n\n getPanelProps(props: PanelProps) {\n const { id } = props\n return normalize.element({\n ...parts.panel.attrs,\n dir: state.context.dir,\n id: dom.getPanelId(state.context, id),\n \"data-ownedby\": dom.getRootId(state.context),\n style: dom.getPanelStyle(state.context, id),\n })\n },\n\n getResizeTriggerProps(props: ResizeTriggerProps) {\n const { id, disabled, step = 1 } = props\n const triggerState = api.getResizeTriggerState(props)\n\n return normalize.element({\n ...parts.resizeTrigger.attrs,\n dir: state.context.dir,\n id: dom.getResizeTriggerId(state.context, id),\n role: \"separator\",\n \"data-ownedby\": dom.getRootId(state.context),\n tabIndex: disabled ? undefined : 0,\n \"aria-valuenow\": triggerState.value,\n \"aria-valuemin\": triggerState.min,\n \"aria-valuemax\": triggerState.max,\n \"data-orientation\": state.context.orientation,\n \"aria-orientation\": state.context.orientation,\n \"aria-controls\": triggerState.panelIds.join(\" \"),\n \"data-focus\": dataAttr(triggerState.isFocused),\n \"data-disabled\": dataAttr(disabled),\n style: {\n touchAction: \"none\",\n userSelect: \"none\",\n flex: \"0 0 auto\",\n pointerEvents: isDragging && !triggerState.isFocused ? \"none\" : undefined,\n cursor: isHorizontal ? \"col-resize\" : \"row-resize\",\n [isHorizontal ? \"minHeight\" : \"minWidth\"]: \"0\",\n },\n onPointerDown(event) {\n if (disabled) {\n event.preventDefault()\n return\n }\n send({ type: \"POINTER_DOWN\", id })\n event.preventDefault()\n event.stopPropagation()\n },\n onPointerOver() {\n if (disabled) return\n send({ type: \"POINTER_OVER\", id })\n },\n onPointerLeave() {\n if (disabled) return\n send({ type: \"POINTER_LEAVE\", id })\n },\n onBlur() {\n send(\"BLUR\")\n },\n onFocus() {\n send({ type: \"FOCUS\", id })\n },\n onDoubleClick() {\n if (disabled) return\n send({ type: \"DOUBLE_CLICK\", id })\n },\n onKeyDown(event) {\n if (disabled) return\n const moveStep = getEventStep(event) * step\n const keyMap: EventKeyMap = {\n Enter() {\n send(\"ENTER\")\n },\n ArrowUp() {\n send({ type: \"ARROW_UP\", step: moveStep })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step: moveStep })\n },\n ArrowLeft() {\n send({ type: \"ARROW_LEFT\", step: moveStep })\n },\n ArrowRight() {\n send({ type: \"ARROW_RIGHT\", step: moveStep })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n }\n\n return api\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { JSX, Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, PanelId } from \"./splitter.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`,\n getResizeTriggerId: (ctx: Ctx, id: string) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`,\n getToggleTriggerId: (ctx: Ctx) => ctx.ids?.toggleTrigger?.(ctx.id) ?? `splitter:${ctx.id}:toggle-btn`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`,\n getPanelId: (ctx: Ctx, id: string | number) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`,\n globalCursorId: (ctx: Ctx) => `splitter:${ctx.id}:global-cursor`,\n\n getRootEl: (ctx: Ctx) => dom.queryById(ctx, dom.getRootId(ctx)),\n getResizeTriggerEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getResizeTriggerId(ctx, id)),\n getPanelEl: (ctx: Ctx, id: string | number) => dom.getById(ctx, dom.getPanelId(ctx, id)),\n\n getCursor(ctx: Ctx) {\n const x = ctx.isHorizontal\n let cursor: Style[\"cursor\"] = x ? \"col-resize\" : \"row-resize\"\n if (ctx.activeResizeState.isAtMin) cursor = x ? \"e-resize\" : \"s-resize\"\n if (ctx.activeResizeState.isAtMax) cursor = x ? \"w-resize\" : \"n-resize\"\n return cursor\n },\n\n getPanelStyle(ctx: Ctx, id: PanelId): JSX.CSSProperties {\n const flexGrow = ctx.panels.find((panel) => panel.id === id)?.size ?? \"0\"\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n overflow: \"hidden\",\n }\n },\n\n getActiveHandleEl(ctx: Ctx) {\n const activeId = ctx.activeResizeId\n if (activeId == null) return\n return dom.getById(ctx, dom.getResizeTriggerId(ctx, activeId))\n },\n\n getResizeTriggerEls(ctx: Ctx) {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n return queryAll(dom.getRootEl(ctx), `[role=separator][data-ownedby='${ownerId}']`)\n },\n\n setupGlobalCursor(ctx: Ctx) {\n const styleEl = dom.getById(ctx, dom.globalCursorId(ctx))\n const textContent = `* { cursor: ${dom.getCursor(ctx)} !important; }`\n if (styleEl) {\n styleEl.textContent = textContent\n } else {\n const style = dom.getDoc(ctx).createElement(\"style\")\n style.id = dom.globalCursorId(ctx)\n style.textContent = textContent\n dom.getDoc(ctx).head.appendChild(style)\n }\n },\n\n removeGlobalCursor(ctx: Ctx) {\n dom.getById(ctx, dom.globalCursorId(ctx))?.remove()\n },\n})\n","import type { MachineContext as Ctx, NormalizedPanelData } from \"./splitter.types\"\n\nfunction validateSize(key: string, size: number) {\n if (Math.floor(size) > 100) {\n throw new Error(`Total ${key} of panels cannot be greater than 100`)\n }\n}\n\nexport function getNormalizedPanels(ctx: Ctx): NormalizedPanelData {\n let numOfPanelsWithoutSize = 0\n let totalSize = 0\n let totalMinSize = 0\n\n const panels = ctx.size.map((panel) => {\n const minSize = panel.minSize ?? 0\n const maxSize = panel.maxSize ?? 100\n\n totalMinSize += minSize\n\n if (panel.size == null) {\n numOfPanelsWithoutSize++\n } else {\n totalSize += panel.size\n }\n\n return {\n ...panel,\n minSize,\n maxSize,\n }\n })\n\n validateSize(\"minSize\", totalMinSize)\n validateSize(\"size\", totalSize)\n\n let end = 0\n let remainingSize = 0\n\n const result = panels.map((panel) => {\n let start = end\n\n if (panel.size != null) {\n end += panel.size\n remainingSize = panel.size - panel.minSize\n return {\n ...panel,\n start,\n end,\n remainingSize,\n }\n }\n\n const size = (100 - totalSize) / numOfPanelsWithoutSize\n end += size\n remainingSize = size - panel.minSize\n\n return { ...panel, size, start, end, remainingSize }\n })\n\n return result as NormalizedPanelData\n}\n\nexport function getHandlePanels(ctx: Ctx, id = ctx.activeResizeId) {\n const [beforeId, afterId] = id?.split(\":\") ?? []\n if (!beforeId || !afterId) return\n\n const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId)\n const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId)\n if (beforeIndex === -1 || afterIndex === -1) return\n\n const before = ctx.previousPanels[beforeIndex]\n const after = ctx.previousPanels[afterIndex]\n\n return {\n before: {\n ...before,\n index: beforeIndex,\n },\n after: {\n ...after,\n index: afterIndex,\n },\n }\n}\n\nexport function getHandleBounds(ctx: Ctx, id = ctx.activeResizeId) {\n const panels = getHandlePanels(ctx, id)\n if (!panels) return\n\n const { before, after } = panels\n\n return {\n min: Math.max(before.start + before.minSize, after.end - after.maxSize),\n max: Math.min(after.end - after.minSize, before.maxSize + before.start),\n }\n}\n\nexport function getPanelBounds(ctx: Ctx, id?: string | null) {\n const bounds = getHandleBounds(ctx, id)\n const panels = getHandlePanels(ctx, id)\n\n if (!bounds || !panels) return\n const { before, after } = panels\n\n const beforeMin = Math.abs(before.start - bounds.min)\n const afterMin = after.size + (before.size - beforeMin)\n\n const beforeMax = Math.abs(before.start - bounds.max)\n const afterMax = after.size - (beforeMax - before.size)\n\n return {\n before: {\n index: before.index,\n min: beforeMin,\n max: beforeMax,\n isAtMin: beforeMin === before.size,\n isAtMax: beforeMax === before.size,\n up(step: number) {\n return Math.min(before.size + step, beforeMax)\n },\n down(step: number) {\n return Math.max(before.size - step, beforeMin)\n },\n },\n after: {\n index: after.index,\n min: afterMin,\n max: afterMax,\n isAtMin: afterMin === after.size,\n isAtMax: afterMax === after.size,\n up(step: number) {\n return Math.min(after.size + step, afterMin)\n },\n down(step: number) {\n return Math.max(after.size - step, afterMax)\n },\n },\n }\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { getRelativePoint, trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./splitter.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./splitter.types\"\nimport { clamp, getHandleBounds, getHandlePanels, getNormalizedPanels, getPanelBounds } from \"./splitter.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"splitter\",\n initial: \"idle\",\n context: {\n orientation: \"horizontal\",\n activeResizeId: null,\n previousPanels: [],\n size: [],\n initialSize: [],\n activeResizeState: {\n isAtMin: false,\n isAtMax: false,\n },\n ...ctx,\n },\n\n created: [\"setPreviousPanels\", \"setInitialSize\"],\n\n watch: {\n size: [\"setActiveResizeState\"],\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n panels: (ctx) => getNormalizedPanels(ctx),\n },\n\n on: {\n SET_PANEL_SIZE: {\n actions: \"setPanelSize\",\n },\n },\n states: {\n idle: {\n entry: [\"clearActiveHandleId\"],\n on: {\n POINTER_OVER: {\n target: \"hover:temp\",\n actions: [\"setActiveHandleId\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"setActiveHandleId\"],\n },\n DOUBLE_CLICK: {\n actions: [\"resetStartPanel\", \"setPreviousPanels\"],\n },\n },\n },\n\n \"hover:temp\": {\n after: {\n HOVER_DELAY: \"hover\",\n },\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n hover: {\n tags: [\"focus\"],\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n on: {\n BLUR: \"idle\",\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ENTER: [\n {\n guard: \"isStartPanelAtMax\",\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n { actions: [\"setStartPanelToMax\", \"setPreviousPanels\"] },\n ],\n HOME: {\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n END: {\n actions: [\"setStartPanelToMax\", \"setPreviousPanels\"],\n },\n },\n },\n\n dragging: {\n tags: [\"focus\"],\n entry: \"focusResizeHandle\",\n activities: [\"trackPointerMove\"],\n on: {\n POINTER_MOVE: {\n actions: [\"setPointerValue\", \"setGlobalCursor\"],\n },\n POINTER_UP: {\n target: \"focused\",\n actions: [\"invokeOnResizeEnd\", \"setPreviousPanels\", \"clearGlobalCursor\", \"blurResizeHandle\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackPointerMove: (ctx, _evt, { send }) => {\n const doc = dom.getDoc(ctx)\n return trackPointerMove(doc, {\n onPointerMove(info) {\n send({ type: \"POINTER_MOVE\", point: info.point })\n },\n onPointerUp() {\n send(\"POINTER_UP\")\n },\n })\n },\n },\n guards: {\n isStartPanelAtMin: (ctx) => ctx.activeResizeState.isAtMin,\n isStartPanelAtMax: (ctx) => ctx.activeResizeState.isAtMax,\n isHorizontal: (ctx) => ctx.isHorizontal,\n isVertical: (ctx) => !ctx.isHorizontal,\n },\n delays: {\n HOVER_DELAY: 250,\n },\n actions: {\n setGlobalCursor(ctx) {\n dom.setupGlobalCursor(ctx)\n },\n clearGlobalCursor(ctx) {\n dom.removeGlobalCursor(ctx)\n },\n invokeOnResize(ctx) {\n ctx.onResize?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeStart(ctx) {\n ctx.onResizeStart?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeEnd(ctx) {\n ctx.onResizeEnd?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n setActiveHandleId(ctx, evt) {\n ctx.activeResizeId = evt.id\n },\n clearActiveHandleId(ctx) {\n ctx.activeResizeId = null\n },\n setInitialSize(ctx) {\n ctx.initialSize = ctx.panels.slice().map((panel) => ({\n id: panel.id,\n size: panel.size,\n }))\n },\n setPanelSize(ctx, evt) {\n const { id, size } = evt\n ctx.size = ctx.size.map((panel) => {\n const panelSize = clamp(size, panel.minSize ?? 0, panel.maxSize ?? 100)\n return panel.id === id ? { ...panel, size: panelSize } : panel\n })\n },\n setStartPanelToMin(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.min\n ctx.size[after.index].size = after.min\n },\n setStartPanelToMax(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.max\n ctx.size[after.index].size = after.max\n },\n expandStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.up(evt.step)\n ctx.size[after.index].size = after.down(evt.step)\n },\n shrinkStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.down(evt.step)\n ctx.size[after.index].size = after.up(evt.step)\n },\n resetStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx, evt.id)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = ctx.initialSize[before.index].size\n ctx.size[after.index].size = ctx.initialSize[after.index].size\n },\n focusResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.focus({ preventScroll: true })\n })\n },\n blurResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.blur()\n })\n },\n setPreviousPanels(ctx) {\n ctx.previousPanels = ctx.panels.slice()\n },\n setActiveResizeState(ctx) {\n const panels = getPanelBounds(ctx)\n if (!panels) return\n const { before } = panels\n ctx.activeResizeState = {\n isAtMin: before.isAtMin,\n isAtMax: before.isAtMax,\n }\n },\n setPointerValue(ctx, evt) {\n const panels = getHandlePanels(ctx)\n const bounds = getHandleBounds(ctx)\n\n if (!panels || !bounds) return\n\n const rootEl = dom.getRootEl(ctx)\n const relativePoint = getRelativePoint(evt.point, rootEl)\n const percentValue = relativePoint.getPercentValue({\n dir: ctx.dir,\n orientation: ctx.orientation,\n })\n\n let pointValue = percentValue * 100\n\n // update active resize state here because we use `previousPanels` in the calculations\n ctx.activeResizeState = {\n isAtMin: pointValue < bounds.min,\n isAtMax: pointValue > bounds.max,\n }\n\n pointValue = clamp(pointValue, bounds.min, bounds.max)\n\n const { before, after } = panels\n\n const offset = pointValue - before.end\n ctx.size[before.index].size = before.size + offset\n ctx.size[after.index].size = after.size - offset\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["import_dom_query","panel","id","panels","import_dom_event","import_dom_query","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/splitter.anatomy.ts","../src/splitter.connect.ts","../src/splitter.dom.ts","../src/splitter.utils.ts","../src/splitter.machine.ts"],"sourcesContent":["export { anatomy } from \"./splitter.anatomy\"\nexport { connect } from \"./splitter.connect\"\nexport { machine } from \"./splitter.machine\"\nexport type {\n UserDefinedContext as Context,\n MachineState,\n PanelProps,\n PublicApi,\n ResizeTriggerProps,\n} from \"./splitter.types\"\n","import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"splitter\").parts(\"root\", \"panel\", \"toggleTrigger\", \"resizeTrigger\")\n\nexport const parts = anatomy.build()\n","import { getEventKey, getEventStep, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./splitter.anatomy\"\nimport { dom } from \"./splitter.dom\"\nimport type { PanelId, PanelProps, PublicApi, ResizeTriggerProps, Send, State } from \"./splitter.types\"\nimport { getHandleBounds } from \"./splitter.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {\n const isHorizontal = state.context.isHorizontal\n const isFocused = state.hasTag(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const panels = state.context.panels\n\n const api = {\n isFocused,\n isDragging,\n bounds: getHandleBounds(state.context),\n\n setToMinSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.minSize, src: \"setToMinSize\" })\n },\n\n setToMaxSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.maxSize, src: \"setToMaxSize\" })\n },\n\n setSize(id: PanelId, size: number) {\n send({ type: \"SET_PANEL_SIZE\", id, size })\n },\n\n getResizeTriggerState(props: ResizeTriggerProps) {\n const { id, disabled } = props\n const ids = id.split(\":\")\n const panelIds = ids.map((id) => dom.getPanelId(state.context, id))\n const panels = getHandleBounds(state.context, id)\n\n return {\n isDisabled: !!disabled,\n isFocused: state.context.activeResizeId === id && isFocused,\n panelIds,\n min: panels?.min,\n max: panels?.max,\n value: 0,\n }\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-orientation\": state.context.orientation,\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: {\n display: \"flex\",\n flexDirection: isHorizontal ? \"row\" : \"column\",\n height: \"100%\",\n width: \"100%\",\n overflow: \"hidden\",\n },\n }),\n\n getPanelProps(props: PanelProps) {\n const { id } = props\n return normalize.element({\n ...parts.panel.attrs,\n dir: state.context.dir,\n id: dom.getPanelId(state.context, id),\n \"data-ownedby\": dom.getRootId(state.context),\n style: dom.getPanelStyle(state.context, id),\n })\n },\n\n getResizeTriggerProps(props: ResizeTriggerProps) {\n const { id, disabled, step = 1 } = props\n const triggerState = api.getResizeTriggerState(props)\n\n return normalize.element({\n ...parts.resizeTrigger.attrs,\n dir: state.context.dir,\n id: dom.getResizeTriggerId(state.context, id),\n role: \"separator\",\n \"data-ownedby\": dom.getRootId(state.context),\n tabIndex: disabled ? undefined : 0,\n \"aria-valuenow\": triggerState.value,\n \"aria-valuemin\": triggerState.min,\n \"aria-valuemax\": triggerState.max,\n \"data-orientation\": state.context.orientation,\n \"aria-orientation\": state.context.orientation,\n \"aria-controls\": triggerState.panelIds.join(\" \"),\n \"data-focus\": dataAttr(triggerState.isFocused),\n \"data-disabled\": dataAttr(disabled),\n style: {\n touchAction: \"none\",\n userSelect: \"none\",\n flex: \"0 0 auto\",\n pointerEvents: isDragging && !triggerState.isFocused ? \"none\" : undefined,\n cursor: isHorizontal ? \"col-resize\" : \"row-resize\",\n [isHorizontal ? \"minHeight\" : \"minWidth\"]: \"0\",\n },\n onPointerDown(event) {\n if (disabled) {\n event.preventDefault()\n return\n }\n send({ type: \"POINTER_DOWN\", id })\n event.preventDefault()\n event.stopPropagation()\n },\n onPointerOver() {\n if (disabled) return\n send({ type: \"POINTER_OVER\", id })\n },\n onPointerLeave() {\n if (disabled) return\n send({ type: \"POINTER_LEAVE\", id })\n },\n onBlur() {\n send(\"BLUR\")\n },\n onFocus() {\n send({ type: \"FOCUS\", id })\n },\n onDoubleClick() {\n if (disabled) return\n send({ type: \"DOUBLE_CLICK\", id })\n },\n onKeyDown(event) {\n if (disabled) return\n const moveStep = getEventStep(event) * step\n const keyMap: EventKeyMap = {\n Enter() {\n send(\"ENTER\")\n },\n ArrowUp() {\n send({ type: \"ARROW_UP\", step: moveStep })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step: moveStep })\n },\n ArrowLeft() {\n send({ type: \"ARROW_LEFT\", step: moveStep })\n },\n ArrowRight() {\n send({ type: \"ARROW_RIGHT\", step: moveStep })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n }\n\n return api\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { JSX, Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, PanelId } from \"./splitter.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`,\n getResizeTriggerId: (ctx: Ctx, id: string) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`,\n getToggleTriggerId: (ctx: Ctx) => ctx.ids?.toggleTrigger?.(ctx.id) ?? `splitter:${ctx.id}:toggle-btn`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`,\n getPanelId: (ctx: Ctx, id: string | number) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`,\n globalCursorId: (ctx: Ctx) => `splitter:${ctx.id}:global-cursor`,\n\n getRootEl: (ctx: Ctx) => dom.queryById(ctx, dom.getRootId(ctx)),\n getResizeTriggerEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getResizeTriggerId(ctx, id)),\n getPanelEl: (ctx: Ctx, id: string | number) => dom.getById(ctx, dom.getPanelId(ctx, id)),\n\n getCursor(ctx: Ctx) {\n const x = ctx.isHorizontal\n let cursor: Style[\"cursor\"] = x ? \"col-resize\" : \"row-resize\"\n if (ctx.activeResizeState.isAtMin) cursor = x ? \"e-resize\" : \"s-resize\"\n if (ctx.activeResizeState.isAtMax) cursor = x ? \"w-resize\" : \"n-resize\"\n return cursor\n },\n\n getPanelStyle(ctx: Ctx, id: PanelId): JSX.CSSProperties {\n const flexGrow = ctx.panels.find((panel) => panel.id === id)?.size ?? \"0\"\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n overflow: \"hidden\",\n }\n },\n\n getActiveHandleEl(ctx: Ctx) {\n const activeId = ctx.activeResizeId\n if (activeId == null) return\n return dom.getById(ctx, dom.getResizeTriggerId(ctx, activeId))\n },\n\n getResizeTriggerEls(ctx: Ctx) {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n return queryAll(dom.getRootEl(ctx), `[role=separator][data-ownedby='${ownerId}']`)\n },\n\n setupGlobalCursor(ctx: Ctx) {\n const styleEl = dom.getById(ctx, dom.globalCursorId(ctx))\n const textContent = `* { cursor: ${dom.getCursor(ctx)} !important; }`\n if (styleEl) {\n styleEl.textContent = textContent\n } else {\n const style = dom.getDoc(ctx).createElement(\"style\")\n style.id = dom.globalCursorId(ctx)\n style.textContent = textContent\n dom.getDoc(ctx).head.appendChild(style)\n }\n },\n\n removeGlobalCursor(ctx: Ctx) {\n dom.getById(ctx, dom.globalCursorId(ctx))?.remove()\n },\n})\n","import type { MachineContext as Ctx, NormalizedPanelData } from \"./splitter.types\"\n\nfunction validateSize(key: string, size: number) {\n if (Math.floor(size) > 100) {\n throw new Error(`Total ${key} of panels cannot be greater than 100`)\n }\n}\n\nexport function getNormalizedPanels(ctx: Ctx): NormalizedPanelData {\n let numOfPanelsWithoutSize = 0\n let totalSize = 0\n let totalMinSize = 0\n\n const panels = ctx.size.map((panel) => {\n const minSize = panel.minSize ?? 0\n const maxSize = panel.maxSize ?? 100\n\n totalMinSize += minSize\n\n if (panel.size == null) {\n numOfPanelsWithoutSize++\n } else {\n totalSize += panel.size\n }\n\n return {\n ...panel,\n minSize,\n maxSize,\n }\n })\n\n validateSize(\"minSize\", totalMinSize)\n validateSize(\"size\", totalSize)\n\n let end = 0\n let remainingSize = 0\n\n const result = panels.map((panel) => {\n let start = end\n\n if (panel.size != null) {\n end += panel.size\n remainingSize = panel.size - panel.minSize\n return {\n ...panel,\n start,\n end,\n remainingSize,\n }\n }\n\n const size = (100 - totalSize) / numOfPanelsWithoutSize\n end += size\n remainingSize = size - panel.minSize\n\n return { ...panel, size, start, end, remainingSize }\n })\n\n return result as NormalizedPanelData\n}\n\nexport function getHandlePanels(ctx: Ctx, id = ctx.activeResizeId) {\n const [beforeId, afterId] = id?.split(\":\") ?? []\n if (!beforeId || !afterId) return\n\n const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId)\n const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId)\n if (beforeIndex === -1 || afterIndex === -1) return\n\n const before = ctx.previousPanels[beforeIndex]\n const after = ctx.previousPanels[afterIndex]\n\n return {\n before: {\n ...before,\n index: beforeIndex,\n },\n after: {\n ...after,\n index: afterIndex,\n },\n }\n}\n\nexport function getHandleBounds(ctx: Ctx, id = ctx.activeResizeId) {\n const panels = getHandlePanels(ctx, id)\n if (!panels) return\n\n const { before, after } = panels\n\n return {\n min: Math.max(before.start + before.minSize, after.end - after.maxSize),\n max: Math.min(after.end - after.minSize, before.maxSize + before.start),\n }\n}\n\nexport function getPanelBounds(ctx: Ctx, id?: string | null) {\n const bounds = getHandleBounds(ctx, id)\n const panels = getHandlePanels(ctx, id)\n\n if (!bounds || !panels) return\n const { before, after } = panels\n\n const beforeMin = Math.abs(before.start - bounds.min)\n const afterMin = after.size + (before.size - beforeMin)\n\n const beforeMax = Math.abs(before.start - bounds.max)\n const afterMax = after.size - (beforeMax - before.size)\n\n return {\n before: {\n index: before.index,\n min: beforeMin,\n max: beforeMax,\n isAtMin: beforeMin === before.size,\n isAtMax: beforeMax === before.size,\n up(step: number) {\n return Math.min(before.size + step, beforeMax)\n },\n down(step: number) {\n return Math.max(before.size - step, beforeMin)\n },\n },\n after: {\n index: after.index,\n min: afterMin,\n max: afterMax,\n isAtMin: afterMin === after.size,\n isAtMax: afterMax === after.size,\n up(step: number) {\n return Math.min(after.size + step, afterMin)\n },\n down(step: number) {\n return Math.max(after.size - step, afterMax)\n },\n },\n }\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { getRelativePoint, trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./splitter.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./splitter.types\"\nimport { clamp, getHandleBounds, getHandlePanels, getNormalizedPanels, getPanelBounds } from \"./splitter.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"splitter\",\n initial: \"idle\",\n context: {\n orientation: \"horizontal\",\n activeResizeId: null,\n previousPanels: [],\n size: [],\n initialSize: [],\n activeResizeState: {\n isAtMin: false,\n isAtMax: false,\n },\n ...ctx,\n },\n\n created: [\"setPreviousPanels\", \"setInitialSize\"],\n\n watch: {\n size: [\"setActiveResizeState\"],\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n panels: (ctx) => getNormalizedPanels(ctx),\n },\n\n on: {\n SET_PANEL_SIZE: {\n actions: \"setPanelSize\",\n },\n },\n states: {\n idle: {\n entry: [\"clearActiveHandleId\"],\n on: {\n POINTER_OVER: {\n target: \"hover:temp\",\n actions: [\"setActiveHandleId\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"setActiveHandleId\"],\n },\n DOUBLE_CLICK: {\n actions: [\"resetStartPanel\", \"setPreviousPanels\"],\n },\n },\n },\n\n \"hover:temp\": {\n after: {\n HOVER_DELAY: \"hover\",\n },\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n hover: {\n tags: [\"focus\"],\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n on: {\n BLUR: \"idle\",\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ENTER: [\n {\n guard: \"isStartPanelAtMax\",\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n { actions: [\"setStartPanelToMax\", \"setPreviousPanels\"] },\n ],\n HOME: {\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n END: {\n actions: [\"setStartPanelToMax\", \"setPreviousPanels\"],\n },\n },\n },\n\n dragging: {\n tags: [\"focus\"],\n entry: \"focusResizeHandle\",\n activities: [\"trackPointerMove\"],\n on: {\n POINTER_MOVE: {\n actions: [\"setPointerValue\", \"setGlobalCursor\"],\n },\n POINTER_UP: {\n target: \"focused\",\n actions: [\"invokeOnResizeEnd\", \"setPreviousPanels\", \"clearGlobalCursor\", \"blurResizeHandle\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackPointerMove: (ctx, _evt, { send }) => {\n const doc = dom.getDoc(ctx)\n return trackPointerMove(doc, {\n onPointerMove(info) {\n send({ type: \"POINTER_MOVE\", point: info.point })\n },\n onPointerUp() {\n send(\"POINTER_UP\")\n },\n })\n },\n },\n guards: {\n isStartPanelAtMin: (ctx) => ctx.activeResizeState.isAtMin,\n isStartPanelAtMax: (ctx) => ctx.activeResizeState.isAtMax,\n isHorizontal: (ctx) => ctx.isHorizontal,\n isVertical: (ctx) => !ctx.isHorizontal,\n },\n delays: {\n HOVER_DELAY: 250,\n },\n actions: {\n setGlobalCursor(ctx) {\n dom.setupGlobalCursor(ctx)\n },\n clearGlobalCursor(ctx) {\n dom.removeGlobalCursor(ctx)\n },\n invokeOnResize(ctx) {\n ctx.onResize?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeStart(ctx) {\n ctx.onResizeStart?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeEnd(ctx) {\n ctx.onResizeEnd?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n setActiveHandleId(ctx, evt) {\n ctx.activeResizeId = evt.id\n },\n clearActiveHandleId(ctx) {\n ctx.activeResizeId = null\n },\n setInitialSize(ctx) {\n ctx.initialSize = ctx.panels.slice().map((panel) => ({\n id: panel.id,\n size: panel.size,\n }))\n },\n setPanelSize(ctx, evt) {\n const { id, size } = evt\n ctx.size = ctx.size.map((panel) => {\n const panelSize = clamp(size, panel.minSize ?? 0, panel.maxSize ?? 100)\n return panel.id === id ? { ...panel, size: panelSize } : panel\n })\n },\n setStartPanelToMin(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.min\n ctx.size[after.index].size = after.min\n },\n setStartPanelToMax(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.max\n ctx.size[after.index].size = after.max\n },\n expandStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.up(evt.step)\n ctx.size[after.index].size = after.down(evt.step)\n },\n shrinkStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.down(evt.step)\n ctx.size[after.index].size = after.up(evt.step)\n },\n resetStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx, evt.id)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = ctx.initialSize[before.index].size\n ctx.size[after.index].size = ctx.initialSize[after.index].size\n },\n focusResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.focus({ preventScroll: true })\n })\n },\n blurResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.blur()\n })\n },\n setPreviousPanels(ctx) {\n ctx.previousPanels = ctx.panels.slice()\n },\n setActiveResizeState(ctx) {\n const panels = getPanelBounds(ctx)\n if (!panels) return\n const { before } = panels\n ctx.activeResizeState = {\n isAtMin: before.isAtMin,\n isAtMax: before.isAtMax,\n }\n },\n setPointerValue(ctx, evt) {\n const panels = getHandlePanels(ctx)\n const bounds = getHandleBounds(ctx)\n\n if (!panels || !bounds) return\n\n const rootEl = dom.getRootEl(ctx)\n const relativePoint = getRelativePoint(evt.point, rootEl)\n const percentValue = relativePoint.getPercentValue({\n dir: ctx.dir,\n orientation: ctx.orientation,\n })\n\n let pointValue = percentValue * 100\n\n // update active resize state here because we use `previousPanels` in the calculations\n ctx.activeResizeState = {\n isAtMin: pointValue < bounds.min,\n isAtMax: pointValue > bounds.max,\n }\n\n pointValue = clamp(pointValue, bounds.min, bounds.max)\n\n const { before, after } = panels\n\n const offset = pointValue - before.end\n ctx.size[before.index].size = before.size + offset\n ctx.size[after.index].size = after.size - offset\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["import_dom_query","panel","id","panels","import_dom_event","import_dom_query","ctx"]}
|
package/dist/index.mjs
CHANGED
|
@@ -193,41 +193,20 @@ function connect(state, send, normalize) {
|
|
|
193
193
|
const isDragging = state.matches("dragging");
|
|
194
194
|
const panels = state.context.panels;
|
|
195
195
|
const api = {
|
|
196
|
-
/**
|
|
197
|
-
* Whether the splitter is focused.
|
|
198
|
-
*/
|
|
199
196
|
isFocused,
|
|
200
|
-
/**
|
|
201
|
-
* Whether the splitter is being dragged.
|
|
202
|
-
*/
|
|
203
197
|
isDragging,
|
|
204
|
-
/**
|
|
205
|
-
* The bounds of the currently dragged splitter handle.
|
|
206
|
-
*/
|
|
207
198
|
bounds: getHandleBounds(state.context),
|
|
208
|
-
/**
|
|
209
|
-
* Function to set a panel to its minimum size.
|
|
210
|
-
*/
|
|
211
199
|
setToMinSize(id) {
|
|
212
200
|
const panel = panels.find((panel2) => panel2.id === id);
|
|
213
201
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.minSize, src: "setToMinSize" });
|
|
214
202
|
},
|
|
215
|
-
/**
|
|
216
|
-
* Function to set a panel to its maximum size.
|
|
217
|
-
*/
|
|
218
203
|
setToMaxSize(id) {
|
|
219
204
|
const panel = panels.find((panel2) => panel2.id === id);
|
|
220
205
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.maxSize, src: "setToMaxSize" });
|
|
221
206
|
},
|
|
222
|
-
/**
|
|
223
|
-
* Function to set the size of a panel.
|
|
224
|
-
*/
|
|
225
207
|
setSize(id, size) {
|
|
226
208
|
send({ type: "SET_PANEL_SIZE", id, size });
|
|
227
209
|
},
|
|
228
|
-
/**
|
|
229
|
-
* Returns the state details for a resize trigger.
|
|
230
|
-
*/
|
|
231
210
|
getResizeTriggerState(props) {
|
|
232
211
|
const { id, disabled } = props;
|
|
233
212
|
const ids = id.split(":");
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/splitter.anatomy.ts","../src/splitter.connect.ts","../src/splitter.dom.ts","../src/splitter.utils.ts","../src/splitter.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"splitter\").parts(\"root\", \"panel\", \"toggleTrigger\", \"resizeTrigger\")\n\nexport const parts = anatomy.build()\n","import { EventKeyMap, getEventKey, getEventStep } from \"@zag-js/dom-event\"\nimport { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./splitter.anatomy\"\nimport { dom } from \"./splitter.dom\"\nimport type { PanelId, PanelProps, ResizeTriggerProps, Send, State } from \"./splitter.types\"\nimport { getHandleBounds } from \"./splitter.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {\n const isHorizontal = state.context.isHorizontal\n const isFocused = state.hasTag(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const panels = state.context.panels\n\n const api = {\n /**\n * Whether the splitter is focused.\n */\n isFocused,\n /**\n * Whether the splitter is being dragged.\n */\n isDragging,\n /**\n * The bounds of the currently dragged splitter handle.\n */\n bounds: getHandleBounds(state.context),\n /**\n * Function to set a panel to its minimum size.\n */\n setToMinSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.minSize, src: \"setToMinSize\" })\n },\n /**\n * Function to set a panel to its maximum size.\n */\n setToMaxSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.maxSize, src: \"setToMaxSize\" })\n },\n /**\n * Function to set the size of a panel.\n */\n setSize(id: PanelId, size: number) {\n send({ type: \"SET_PANEL_SIZE\", id, size })\n },\n /**\n * Returns the state details for a resize trigger.\n */\n getResizeTriggerState(props: ResizeTriggerProps) {\n const { id, disabled } = props\n const ids = id.split(\":\")\n const panelIds = ids.map((id) => dom.getPanelId(state.context, id))\n const panels = getHandleBounds(state.context, id)\n\n return {\n isDisabled: !!disabled,\n isFocused: state.context.activeResizeId === id && isFocused,\n panelIds,\n min: panels?.min,\n max: panels?.max,\n value: 0,\n }\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-orientation\": state.context.orientation,\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: {\n display: \"flex\",\n flexDirection: isHorizontal ? \"row\" : \"column\",\n height: \"100%\",\n width: \"100%\",\n overflow: \"hidden\",\n },\n }),\n\n getPanelProps(props: PanelProps) {\n const { id } = props\n return normalize.element({\n ...parts.panel.attrs,\n dir: state.context.dir,\n id: dom.getPanelId(state.context, id),\n \"data-ownedby\": dom.getRootId(state.context),\n style: dom.getPanelStyle(state.context, id),\n })\n },\n\n getResizeTriggerProps(props: ResizeTriggerProps) {\n const { id, disabled, step = 1 } = props\n const triggerState = api.getResizeTriggerState(props)\n\n return normalize.element({\n ...parts.resizeTrigger.attrs,\n dir: state.context.dir,\n id: dom.getResizeTriggerId(state.context, id),\n role: \"separator\",\n \"data-ownedby\": dom.getRootId(state.context),\n tabIndex: disabled ? undefined : 0,\n \"aria-valuenow\": triggerState.value,\n \"aria-valuemin\": triggerState.min,\n \"aria-valuemax\": triggerState.max,\n \"data-orientation\": state.context.orientation,\n \"aria-orientation\": state.context.orientation,\n \"aria-controls\": triggerState.panelIds.join(\" \"),\n \"data-focus\": dataAttr(triggerState.isFocused),\n \"data-disabled\": dataAttr(disabled),\n style: {\n touchAction: \"none\",\n userSelect: \"none\",\n flex: \"0 0 auto\",\n pointerEvents: isDragging && !triggerState.isFocused ? \"none\" : undefined,\n cursor: isHorizontal ? \"col-resize\" : \"row-resize\",\n [isHorizontal ? \"minHeight\" : \"minWidth\"]: \"0\",\n },\n onPointerDown(event) {\n if (disabled) {\n event.preventDefault()\n return\n }\n send({ type: \"POINTER_DOWN\", id })\n event.preventDefault()\n event.stopPropagation()\n },\n onPointerOver() {\n if (disabled) return\n send({ type: \"POINTER_OVER\", id })\n },\n onPointerLeave() {\n if (disabled) return\n send({ type: \"POINTER_LEAVE\", id })\n },\n onBlur() {\n send(\"BLUR\")\n },\n onFocus() {\n send({ type: \"FOCUS\", id })\n },\n onDoubleClick() {\n if (disabled) return\n send({ type: \"DOUBLE_CLICK\", id })\n },\n onKeyDown(event) {\n if (disabled) return\n const moveStep = getEventStep(event) * step\n const keyMap: EventKeyMap = {\n Enter() {\n send(\"ENTER\")\n },\n ArrowUp() {\n send({ type: \"ARROW_UP\", step: moveStep })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step: moveStep })\n },\n ArrowLeft() {\n send({ type: \"ARROW_LEFT\", step: moveStep })\n },\n ArrowRight() {\n send({ type: \"ARROW_RIGHT\", step: moveStep })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n }\n\n return api\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { JSX, Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, PanelId } from \"./splitter.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`,\n getResizeTriggerId: (ctx: Ctx, id: string) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`,\n getToggleTriggerId: (ctx: Ctx) => ctx.ids?.toggleTrigger?.(ctx.id) ?? `splitter:${ctx.id}:toggle-btn`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`,\n getPanelId: (ctx: Ctx, id: string | number) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`,\n globalCursorId: (ctx: Ctx) => `splitter:${ctx.id}:global-cursor`,\n\n getRootEl: (ctx: Ctx) => dom.queryById(ctx, dom.getRootId(ctx)),\n getResizeTriggerEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getResizeTriggerId(ctx, id)),\n getPanelEl: (ctx: Ctx, id: string | number) => dom.getById(ctx, dom.getPanelId(ctx, id)),\n\n getCursor(ctx: Ctx) {\n const x = ctx.isHorizontal\n let cursor: Style[\"cursor\"] = x ? \"col-resize\" : \"row-resize\"\n if (ctx.activeResizeState.isAtMin) cursor = x ? \"e-resize\" : \"s-resize\"\n if (ctx.activeResizeState.isAtMax) cursor = x ? \"w-resize\" : \"n-resize\"\n return cursor\n },\n\n getPanelStyle(ctx: Ctx, id: PanelId): JSX.CSSProperties {\n const flexGrow = ctx.panels.find((panel) => panel.id === id)?.size ?? \"0\"\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n overflow: \"hidden\",\n }\n },\n\n getActiveHandleEl(ctx: Ctx) {\n const activeId = ctx.activeResizeId\n if (activeId == null) return\n return dom.getById(ctx, dom.getResizeTriggerId(ctx, activeId))\n },\n\n getResizeTriggerEls(ctx: Ctx) {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n return queryAll(dom.getRootEl(ctx), `[role=separator][data-ownedby='${ownerId}']`)\n },\n\n setupGlobalCursor(ctx: Ctx) {\n const styleEl = dom.getById(ctx, dom.globalCursorId(ctx))\n const textContent = `* { cursor: ${dom.getCursor(ctx)} !important; }`\n if (styleEl) {\n styleEl.textContent = textContent\n } else {\n const style = dom.getDoc(ctx).createElement(\"style\")\n style.id = dom.globalCursorId(ctx)\n style.textContent = textContent\n dom.getDoc(ctx).head.appendChild(style)\n }\n },\n\n removeGlobalCursor(ctx: Ctx) {\n dom.getById(ctx, dom.globalCursorId(ctx))?.remove()\n },\n})\n","import type { MachineContext as Ctx, NormalizedPanelData } from \"./splitter.types\"\n\nfunction validateSize(key: string, size: number) {\n if (Math.floor(size) > 100) {\n throw new Error(`Total ${key} of panels cannot be greater than 100`)\n }\n}\n\nexport function getNormalizedPanels(ctx: Ctx): NormalizedPanelData {\n let numOfPanelsWithoutSize = 0\n let totalSize = 0\n let totalMinSize = 0\n\n const panels = ctx.size.map((panel) => {\n const minSize = panel.minSize ?? 0\n const maxSize = panel.maxSize ?? 100\n\n totalMinSize += minSize\n\n if (panel.size == null) {\n numOfPanelsWithoutSize++\n } else {\n totalSize += panel.size\n }\n\n return {\n ...panel,\n minSize,\n maxSize,\n }\n })\n\n validateSize(\"minSize\", totalMinSize)\n validateSize(\"size\", totalSize)\n\n let end = 0\n let remainingSize = 0\n\n const result = panels.map((panel) => {\n let start = end\n\n if (panel.size != null) {\n end += panel.size\n remainingSize = panel.size - panel.minSize\n return {\n ...panel,\n start,\n end,\n remainingSize,\n }\n }\n\n const size = (100 - totalSize) / numOfPanelsWithoutSize\n end += size\n remainingSize = size - panel.minSize\n\n return { ...panel, size, start, end, remainingSize }\n })\n\n return result as NormalizedPanelData\n}\n\nexport function getHandlePanels(ctx: Ctx, id = ctx.activeResizeId) {\n const [beforeId, afterId] = id?.split(\":\") ?? []\n if (!beforeId || !afterId) return\n\n const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId)\n const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId)\n if (beforeIndex === -1 || afterIndex === -1) return\n\n const before = ctx.previousPanels[beforeIndex]\n const after = ctx.previousPanels[afterIndex]\n\n return {\n before: {\n ...before,\n index: beforeIndex,\n },\n after: {\n ...after,\n index: afterIndex,\n },\n }\n}\n\nexport function getHandleBounds(ctx: Ctx, id = ctx.activeResizeId) {\n const panels = getHandlePanels(ctx, id)\n if (!panels) return\n\n const { before, after } = panels\n\n return {\n min: Math.max(before.start + before.minSize, after.end - after.maxSize),\n max: Math.min(after.end - after.minSize, before.maxSize + before.start),\n }\n}\n\nexport function getPanelBounds(ctx: Ctx, id?: string | null) {\n const bounds = getHandleBounds(ctx, id)\n const panels = getHandlePanels(ctx, id)\n\n if (!bounds || !panels) return\n const { before, after } = panels\n\n const beforeMin = Math.abs(before.start - bounds.min)\n const afterMin = after.size + (before.size - beforeMin)\n\n const beforeMax = Math.abs(before.start - bounds.max)\n const afterMax = after.size - (beforeMax - before.size)\n\n return {\n before: {\n index: before.index,\n min: beforeMin,\n max: beforeMax,\n isAtMin: beforeMin === before.size,\n isAtMax: beforeMax === before.size,\n up(step: number) {\n return Math.min(before.size + step, beforeMax)\n },\n down(step: number) {\n return Math.max(before.size - step, beforeMin)\n },\n },\n after: {\n index: after.index,\n min: afterMin,\n max: afterMax,\n isAtMin: afterMin === after.size,\n isAtMax: afterMax === after.size,\n up(step: number) {\n return Math.min(after.size + step, afterMin)\n },\n down(step: number) {\n return Math.max(after.size - step, afterMax)\n },\n },\n }\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { getRelativePoint, trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./splitter.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./splitter.types\"\nimport { clamp, getHandleBounds, getHandlePanels, getNormalizedPanels, getPanelBounds } from \"./splitter.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"splitter\",\n initial: \"idle\",\n context: {\n orientation: \"horizontal\",\n activeResizeId: null,\n previousPanels: [],\n size: [],\n initialSize: [],\n activeResizeState: {\n isAtMin: false,\n isAtMax: false,\n },\n ...ctx,\n },\n\n created: [\"setPreviousPanels\", \"setInitialSize\"],\n\n watch: {\n size: [\"setActiveResizeState\"],\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n panels: (ctx) => getNormalizedPanels(ctx),\n },\n\n on: {\n SET_PANEL_SIZE: {\n actions: \"setPanelSize\",\n },\n },\n states: {\n idle: {\n entry: [\"clearActiveHandleId\"],\n on: {\n POINTER_OVER: {\n target: \"hover:temp\",\n actions: [\"setActiveHandleId\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"setActiveHandleId\"],\n },\n DOUBLE_CLICK: {\n actions: [\"resetStartPanel\", \"setPreviousPanels\"],\n },\n },\n },\n\n \"hover:temp\": {\n after: {\n HOVER_DELAY: \"hover\",\n },\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n hover: {\n tags: [\"focus\"],\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n on: {\n BLUR: \"idle\",\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ENTER: [\n {\n guard: \"isStartPanelAtMax\",\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n { actions: [\"setStartPanelToMax\", \"setPreviousPanels\"] },\n ],\n HOME: {\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n END: {\n actions: [\"setStartPanelToMax\", \"setPreviousPanels\"],\n },\n },\n },\n\n dragging: {\n tags: [\"focus\"],\n entry: \"focusResizeHandle\",\n activities: [\"trackPointerMove\"],\n on: {\n POINTER_MOVE: {\n actions: [\"setPointerValue\", \"setGlobalCursor\"],\n },\n POINTER_UP: {\n target: \"focused\",\n actions: [\"invokeOnResizeEnd\", \"setPreviousPanels\", \"clearGlobalCursor\", \"blurResizeHandle\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackPointerMove: (ctx, _evt, { send }) => {\n const doc = dom.getDoc(ctx)\n return trackPointerMove(doc, {\n onPointerMove(info) {\n send({ type: \"POINTER_MOVE\", point: info.point })\n },\n onPointerUp() {\n send(\"POINTER_UP\")\n },\n })\n },\n },\n guards: {\n isStartPanelAtMin: (ctx) => ctx.activeResizeState.isAtMin,\n isStartPanelAtMax: (ctx) => ctx.activeResizeState.isAtMax,\n isHorizontal: (ctx) => ctx.isHorizontal,\n isVertical: (ctx) => !ctx.isHorizontal,\n },\n delays: {\n HOVER_DELAY: 250,\n },\n actions: {\n setGlobalCursor(ctx) {\n dom.setupGlobalCursor(ctx)\n },\n clearGlobalCursor(ctx) {\n dom.removeGlobalCursor(ctx)\n },\n invokeOnResize(ctx) {\n ctx.onResize?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeStart(ctx) {\n ctx.onResizeStart?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeEnd(ctx) {\n ctx.onResizeEnd?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n setActiveHandleId(ctx, evt) {\n ctx.activeResizeId = evt.id\n },\n clearActiveHandleId(ctx) {\n ctx.activeResizeId = null\n },\n setInitialSize(ctx) {\n ctx.initialSize = ctx.panels.slice().map((panel) => ({\n id: panel.id,\n size: panel.size,\n }))\n },\n setPanelSize(ctx, evt) {\n const { id, size } = evt\n ctx.size = ctx.size.map((panel) => {\n const panelSize = clamp(size, panel.minSize ?? 0, panel.maxSize ?? 100)\n return panel.id === id ? { ...panel, size: panelSize } : panel\n })\n },\n setStartPanelToMin(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.min\n ctx.size[after.index].size = after.min\n },\n setStartPanelToMax(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.max\n ctx.size[after.index].size = after.max\n },\n expandStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.up(evt.step)\n ctx.size[after.index].size = after.down(evt.step)\n },\n shrinkStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.down(evt.step)\n ctx.size[after.index].size = after.up(evt.step)\n },\n resetStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx, evt.id)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = ctx.initialSize[before.index].size\n ctx.size[after.index].size = ctx.initialSize[after.index].size\n },\n focusResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.focus({ preventScroll: true })\n })\n },\n blurResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.blur()\n })\n },\n setPreviousPanels(ctx) {\n ctx.previousPanels = ctx.panels.slice()\n },\n setActiveResizeState(ctx) {\n const panels = getPanelBounds(ctx)\n if (!panels) return\n const { before } = panels\n ctx.activeResizeState = {\n isAtMin: before.isAtMin,\n isAtMax: before.isAtMax,\n }\n },\n setPointerValue(ctx, evt) {\n const panels = getHandlePanels(ctx)\n const bounds = getHandleBounds(ctx)\n\n if (!panels || !bounds) return\n\n const rootEl = dom.getRootEl(ctx)\n const relativePoint = getRelativePoint(evt.point, rootEl)\n const percentValue = relativePoint.getPercentValue({\n dir: ctx.dir,\n orientation: ctx.orientation,\n })\n\n let pointValue = percentValue * 100\n\n // update active resize state here because we use `previousPanels` in the calculations\n ctx.activeResizeState = {\n isAtMin: pointValue < bounds.min,\n isAtMax: pointValue > bounds.max,\n }\n\n pointValue = clamp(pointValue, bounds.min, bounds.max)\n\n const { before, after } = panels\n\n const offset = pointValue - before.end\n ctx.size[before.index].size = before.size + offset\n ctx.size[after.index].size = after.size - offset\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["panel","id","panels","ctx"]}
|
|
1
|
+
{"version":3,"sources":["../src/splitter.anatomy.ts","../src/splitter.connect.ts","../src/splitter.dom.ts","../src/splitter.utils.ts","../src/splitter.machine.ts"],"sourcesContent":["import { createAnatomy } from \"@zag-js/anatomy\"\n\nexport const anatomy = createAnatomy(\"splitter\").parts(\"root\", \"panel\", \"toggleTrigger\", \"resizeTrigger\")\n\nexport const parts = anatomy.build()\n","import { getEventKey, getEventStep, type EventKeyMap } from \"@zag-js/dom-event\"\nimport { dataAttr } from \"@zag-js/dom-query\"\nimport type { NormalizeProps, PropTypes } from \"@zag-js/types\"\nimport { parts } from \"./splitter.anatomy\"\nimport { dom } from \"./splitter.dom\"\nimport type { PanelId, PanelProps, PublicApi, ResizeTriggerProps, Send, State } from \"./splitter.types\"\nimport { getHandleBounds } from \"./splitter.utils\"\n\nexport function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {\n const isHorizontal = state.context.isHorizontal\n const isFocused = state.hasTag(\"focus\")\n const isDragging = state.matches(\"dragging\")\n const panels = state.context.panels\n\n const api = {\n isFocused,\n isDragging,\n bounds: getHandleBounds(state.context),\n\n setToMinSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.minSize, src: \"setToMinSize\" })\n },\n\n setToMaxSize(id: PanelId) {\n const panel = panels.find((panel) => panel.id === id)\n send({ type: \"SET_PANEL_SIZE\", id, size: panel?.maxSize, src: \"setToMaxSize\" })\n },\n\n setSize(id: PanelId, size: number) {\n send({ type: \"SET_PANEL_SIZE\", id, size })\n },\n\n getResizeTriggerState(props: ResizeTriggerProps) {\n const { id, disabled } = props\n const ids = id.split(\":\")\n const panelIds = ids.map((id) => dom.getPanelId(state.context, id))\n const panels = getHandleBounds(state.context, id)\n\n return {\n isDisabled: !!disabled,\n isFocused: state.context.activeResizeId === id && isFocused,\n panelIds,\n min: panels?.min,\n max: panels?.max,\n value: 0,\n }\n },\n\n rootProps: normalize.element({\n ...parts.root.attrs,\n \"data-orientation\": state.context.orientation,\n id: dom.getRootId(state.context),\n dir: state.context.dir,\n style: {\n display: \"flex\",\n flexDirection: isHorizontal ? \"row\" : \"column\",\n height: \"100%\",\n width: \"100%\",\n overflow: \"hidden\",\n },\n }),\n\n getPanelProps(props: PanelProps) {\n const { id } = props\n return normalize.element({\n ...parts.panel.attrs,\n dir: state.context.dir,\n id: dom.getPanelId(state.context, id),\n \"data-ownedby\": dom.getRootId(state.context),\n style: dom.getPanelStyle(state.context, id),\n })\n },\n\n getResizeTriggerProps(props: ResizeTriggerProps) {\n const { id, disabled, step = 1 } = props\n const triggerState = api.getResizeTriggerState(props)\n\n return normalize.element({\n ...parts.resizeTrigger.attrs,\n dir: state.context.dir,\n id: dom.getResizeTriggerId(state.context, id),\n role: \"separator\",\n \"data-ownedby\": dom.getRootId(state.context),\n tabIndex: disabled ? undefined : 0,\n \"aria-valuenow\": triggerState.value,\n \"aria-valuemin\": triggerState.min,\n \"aria-valuemax\": triggerState.max,\n \"data-orientation\": state.context.orientation,\n \"aria-orientation\": state.context.orientation,\n \"aria-controls\": triggerState.panelIds.join(\" \"),\n \"data-focus\": dataAttr(triggerState.isFocused),\n \"data-disabled\": dataAttr(disabled),\n style: {\n touchAction: \"none\",\n userSelect: \"none\",\n flex: \"0 0 auto\",\n pointerEvents: isDragging && !triggerState.isFocused ? \"none\" : undefined,\n cursor: isHorizontal ? \"col-resize\" : \"row-resize\",\n [isHorizontal ? \"minHeight\" : \"minWidth\"]: \"0\",\n },\n onPointerDown(event) {\n if (disabled) {\n event.preventDefault()\n return\n }\n send({ type: \"POINTER_DOWN\", id })\n event.preventDefault()\n event.stopPropagation()\n },\n onPointerOver() {\n if (disabled) return\n send({ type: \"POINTER_OVER\", id })\n },\n onPointerLeave() {\n if (disabled) return\n send({ type: \"POINTER_LEAVE\", id })\n },\n onBlur() {\n send(\"BLUR\")\n },\n onFocus() {\n send({ type: \"FOCUS\", id })\n },\n onDoubleClick() {\n if (disabled) return\n send({ type: \"DOUBLE_CLICK\", id })\n },\n onKeyDown(event) {\n if (disabled) return\n const moveStep = getEventStep(event) * step\n const keyMap: EventKeyMap = {\n Enter() {\n send(\"ENTER\")\n },\n ArrowUp() {\n send({ type: \"ARROW_UP\", step: moveStep })\n },\n ArrowDown() {\n send({ type: \"ARROW_DOWN\", step: moveStep })\n },\n ArrowLeft() {\n send({ type: \"ARROW_LEFT\", step: moveStep })\n },\n ArrowRight() {\n send({ type: \"ARROW_RIGHT\", step: moveStep })\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n }\n\n const key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n exec(event)\n event.preventDefault()\n }\n },\n })\n },\n }\n\n return api\n}\n","import { createScope, queryAll } from \"@zag-js/dom-query\"\nimport type { JSX, Style } from \"@zag-js/types\"\nimport type { MachineContext as Ctx, PanelId } from \"./splitter.types\"\n\nexport const dom = createScope({\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`,\n getResizeTriggerId: (ctx: Ctx, id: string) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`,\n getToggleTriggerId: (ctx: Ctx) => ctx.ids?.toggleTrigger?.(ctx.id) ?? `splitter:${ctx.id}:toggle-btn`,\n getLabelId: (ctx: Ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`,\n getPanelId: (ctx: Ctx, id: string | number) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`,\n globalCursorId: (ctx: Ctx) => `splitter:${ctx.id}:global-cursor`,\n\n getRootEl: (ctx: Ctx) => dom.queryById(ctx, dom.getRootId(ctx)),\n getResizeTriggerEl: (ctx: Ctx, id: string) => dom.getById(ctx, dom.getResizeTriggerId(ctx, id)),\n getPanelEl: (ctx: Ctx, id: string | number) => dom.getById(ctx, dom.getPanelId(ctx, id)),\n\n getCursor(ctx: Ctx) {\n const x = ctx.isHorizontal\n let cursor: Style[\"cursor\"] = x ? \"col-resize\" : \"row-resize\"\n if (ctx.activeResizeState.isAtMin) cursor = x ? \"e-resize\" : \"s-resize\"\n if (ctx.activeResizeState.isAtMax) cursor = x ? \"w-resize\" : \"n-resize\"\n return cursor\n },\n\n getPanelStyle(ctx: Ctx, id: PanelId): JSX.CSSProperties {\n const flexGrow = ctx.panels.find((panel) => panel.id === id)?.size ?? \"0\"\n return {\n flexBasis: 0,\n flexGrow,\n flexShrink: 1,\n overflow: \"hidden\",\n }\n },\n\n getActiveHandleEl(ctx: Ctx) {\n const activeId = ctx.activeResizeId\n if (activeId == null) return\n return dom.getById(ctx, dom.getResizeTriggerId(ctx, activeId))\n },\n\n getResizeTriggerEls(ctx: Ctx) {\n const ownerId = CSS.escape(dom.getRootId(ctx))\n return queryAll(dom.getRootEl(ctx), `[role=separator][data-ownedby='${ownerId}']`)\n },\n\n setupGlobalCursor(ctx: Ctx) {\n const styleEl = dom.getById(ctx, dom.globalCursorId(ctx))\n const textContent = `* { cursor: ${dom.getCursor(ctx)} !important; }`\n if (styleEl) {\n styleEl.textContent = textContent\n } else {\n const style = dom.getDoc(ctx).createElement(\"style\")\n style.id = dom.globalCursorId(ctx)\n style.textContent = textContent\n dom.getDoc(ctx).head.appendChild(style)\n }\n },\n\n removeGlobalCursor(ctx: Ctx) {\n dom.getById(ctx, dom.globalCursorId(ctx))?.remove()\n },\n})\n","import type { MachineContext as Ctx, NormalizedPanelData } from \"./splitter.types\"\n\nfunction validateSize(key: string, size: number) {\n if (Math.floor(size) > 100) {\n throw new Error(`Total ${key} of panels cannot be greater than 100`)\n }\n}\n\nexport function getNormalizedPanels(ctx: Ctx): NormalizedPanelData {\n let numOfPanelsWithoutSize = 0\n let totalSize = 0\n let totalMinSize = 0\n\n const panels = ctx.size.map((panel) => {\n const minSize = panel.minSize ?? 0\n const maxSize = panel.maxSize ?? 100\n\n totalMinSize += minSize\n\n if (panel.size == null) {\n numOfPanelsWithoutSize++\n } else {\n totalSize += panel.size\n }\n\n return {\n ...panel,\n minSize,\n maxSize,\n }\n })\n\n validateSize(\"minSize\", totalMinSize)\n validateSize(\"size\", totalSize)\n\n let end = 0\n let remainingSize = 0\n\n const result = panels.map((panel) => {\n let start = end\n\n if (panel.size != null) {\n end += panel.size\n remainingSize = panel.size - panel.minSize\n return {\n ...panel,\n start,\n end,\n remainingSize,\n }\n }\n\n const size = (100 - totalSize) / numOfPanelsWithoutSize\n end += size\n remainingSize = size - panel.minSize\n\n return { ...panel, size, start, end, remainingSize }\n })\n\n return result as NormalizedPanelData\n}\n\nexport function getHandlePanels(ctx: Ctx, id = ctx.activeResizeId) {\n const [beforeId, afterId] = id?.split(\":\") ?? []\n if (!beforeId || !afterId) return\n\n const beforeIndex = ctx.previousPanels.findIndex((panel) => panel.id === beforeId)\n const afterIndex = ctx.previousPanels.findIndex((panel) => panel.id === afterId)\n if (beforeIndex === -1 || afterIndex === -1) return\n\n const before = ctx.previousPanels[beforeIndex]\n const after = ctx.previousPanels[afterIndex]\n\n return {\n before: {\n ...before,\n index: beforeIndex,\n },\n after: {\n ...after,\n index: afterIndex,\n },\n }\n}\n\nexport function getHandleBounds(ctx: Ctx, id = ctx.activeResizeId) {\n const panels = getHandlePanels(ctx, id)\n if (!panels) return\n\n const { before, after } = panels\n\n return {\n min: Math.max(before.start + before.minSize, after.end - after.maxSize),\n max: Math.min(after.end - after.minSize, before.maxSize + before.start),\n }\n}\n\nexport function getPanelBounds(ctx: Ctx, id?: string | null) {\n const bounds = getHandleBounds(ctx, id)\n const panels = getHandlePanels(ctx, id)\n\n if (!bounds || !panels) return\n const { before, after } = panels\n\n const beforeMin = Math.abs(before.start - bounds.min)\n const afterMin = after.size + (before.size - beforeMin)\n\n const beforeMax = Math.abs(before.start - bounds.max)\n const afterMax = after.size - (beforeMax - before.size)\n\n return {\n before: {\n index: before.index,\n min: beforeMin,\n max: beforeMax,\n isAtMin: beforeMin === before.size,\n isAtMax: beforeMax === before.size,\n up(step: number) {\n return Math.min(before.size + step, beforeMax)\n },\n down(step: number) {\n return Math.max(before.size - step, beforeMin)\n },\n },\n after: {\n index: after.index,\n min: afterMin,\n max: afterMax,\n isAtMin: afterMin === after.size,\n isAtMax: afterMax === after.size,\n up(step: number) {\n return Math.min(after.size + step, afterMin)\n },\n down(step: number) {\n return Math.max(after.size - step, afterMax)\n },\n },\n }\n}\n\nexport function clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max)\n}\n","import { createMachine } from \"@zag-js/core\"\nimport { getRelativePoint, trackPointerMove } from \"@zag-js/dom-event\"\nimport { raf } from \"@zag-js/dom-query\"\nimport { compact } from \"@zag-js/utils\"\nimport { dom } from \"./splitter.dom\"\nimport type { MachineContext, MachineState, UserDefinedContext } from \"./splitter.types\"\nimport { clamp, getHandleBounds, getHandlePanels, getNormalizedPanels, getPanelBounds } from \"./splitter.utils\"\n\nexport function machine(userContext: UserDefinedContext) {\n const ctx = compact(userContext)\n return createMachine<MachineContext, MachineState>(\n {\n id: \"splitter\",\n initial: \"idle\",\n context: {\n orientation: \"horizontal\",\n activeResizeId: null,\n previousPanels: [],\n size: [],\n initialSize: [],\n activeResizeState: {\n isAtMin: false,\n isAtMax: false,\n },\n ...ctx,\n },\n\n created: [\"setPreviousPanels\", \"setInitialSize\"],\n\n watch: {\n size: [\"setActiveResizeState\"],\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n panels: (ctx) => getNormalizedPanels(ctx),\n },\n\n on: {\n SET_PANEL_SIZE: {\n actions: \"setPanelSize\",\n },\n },\n states: {\n idle: {\n entry: [\"clearActiveHandleId\"],\n on: {\n POINTER_OVER: {\n target: \"hover:temp\",\n actions: [\"setActiveHandleId\"],\n },\n FOCUS: {\n target: \"focused\",\n actions: [\"setActiveHandleId\"],\n },\n DOUBLE_CLICK: {\n actions: [\"resetStartPanel\", \"setPreviousPanels\"],\n },\n },\n },\n\n \"hover:temp\": {\n after: {\n HOVER_DELAY: \"hover\",\n },\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n hover: {\n tags: [\"focus\"],\n on: {\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"invokeOnResizeStart\"],\n },\n POINTER_LEAVE: \"idle\",\n },\n },\n\n focused: {\n tags: [\"focus\"],\n on: {\n BLUR: \"idle\",\n POINTER_DOWN: {\n target: \"dragging\",\n actions: [\"setActiveHandleId\", \"invokeOnResizeStart\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: [\"shrinkStartPanel\", \"setPreviousPanels\"],\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: [\"expandStartPanel\", \"setPreviousPanels\"],\n },\n ENTER: [\n {\n guard: \"isStartPanelAtMax\",\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n { actions: [\"setStartPanelToMax\", \"setPreviousPanels\"] },\n ],\n HOME: {\n actions: [\"setStartPanelToMin\", \"setPreviousPanels\"],\n },\n END: {\n actions: [\"setStartPanelToMax\", \"setPreviousPanels\"],\n },\n },\n },\n\n dragging: {\n tags: [\"focus\"],\n entry: \"focusResizeHandle\",\n activities: [\"trackPointerMove\"],\n on: {\n POINTER_MOVE: {\n actions: [\"setPointerValue\", \"setGlobalCursor\"],\n },\n POINTER_UP: {\n target: \"focused\",\n actions: [\"invokeOnResizeEnd\", \"setPreviousPanels\", \"clearGlobalCursor\", \"blurResizeHandle\"],\n },\n },\n },\n },\n },\n {\n activities: {\n trackPointerMove: (ctx, _evt, { send }) => {\n const doc = dom.getDoc(ctx)\n return trackPointerMove(doc, {\n onPointerMove(info) {\n send({ type: \"POINTER_MOVE\", point: info.point })\n },\n onPointerUp() {\n send(\"POINTER_UP\")\n },\n })\n },\n },\n guards: {\n isStartPanelAtMin: (ctx) => ctx.activeResizeState.isAtMin,\n isStartPanelAtMax: (ctx) => ctx.activeResizeState.isAtMax,\n isHorizontal: (ctx) => ctx.isHorizontal,\n isVertical: (ctx) => !ctx.isHorizontal,\n },\n delays: {\n HOVER_DELAY: 250,\n },\n actions: {\n setGlobalCursor(ctx) {\n dom.setupGlobalCursor(ctx)\n },\n clearGlobalCursor(ctx) {\n dom.removeGlobalCursor(ctx)\n },\n invokeOnResize(ctx) {\n ctx.onResize?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeStart(ctx) {\n ctx.onResizeStart?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n invokeOnResizeEnd(ctx) {\n ctx.onResizeEnd?.({ size: ctx.size, activeHandleId: ctx.activeResizeId })\n },\n setActiveHandleId(ctx, evt) {\n ctx.activeResizeId = evt.id\n },\n clearActiveHandleId(ctx) {\n ctx.activeResizeId = null\n },\n setInitialSize(ctx) {\n ctx.initialSize = ctx.panels.slice().map((panel) => ({\n id: panel.id,\n size: panel.size,\n }))\n },\n setPanelSize(ctx, evt) {\n const { id, size } = evt\n ctx.size = ctx.size.map((panel) => {\n const panelSize = clamp(size, panel.minSize ?? 0, panel.maxSize ?? 100)\n return panel.id === id ? { ...panel, size: panelSize } : panel\n })\n },\n setStartPanelToMin(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.min\n ctx.size[after.index].size = after.min\n },\n setStartPanelToMax(ctx) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.max\n ctx.size[after.index].size = after.max\n },\n expandStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.up(evt.step)\n ctx.size[after.index].size = after.down(evt.step)\n },\n shrinkStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = before.down(evt.step)\n ctx.size[after.index].size = after.up(evt.step)\n },\n resetStartPanel(ctx, evt) {\n const bounds = getPanelBounds(ctx, evt.id)\n if (!bounds) return\n const { before, after } = bounds\n ctx.size[before.index].size = ctx.initialSize[before.index].size\n ctx.size[after.index].size = ctx.initialSize[after.index].size\n },\n focusResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.focus({ preventScroll: true })\n })\n },\n blurResizeHandle(ctx) {\n raf(() => {\n dom.getActiveHandleEl(ctx)?.blur()\n })\n },\n setPreviousPanels(ctx) {\n ctx.previousPanels = ctx.panels.slice()\n },\n setActiveResizeState(ctx) {\n const panels = getPanelBounds(ctx)\n if (!panels) return\n const { before } = panels\n ctx.activeResizeState = {\n isAtMin: before.isAtMin,\n isAtMax: before.isAtMax,\n }\n },\n setPointerValue(ctx, evt) {\n const panels = getHandlePanels(ctx)\n const bounds = getHandleBounds(ctx)\n\n if (!panels || !bounds) return\n\n const rootEl = dom.getRootEl(ctx)\n const relativePoint = getRelativePoint(evt.point, rootEl)\n const percentValue = relativePoint.getPercentValue({\n dir: ctx.dir,\n orientation: ctx.orientation,\n })\n\n let pointValue = percentValue * 100\n\n // update active resize state here because we use `previousPanels` in the calculations\n ctx.activeResizeState = {\n isAtMin: pointValue < bounds.min,\n isAtMax: pointValue > bounds.max,\n }\n\n pointValue = clamp(pointValue, bounds.min, bounds.max)\n\n const { before, after } = panels\n\n const offset = pointValue - before.end\n ctx.size[before.index].size = before.size + offset\n ctx.size[after.index].size = after.size - offset\n },\n },\n },\n )\n}\n"],"mappings":"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","names":["panel","id","panels","ctx"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zag-js/splitter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.12.0",
|
|
4
4
|
"description": "Core logic for the splitter widget implemented as a state machine",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"js",
|
|
@@ -28,13 +28,13 @@
|
|
|
28
28
|
"url": "https://github.com/chakra-ui/zag/issues"
|
|
29
29
|
},
|
|
30
30
|
"dependencies": {
|
|
31
|
-
"@zag-js/anatomy": "0.
|
|
32
|
-
"@zag-js/core": "0.
|
|
33
|
-
"@zag-js/types": "0.
|
|
34
|
-
"@zag-js/dom-query": "0.
|
|
35
|
-
"@zag-js/dom-event": "0.
|
|
36
|
-
"@zag-js/number-utils": "0.
|
|
37
|
-
"@zag-js/utils": "0.
|
|
31
|
+
"@zag-js/anatomy": "0.12.0",
|
|
32
|
+
"@zag-js/core": "0.12.0",
|
|
33
|
+
"@zag-js/types": "0.12.0",
|
|
34
|
+
"@zag-js/dom-query": "0.12.0",
|
|
35
|
+
"@zag-js/dom-event": "0.12.0",
|
|
36
|
+
"@zag-js/number-utils": "0.12.0",
|
|
37
|
+
"@zag-js/utils": "0.12.0"
|
|
38
38
|
},
|
|
39
39
|
"devDependencies": {
|
|
40
40
|
"clean-package": "2.2.0"
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,10 @@
|
|
|
1
1
|
export { anatomy } from "./splitter.anatomy"
|
|
2
2
|
export { connect } from "./splitter.connect"
|
|
3
3
|
export { machine } from "./splitter.machine"
|
|
4
|
-
export type {
|
|
4
|
+
export type {
|
|
5
|
+
UserDefinedContext as Context,
|
|
6
|
+
MachineState,
|
|
7
|
+
PanelProps,
|
|
8
|
+
PublicApi,
|
|
9
|
+
ResizeTriggerProps,
|
|
10
|
+
} from "./splitter.types"
|
package/src/splitter.connect.ts
CHANGED
|
@@ -1,53 +1,36 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { getEventKey, getEventStep, type EventKeyMap } from "@zag-js/dom-event"
|
|
2
2
|
import { dataAttr } from "@zag-js/dom-query"
|
|
3
3
|
import type { NormalizeProps, PropTypes } from "@zag-js/types"
|
|
4
4
|
import { parts } from "./splitter.anatomy"
|
|
5
5
|
import { dom } from "./splitter.dom"
|
|
6
|
-
import type { PanelId, PanelProps, ResizeTriggerProps, Send, State } from "./splitter.types"
|
|
6
|
+
import type { PanelId, PanelProps, PublicApi, ResizeTriggerProps, Send, State } from "./splitter.types"
|
|
7
7
|
import { getHandleBounds } from "./splitter.utils"
|
|
8
8
|
|
|
9
|
-
export function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>) {
|
|
9
|
+
export function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): PublicApi<T> {
|
|
10
10
|
const isHorizontal = state.context.isHorizontal
|
|
11
11
|
const isFocused = state.hasTag("focus")
|
|
12
12
|
const isDragging = state.matches("dragging")
|
|
13
13
|
const panels = state.context.panels
|
|
14
14
|
|
|
15
15
|
const api = {
|
|
16
|
-
/**
|
|
17
|
-
* Whether the splitter is focused.
|
|
18
|
-
*/
|
|
19
16
|
isFocused,
|
|
20
|
-
/**
|
|
21
|
-
* Whether the splitter is being dragged.
|
|
22
|
-
*/
|
|
23
17
|
isDragging,
|
|
24
|
-
/**
|
|
25
|
-
* The bounds of the currently dragged splitter handle.
|
|
26
|
-
*/
|
|
27
18
|
bounds: getHandleBounds(state.context),
|
|
28
|
-
|
|
29
|
-
* Function to set a panel to its minimum size.
|
|
30
|
-
*/
|
|
19
|
+
|
|
31
20
|
setToMinSize(id: PanelId) {
|
|
32
21
|
const panel = panels.find((panel) => panel.id === id)
|
|
33
22
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.minSize, src: "setToMinSize" })
|
|
34
23
|
},
|
|
35
|
-
|
|
36
|
-
* Function to set a panel to its maximum size.
|
|
37
|
-
*/
|
|
24
|
+
|
|
38
25
|
setToMaxSize(id: PanelId) {
|
|
39
26
|
const panel = panels.find((panel) => panel.id === id)
|
|
40
27
|
send({ type: "SET_PANEL_SIZE", id, size: panel?.maxSize, src: "setToMaxSize" })
|
|
41
28
|
},
|
|
42
|
-
|
|
43
|
-
* Function to set the size of a panel.
|
|
44
|
-
*/
|
|
29
|
+
|
|
45
30
|
setSize(id: PanelId, size: number) {
|
|
46
31
|
send({ type: "SET_PANEL_SIZE", id, size })
|
|
47
32
|
},
|
|
48
|
-
|
|
49
|
-
* Returns the state details for a resize trigger.
|
|
50
|
-
*/
|
|
33
|
+
|
|
51
34
|
getResizeTriggerState(props: ResizeTriggerProps) {
|
|
52
35
|
const { id, disabled } = props
|
|
53
36
|
const ids = id.split(":")
|
package/src/splitter.types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { StateMachine as S } from "@zag-js/core"
|
|
2
|
-
import type { CommonProperties, Context, DirectionProperty, RequiredBy } from "@zag-js/types"
|
|
2
|
+
import type { CommonProperties, Context, DirectionProperty, PropTypes, RequiredBy } from "@zag-js/types"
|
|
3
3
|
|
|
4
4
|
export type PanelId = string | number
|
|
5
5
|
|
|
@@ -51,6 +51,52 @@ type PublicContext = DirectionProperty &
|
|
|
51
51
|
ids?: ElementIds
|
|
52
52
|
}
|
|
53
53
|
|
|
54
|
+
export type PublicApi<T extends PropTypes = PropTypes> = {
|
|
55
|
+
/**
|
|
56
|
+
* Whether the splitter is focused.
|
|
57
|
+
*/
|
|
58
|
+
isFocused: boolean
|
|
59
|
+
/**
|
|
60
|
+
* Whether the splitter is being dragged.
|
|
61
|
+
*/
|
|
62
|
+
isDragging: boolean
|
|
63
|
+
/**
|
|
64
|
+
* The bounds of the currently dragged splitter handle.
|
|
65
|
+
*/
|
|
66
|
+
bounds:
|
|
67
|
+
| {
|
|
68
|
+
min: number
|
|
69
|
+
max: number
|
|
70
|
+
}
|
|
71
|
+
| undefined
|
|
72
|
+
/**
|
|
73
|
+
* Function to set a panel to its minimum size.
|
|
74
|
+
*/
|
|
75
|
+
setToMinSize(id: PanelId): void
|
|
76
|
+
/**
|
|
77
|
+
* Function to set a panel to its maximum size.
|
|
78
|
+
*/
|
|
79
|
+
setToMaxSize(id: PanelId): void
|
|
80
|
+
/**
|
|
81
|
+
* Function to set the size of a panel.
|
|
82
|
+
*/
|
|
83
|
+
setSize(id: PanelId, size: number): void
|
|
84
|
+
/**
|
|
85
|
+
* Returns the state details for a resize trigger.
|
|
86
|
+
*/
|
|
87
|
+
getResizeTriggerState(props: ResizeTriggerProps): {
|
|
88
|
+
isDisabled: boolean
|
|
89
|
+
isFocused: boolean
|
|
90
|
+
panelIds: string[]
|
|
91
|
+
min: number | undefined
|
|
92
|
+
max: number | undefined
|
|
93
|
+
value: number
|
|
94
|
+
}
|
|
95
|
+
rootProps: T["element"]
|
|
96
|
+
getPanelProps(props: PanelProps): T["element"]
|
|
97
|
+
getResizeTriggerProps(props: ResizeTriggerProps): T["element"]
|
|
98
|
+
}
|
|
99
|
+
|
|
54
100
|
export type UserDefinedContext = RequiredBy<PublicContext, "id">
|
|
55
101
|
|
|
56
102
|
export type NormalizedPanelData = Array<
|