@zag-js/splitter 0.10.5 → 0.11.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zag-js/splitter",
3
- "version": "0.10.5",
3
+ "version": "0.11.1",
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.10.5",
32
- "@zag-js/core": "0.10.5",
33
- "@zag-js/types": "0.10.5",
34
- "@zag-js/dom-query": "0.10.5",
35
- "@zag-js/dom-event": "0.10.5",
36
- "@zag-js/number-utils": "0.10.5",
37
- "@zag-js/utils": "0.10.5"
31
+ "@zag-js/anatomy": "0.11.1",
32
+ "@zag-js/core": "0.11.1",
33
+ "@zag-js/types": "0.11.1",
34
+ "@zag-js/dom-query": "0.11.1",
35
+ "@zag-js/dom-event": "0.11.1",
36
+ "@zag-js/number-utils": "0.11.1",
37
+ "@zag-js/utils": "0.11.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "clean-package": "2.2.0"
@@ -52,7 +52,7 @@
52
52
  "./package.json": "./package.json"
53
53
  },
54
54
  "scripts": {
55
- "build": "vite build -c ../../../vite.config.ts",
55
+ "build": "tsup",
56
56
  "lint": "eslint src --ext .ts,.tsx",
57
57
  "typecheck": "tsc --noEmit"
58
58
  }
