UNPKG

@zag-js/splitter

Version:

Core logic for the splitter widget implemented as a state machine

124 lines (122 loc) 4.71 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/splitter.dom.ts var splitter_dom_exports = {}; __export(splitter_dom_exports, { getCursor: () => getCursor, getGlobalCursorEl: () => getGlobalCursorEl, getGlobalCursorId: () => getGlobalCursorId, getLabelId: () => getLabelId, getPanelEl: () => getPanelEl, getPanelEls: () => getPanelEls, getPanelId: () => getPanelId, getResizeTriggerEl: () => getResizeTriggerEl, getResizeTriggerEls: () => getResizeTriggerEls, getResizeTriggerId: () => getResizeTriggerId, getRootEl: () => getRootEl, getRootId: () => getRootId, removeGlobalCursor: () => removeGlobalCursor, resolveResizeTriggerId: () => resolveResizeTriggerId, setupGlobalCursor: () => setupGlobalCursor }); module.exports = __toCommonJS(splitter_dom_exports); var import_dom_query = require("@zag-js/dom-query"); var getRootId = (ctx) => ctx.ids?.root ?? `splitter:${ctx.id}`; var getResizeTriggerId = (ctx, id) => ctx.ids?.resizeTrigger?.(id) ?? `splitter:${ctx.id}:splitter:${id}`; var getLabelId = (ctx) => ctx.ids?.label ?? `splitter:${ctx.id}:label`; var getPanelId = (ctx, id) => ctx.ids?.panel?.(id) ?? `splitter:${ctx.id}:panel:${id}`; var getPanelEls = (ctx) => (0, import_dom_query.queryAll)(getRootEl(ctx), `[data-part=panel][data-ownedby='${CSS.escape(getRootId(ctx))}']`); var getGlobalCursorId = (ctx) => `splitter:${ctx.id}:global-cursor`; var getRootEl = (ctx) => ctx.getById(getRootId(ctx)); var getResizeTriggerEl = (ctx, id) => id != null ? ctx.getById(getResizeTriggerId(ctx, id)) : null; var getPanelEl = (ctx, id) => ctx.getById(getPanelId(ctx, id)); var getPanelIdFromEl = (el) => { return (0, import_dom_query.isHTMLElement)(el) && el.dataset.part === "panel" ? el.dataset.id : void 0; }; var getPrevPanelId = (el) => { let prev = el?.previousElementSibling ?? null; while (prev) { const id = getPanelIdFromEl(prev); if (id) return id; prev = prev.previousElementSibling; } }; var getNextPanelId = (el) => { let next = el?.nextElementSibling ?? null; while (next) { const id = getPanelIdFromEl(next); if (id) return id; next = next.nextElementSibling; } }; var resolveResizeTriggerId = (ctx, id) => { const [beforeId, afterId] = id.split(":"); if (beforeId && afterId) return id; const triggerEl = getResizeTriggerEl(ctx, id); const resolvedBeforeId = beforeId || getPrevPanelId(triggerEl); const resolvedAfterId = afterId || getNextPanelId(triggerEl); return resolvedBeforeId && resolvedAfterId ? `${resolvedBeforeId}:${resolvedAfterId}` : null; }; var getCursor = (state, x) => { let cursor = x ? "col-resize" : "row-resize"; if (state.isAtMin) cursor = x ? "e-resize" : "s-resize"; if (state.isAtMax) cursor = x ? "w-resize" : "n-resize"; return cursor; }; var getResizeTriggerEls = (ctx) => { return (0, import_dom_query.queryAll)(getRootEl(ctx), `[role=separator][data-ownedby='${CSS.escape(getRootId(ctx))}']`); }; var getGlobalCursorEl = (ctx) => { return ctx.getDoc().getElementById(getGlobalCursorId(ctx)); }; var setupGlobalCursor = (ctx, state, x, nonce) => { const styleEl = getGlobalCursorEl(ctx); const textContent = `* { cursor: ${getCursor(state, x)} !important; }`; if (styleEl) { styleEl.textContent = textContent; } else { const style = ctx.getDoc().createElement("style"); if (nonce) style.nonce = nonce; style.id = getGlobalCursorId(ctx); style.textContent = textContent; ctx.getDoc().head.appendChild(style); } }; var removeGlobalCursor = (ctx) => { const styleEl = getGlobalCursorEl(ctx); styleEl?.remove(); }; // Annotate the CommonJS export names for ESM import in node: 0 && (module.exports = { getCursor, getGlobalCursorEl, getGlobalCursorId, getLabelId, getPanelEl, getPanelEls, getPanelId, getResizeTriggerEl, getResizeTriggerEls, getResizeTriggerId, getRootEl, getRootId, removeGlobalCursor, resolveResizeTriggerId, setupGlobalCursor });