@zag-js/splitter 0.11.0 → 0.11.2

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 CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as _zag_js_anatomy from '@zag-js/anatomy';
2
- import { RequiredBy, DirectionProperty, CommonProperties, Context, PropTypes, NormalizeProps } from '@zag-js/types';
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, PropTypes, NormalizeProps } from '@zag-js/types';
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(":");
@@ -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.11.0",
3
+ "version": "0.11.2",
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.11.0",
32
- "@zag-js/core": "0.11.0",
33
- "@zag-js/types": "0.11.0",
34
- "@zag-js/dom-query": "0.11.0",
35
- "@zag-js/dom-event": "0.11.0",
36
- "@zag-js/number-utils": "0.11.0",
37
- "@zag-js/utils": "0.11.0"
31
+ "@zag-js/anatomy": "0.11.2",
32
+ "@zag-js/core": "0.11.2",
33
+ "@zag-js/types": "0.11.2",
34
+ "@zag-js/dom-query": "0.11.2",
35
+ "@zag-js/dom-event": "0.11.2",
36
+ "@zag-js/number-utils": "0.11.2",
37
+ "@zag-js/utils": "0.11.2"
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 { MachineState, UserDefinedContext as Context, PanelProps, ResizeTriggerProps } from "./splitter.types"
4
+ export type {
5
+ UserDefinedContext as Context,
6
+ MachineState,
7
+ PanelProps,
8
+ PublicApi,
9
+ ResizeTriggerProps,
10
+ } from "./splitter.types"
@@ -1,53 +1,36 @@
1
- import { EventKeyMap, getEventKey, getEventStep } from "@zag-js/dom-event"
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(":")
@@ -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<