@@ -1,3 +0,0 @@
1
- import type { AnatomyInstance, AnatomyPart } from '@zag-js/anatomy';
2
- export declare const anatomy: AnatomyInstance<"root" | "panel" | "toggleTrigger" | "resizeTrigger">;
3
- export declare const parts: Record<"root" | "panel" | "toggleTrigger" | "resizeTrigger", AnatomyPart>;
@@ -1,11 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const anatomy$1 = require('@zag-js/anatomy');
6
-
7
- const anatomy = anatomy$1.createAnatomy("splitter").parts("root", "panel", "toggleTrigger", "resizeTrigger");
8
- const parts = anatomy.build();
9
-
10
- exports.anatomy = anatomy;
11
- exports.parts = parts;
@@ -1,6 +0,0 @@
1
- import { createAnatomy } from '@zag-js/anatomy';
2
-
3
- const anatomy = createAnatomy("splitter").parts("root", "panel", "toggleTrigger", "resizeTrigger");
4
- const parts = anatomy.build();
5
-
6
- export { anatomy, parts };
@@ -1,45 +0,0 @@
1
- import type { NormalizeProps, PropTypes } from "@zag-js/types";
2
- import type { PanelId, PanelProps, ResizeTriggerProps, Send, State } from "./splitter.types";
3
- export declare function connect<T extends PropTypes>(state: State, send: Send, normalize: NormalizeProps<T>): {
4
- /**
5
- * Whether the splitter is focused.
6
- */
7
- isFocused: boolean;
8
- /**
9
- * Whether the splitter is being dragged.
10
- */
11
- isDragging: boolean;
12
- /**
13
- * The bounds of the currently dragged splitter handle.
14
- */
15
- bounds: {
16
- min: number;
17
- max: number;
18
- } | undefined;
19
- /**
20
- * Function to set a panel to its minimum size.
21
- */
22
- setToMinSize(id: PanelId): void;
23
- /**
24
- * Function to set a panel to its maximum size.
25
- */
26
- setToMaxSize(id: PanelId): void;
27
- /**
28
- * Function to set the size of a panel.
29
- */
30
- setSize(id: PanelId, size: number): void;
31
- /**
32
- * Returns the state details for a resize trigger.
33
- */
34
- getResizeTriggerState(props: ResizeTriggerProps): {
35
- isDisabled: boolean;
36
- isFocused: boolean;
37
- panelIds: string[];
38
- min: number | undefined;
39
- max: number | undefined;
40
- value: number;
41
- };
42
- rootProps: T["element"];
43
- getPanelProps(props: PanelProps): T["element"];
44
- getResizeTriggerProps(props: ResizeTriggerProps): T["element"];
45
- };
@@ -1,185 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const domEvent = require('@zag-js/dom-event');
6
- const domQuery = require('@zag-js/dom-query');
7
- const splitter_anatomy = require('./splitter.anatomy.js');
8
- const splitter_dom = require('./splitter.dom.js');
9
- const splitter_utils = require('./splitter.utils.js');
10
-
11
- function connect(state, send, normalize) {
12
- const isHorizontal = state.context.isHorizontal;
13
- const isFocused = state.hasTag("focus");
14
- const isDragging = state.matches("dragging");
15
- const panels = state.context.panels;
16
- const api = {
17
- /**
18
- * Whether the splitter is focused.
19
- */
20
- isFocused,
21
- /**
22
- * Whether the splitter is being dragged.
23
- */
24
- isDragging,
25
- /**
26
- * The bounds of the currently dragged splitter handle.
27
- */
28
- bounds: splitter_utils.getHandleBounds(state.context),
29
- /**
30
- * Function to set a panel to its minimum size.
31
- */
32
- setToMinSize(id) {
33
- const panel = panels.find((panel2) => panel2.id === id);
34
- send({ type: "SET_PANEL_SIZE", id, size: panel?.minSize, src: "setToMinSize" });
35
- },
36
- /**
37
- * Function to set a panel to its maximum size.
38
- */
39
- setToMaxSize(id) {
40
- const panel = panels.find((panel2) => panel2.id === id);
41
- send({ type: "SET_PANEL_SIZE", id, size: panel?.maxSize, src: "setToMaxSize" });
42
- },
43
- /**
44
- * Function to set the size of a panel.
45
- */
46
- setSize(id, size) {
47
- send({ type: "SET_PANEL_SIZE", id, size });
48
- },
49
- /**
50
- * Returns the state details for a resize trigger.
51
- */
52
- getResizeTriggerState(props) {
53
- const { id, disabled } = props;
54
- const ids = id.split(":");
55
- const panelIds = ids.map((id2) => splitter_dom.dom.getPanelId(state.context, id2));
56
- const panels2 = splitter_utils.getHandleBounds(state.context, id);
57
- return {
58
- isDisabled: !!disabled,
59
- isFocused: state.context.activeResizeId === id && isFocused,
60
- panelIds,
61
- min: panels2?.min,
62
- max: panels2?.max,
63
- value: 0
64
- };
65
- },
66
- rootProps: normalize.element({
67
- ...splitter_anatomy.parts.root.attrs,
68
- "data-orientation": state.context.orientation,
69
- id: splitter_dom.dom.getRootId(state.context),
70
- dir: state.context.dir,
71
- style: {
72
- display: "flex",
73
- flexDirection: isHorizontal ? "row" : "column",
74
- height: "100%",
75
- width: "100%",
76
- overflow: "hidden"
77
- }
78
- }),
79
- getPanelProps(props) {
80
- const { id } = props;
81
- return normalize.element({
82
- ...splitter_anatomy.parts.panel.attrs,
83
- dir: state.context.dir,
84
- id: splitter_dom.dom.getPanelId(state.context, id),
85
- "data-ownedby": splitter_dom.dom.getRootId(state.context),
86
- style: splitter_dom.dom.getPanelStyle(state.context, id)
87
- });
88
- },
89
- getResizeTriggerProps(props) {
90
- const { id, disabled, step = 1 } = props;
91
- const triggerState = api.getResizeTriggerState(props);
92
- return normalize.element({
93
- ...splitter_anatomy.parts.resizeTrigger.attrs,
94
- dir: state.context.dir,
95
- id: splitter_dom.dom.getResizeTriggerId(state.context, id),
96
- role: "separator",
97
- "data-ownedby": splitter_dom.dom.getRootId(state.context),
98
- tabIndex: disabled ? void 0 : 0,
99
- "aria-valuenow": triggerState.value,
100
- "aria-valuemin": triggerState.min,
101
- "aria-valuemax": triggerState.max,
102
- "data-orientation": state.context.orientation,
103
- "aria-orientation": state.context.orientation,
104
- "aria-controls": triggerState.panelIds.join(" "),
105
- "data-focus": domQuery.dataAttr(triggerState.isFocused),
106
- "data-disabled": domQuery.dataAttr(disabled),
107
- style: {
108
- touchAction: "none",
109
- userSelect: "none",
110
- flex: "0 0 auto",
111
- pointerEvents: isDragging && !triggerState.isFocused ? "none" : void 0,
112
- cursor: isHorizontal ? "col-resize" : "row-resize",
113
- [isHorizontal ? "minHeight" : "minWidth"]: "0"
114
- },
115
- onPointerDown(event) {
116
- if (disabled) {
117
- event.preventDefault();
118
- return;
119
- }
120
- send({ type: "POINTER_DOWN", id });
121
- event.preventDefault();
122
- event.stopPropagation();
123
- },
124
- onPointerOver() {
125
- if (disabled)
126
- return;
127
- send({ type: "POINTER_OVER", id });
128
- },
129
- onPointerLeave() {
130
- if (disabled)
131
- return;
132
- send({ type: "POINTER_LEAVE", id });
133
- },
134
- onBlur() {
135
- send("BLUR");
136
- },
137
- onFocus() {
138
- send({ type: "FOCUS", id });
139
- },
140
- onDoubleClick() {
141
- if (disabled)
142
- return;
143
- send({ type: "DOUBLE_CLICK", id });
144
- },
145
- onKeyDown(event) {
146
- if (disabled)
147
- return;
148
- const moveStep = domEvent.getEventStep(event) * step;
149
- const keyMap = {
150
- Enter() {
151
- send("ENTER");
152
- },
153
- ArrowUp() {
154
- send({ type: "ARROW_UP", step: moveStep });
155
- },
156
- ArrowDown() {
157
- send({ type: "ARROW_DOWN", step: moveStep });
158
- },
159
- ArrowLeft() {
160
- send({ type: "ARROW_LEFT", step: moveStep });
161
- },
162
- ArrowRight() {
163
- send({ type: "ARROW_RIGHT", step: moveStep });
164
- },
165
- Home() {
166
- send("HOME");
167
- },
168
- End() {
169
- send("END");
170
- }
171
- };
172
- const key = domEvent.getEventKey(event, state.context);
173
- const exec = keyMap[key];
174
- if (exec) {
175
- exec(event);
176
- event.preventDefault();
177
- }
178
- }
179
- });
180
- }
181
- };
182
- return api;
183
- }
184
-
185
- exports.connect = connect;
@@ -1,181 +0,0 @@
1
- import { getEventStep, getEventKey } from '@zag-js/dom-event';
2
- import { dataAttr } from '@zag-js/dom-query';
3
- import { parts } from './splitter.anatomy.mjs';
4
- import { dom } from './splitter.dom.mjs';
5
- import { getHandleBounds } from './splitter.utils.mjs';
6
-
7
- function connect(state, send, normalize) {
8
- const isHorizontal = state.context.isHorizontal;
9
- const isFocused = state.hasTag("focus");
10
- const isDragging = state.matches("dragging");
11
- const panels = state.context.panels;
12
- const api = {
13
- /**
14
- * Whether the splitter is focused.
15
- */
16
- isFocused,
17
- /**
18
- * Whether the splitter is being dragged.
19
- */
20
- isDragging,
21
- /**
22
- * The bounds of the currently dragged splitter handle.
23
- */
24
- bounds: getHandleBounds(state.context),
25
- /**
26
- * Function to set a panel to its minimum size.
27
- */
28
- setToMinSize(id) {
29
- const panel = panels.find((panel2) => panel2.id === id);
30
- send({ type: "SET_PANEL_SIZE", id, size: panel?.minSize, src: "setToMinSize" });
31
- },
32
- /**
33
- * Function to set a panel to its maximum size.
34
- */
35
- setToMaxSize(id) {
36
- const panel = panels.find((panel2) => panel2.id === id);
37
- send({ type: "SET_PANEL_SIZE", id, size: panel?.maxSize, src: "setToMaxSize" });
38
- },
39
- /**
40
- * Function to set the size of a panel.
41
- */
42
- setSize(id, size) {
43
- send({ type: "SET_PANEL_SIZE", id, size });
44
- },
45
- /**
46
- * Returns the state details for a resize trigger.
47
- */
48
- getResizeTriggerState(props) {
49
- const { id, disabled } = props;
50
- const ids = id.split(":");
51
- const panelIds = ids.map((id2) => dom.getPanelId(state.context, id2));
52
- const panels2 = getHandleBounds(state.context, id);
53
- return {
54
- isDisabled: !!disabled,
55
- isFocused: state.context.activeResizeId === id && isFocused,
56
- panelIds,
57
- min: panels2?.min,
58
- max: panels2?.max,
59
- value: 0
60
- };
61
- },
62
- rootProps: normalize.element({
63
- ...parts.root.attrs,
64
- "data-orientation": state.context.orientation,
65
- id: dom.getRootId(state.context),
66
- dir: state.context.dir,
67
- style: {
68
- display: "flex",
69
- flexDirection: isHorizontal ? "row" : "column",
70
- height: "100%",
71
- width: "100%",
72
- overflow: "hidden"
73
- }
74
- }),
75
- getPanelProps(props) {
76
- const { id } = props;
77
- return normalize.element({
78
- ...parts.panel.attrs,
79
- dir: state.context.dir,
80
- id: dom.getPanelId(state.context, id),
81
- "data-ownedby": dom.getRootId(state.context),
82
- style: dom.getPanelStyle(state.context, id)
83
- });
84
- },
85
- getResizeTriggerProps(props) {
86
- const { id, disabled, step = 1 } = props;
87
- const triggerState = api.getResizeTriggerState(props);
88
- return normalize.element({
89
- ...parts.resizeTrigger.attrs,
90
- dir: state.context.dir,
91
- id: dom.getResizeTriggerId(state.context, id),
92
- role: "separator",
93
- "data-ownedby": dom.getRootId(state.context),
94
- tabIndex: disabled ? void 0 : 0,
95
- "aria-valuenow": triggerState.value,
96
- "aria-valuemin": triggerState.min,
97
- "aria-valuemax": triggerState.max,
98
- "data-orientation": state.context.orientation,
99
- "aria-orientation": state.context.orientation,
100
- "aria-controls": triggerState.panelIds.join(" "),
101
- "data-focus": dataAttr(triggerState.isFocused),
102
- "data-disabled": dataAttr(disabled),
103
- style: {
104
- touchAction: "none",
105
- userSelect: "none",
106
- flex: "0 0 auto",
107
- pointerEvents: isDragging && !triggerState.isFocused ? "none" : void 0,
108
- cursor: isHorizontal ? "col-resize" : "row-resize",
109
- [isHorizontal ? "minHeight" : "minWidth"]: "0"
110
- },
111
- onPointerDown(event) {
112
- if (disabled) {
113
- event.preventDefault();
114
- return;
115
- }
116
- send({ type: "POINTER_DOWN", id });
117
- event.preventDefault();
118
- event.stopPropagation();
119
- },
120
- onPointerOver() {
121
- if (disabled)
122
- return;
123
- send({ type: "POINTER_OVER", id });
124
- },
125
- onPointerLeave() {
126
- if (disabled)
127
- return;
128
- send({ type: "POINTER_LEAVE", id });
129
- },
130
- onBlur() {
131
- send("BLUR");
132
- },
133
- onFocus() {
134
- send({ type: "FOCUS", id });
135
- },
136
- onDoubleClick() {
137
- if (disabled)
138
- return;
139
- send({ type: "DOUBLE_CLICK", id });
140
- },
141
- onKeyDown(event) {
142
- if (disabled)
143
- return;
144
- const moveStep = getEventStep(event) * step;
145
- const keyMap = {
146
- Enter() {
147
- send("ENTER");
148
- },
149
- ArrowUp() {
150
- send({ type: "ARROW_UP", step: moveStep });
151
- },
152
- ArrowDown() {
153
- send({ type: "ARROW_DOWN", step: moveStep });
154
- },
155
- ArrowLeft() {
156
- send({ type: "ARROW_LEFT", step: moveStep });
157
- },
158
- ArrowRight() {
159
- send({ type: "ARROW_RIGHT", step: moveStep });
160
- },
161
- Home() {
162
- send("HOME");
163
- },
164
- End() {
165
- send("END");
166
- }
167
- };
168
- const key = getEventKey(event, state.context);
169
- const exec = keyMap[key];
170
- if (exec) {
171
- exec(event);
172
- event.preventDefault();
173
- }
174
- }
175
- });
176
- }
177
- };
178
- return api;
179
- }
180
-
181
- export { connect };
@@ -1,38 +0,0 @@
1
- import type { JSX } from "@zag-js/types";
2
- import type { MachineContext as Ctx, PanelId } from "./splitter.types";
3
- export declare const dom: {
4
- getRootNode: (ctx: {
5
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
6
- }) => ShadowRoot | Document;
7
- getDoc: (ctx: {
8
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
9
- }) => Document;
10
- getWin: (ctx: {
11
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
12
- }) => Window & typeof globalThis;
13
- getActiveElement: (ctx: {
14
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
15
- }) => HTMLElement | null;
16
- getById: <T extends HTMLElement = HTMLElement>(ctx: {
17
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
18
- }, id: string) => T | null;
19
- queryById: <T_1 extends HTMLElement = HTMLElement>(ctx: {
20
- getRootNode?: (() => Node | ShadowRoot | Document) | undefined;
21
- }, id: string) => T_1;
22
- } & {
23
- getRootId: (ctx: Ctx) => string;
24
- getResizeTriggerId: (ctx: Ctx, id: string) => string;
25
- getToggleTriggerId: (ctx: Ctx) => string;
26
- getLabelId: (ctx: Ctx) => string | ((id: string) => string);
27
- getPanelId: (ctx: Ctx, id: string | number) => string;
28
- globalCursorId: (ctx: Ctx) => string;
29
- getRootEl: (ctx: Ctx) => HTMLElement;
30
- getResizeTriggerEl: (ctx: Ctx, id: string) => HTMLElement | null;
31
- getPanelEl: (ctx: Ctx, id: string | number) => HTMLElement | null;
32
- getCursor(ctx: Ctx): (string & {}) | "col-resize" | "e-resize" | "n-resize" | "row-resize" | "s-resize" | "w-resize";
33
- getPanelStyle(ctx: Ctx, id: PanelId): JSX.CSSProperties;
34
- getActiveHandleEl(ctx: Ctx): HTMLElement | null | undefined;
35
- getResizeTriggerEls(ctx: Ctx): HTMLElement[];
36
- setupGlobalCursor(ctx: Ctx): void;
37
- removeGlobalCursor(ctx: Ctx): void;
38
- };
@@ -1,62 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
-
5
- const domQuery = require('@zag-js/dom-query');
6
-
7
- const dom = domQuery.createScope({
8
- getRootId: (ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`,
9
- getResizeTriggerId: (ctx, id) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`,
10
- getToggleTriggerId: (ctx) => ctx.ids?.toggleTrigger?.(ctx.id) ?? `splitter:${ctx.id}:toggle-btn`,
11
- getLabelId: (ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`,
12
- getPanelId: (ctx, id) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`,
13
- globalCursorId: (ctx) => `splitter:${ctx.id}:global-cursor`,
14
- getRootEl: (ctx) => dom.queryById(ctx, dom.getRootId(ctx)),
15
- getResizeTriggerEl: (ctx, id) => dom.getById(ctx, dom.getResizeTriggerId(ctx, id)),
16
- getPanelEl: (ctx, id) => dom.getById(ctx, dom.getPanelId(ctx, id)),
17
- getCursor(ctx) {
18
- const x = ctx.isHorizontal;
19
- let cursor = x ? "col-resize" : "row-resize";
20
- if (ctx.activeResizeState.isAtMin)
21
- cursor = x ? "e-resize" : "s-resize";
22
- if (ctx.activeResizeState.isAtMax)
23
- cursor = x ? "w-resize" : "n-resize";
24
- return cursor;
25
- },
26
- getPanelStyle(ctx, id) {
27
- const flexGrow = ctx.panels.find((panel) => panel.id === id)?.size ?? "0";
28
- return {
29
- flexBasis: 0,
30
- flexGrow,
31
- flexShrink: 1,
32
- overflow: "hidden"
33
- };
34
- },
35
- getActiveHandleEl(ctx) {
36
- const activeId = ctx.activeResizeId;
37
- if (activeId == null)
38
- return;
39
- return dom.getById(ctx, dom.getResizeTriggerId(ctx, activeId));
40
- },
41
- getResizeTriggerEls(ctx) {
42
- const ownerId = CSS.escape(dom.getRootId(ctx));
43
- return domQuery.queryAll(dom.getRootEl(ctx), `[role=separator][data-ownedby='${ownerId}']`);
44
- },
45
- setupGlobalCursor(ctx) {
46
- const styleEl = dom.getById(ctx, dom.globalCursorId(ctx));
47
- const textContent = `* { cursor: ${dom.getCursor(ctx)} !important; }`;
48
- if (styleEl) {
49
- styleEl.textContent = textContent;
50
- } else {
51
- const style = dom.getDoc(ctx).createElement("style");
52
- style.id = dom.globalCursorId(ctx);
53
- style.textContent = textContent;
54
- dom.getDoc(ctx).head.appendChild(style);
55
- }
56
- },
57
- removeGlobalCursor(ctx) {
58
- dom.getById(ctx, dom.globalCursorId(ctx))?.remove();
59
- }
60
- });
61
-
62
- exports.dom = dom;