@zag-js/tabs 0.0.0-dev-20220413174154 → 0.0.0-dev-20220416104915

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.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../src/index.ts", "../../../utilities/dom/src/attrs.ts", "../../../utilities/dom/src/computed-style.ts", "../../../utilities/dom/src/next-tick.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/dom/src/query.ts", "../../../utilities/dom/src/focusable.ts", "../../../utilities/dom/src/keyboard-event.ts", "../../../utilities/dom/src/nodelist.ts", "../../../types/src/prop-types.ts", "../src/tabs.dom.ts", "../src/tabs.connect.ts", "../../../../node_modules/@zag-js/core/src/index.ts", "../../../core/src/action-utils.ts", "../../../core/src/guard-utils.ts", "../../../../node_modules/klona/json/index.mjs", "../../../core/src/machine.ts", "../../../core/src/create-proxy.ts", "../../../core/src/delay-utils.ts", "../../../core/src/utils.ts", "../../../core/src/transition-utils.ts", "../src/tabs.machine.ts"],
4
- "sourcesContent": ["export { connect } from \"./tabs.connect\"\nexport { machine } from \"./tabs.machine\"\nexport type { MachineContext, MachineState } from \"./tabs.types\"\n", "type Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (guard: boolean | undefined) => {\n return (guard ? \"\" : undefined) as Booleanish\n}\n\nexport const ariaAttr = (guard: boolean | undefined) => {\n return guard ? true : undefined\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nconst styleCache: WeakMap<HTMLElement, Styles> = new WeakMap()\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n let style: Styles | undefined = styleCache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n styleCache.set(el, style)\n }\n return style\n}\n\nexport function copyVisualStyles(fromEl: HTMLElement | null, toEl: HTMLElement) {\n if (!fromEl) return\n const el = getComputedStyle(fromEl)\n // prettier-ignore\n const cssText = 'box-sizing:' + el.boxSizing +\n ';border-left:' + el.borderLeftWidth + ' solid red' +\n ';border-right:' + el.borderRightWidth + ' solid red' +\n ';font-family:' + el.fontFamily +\n ';font-feature-settings:' + el.fontFeatureSettings +\n ';font-kerning:' + el.fontKerning +\n ';font-size:' + el.fontSize +\n ';font-stretch:' + el.fontStretch +\n ';font-style:' + el.fontStyle +\n ';font-variant:' + el.fontVariant +\n ';font-variant-caps:' + el.fontVariantCaps +\n ';font-variant-ligatures:' + el.fontVariantLigatures +\n ';font-variant-numeric:' + el.fontVariantNumeric +\n ';font-weight:' + el.fontWeight +\n ';letter-spacing:' + el.letterSpacing +\n ';margin-left:' + el.marginLeft +\n ';margin-right:' + el.marginRight +\n ';padding-left:' + el.paddingLeft +\n ';padding-right:' + el.paddingRight +\n ';text-indent:' + el.textIndent +\n ';text-transform:' + el.textTransform\n\n toEl.style.cssText += cssText\n}\n", "export function nextTick(fn: VoidFunction) {\n const set = new Set<VoidFunction>()\n function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n set.add(() => globalThis.cancelAnimationFrame(id))\n }\n raf(() => raf(fn))\n return function cleanup() {\n set.forEach(function (fn) {\n fn()\n })\n }\n}\n\nexport function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n return function cleanup() {\n globalThis.cancelAnimationFrame(id)\n }\n}\n\nexport function forceReflow() {\n return document.body.offsetHeight\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "const platform = (v: RegExp) => isDom() && v.test(navigator.platform)\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\n\nexport const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => !!(typeof window !== \"undefined\")\nexport const isMac = () => platform(/^Mac/)\nexport const isIPhone = () => platform(/^iPhone/)\nexport const isIPad = () => platform(/^iPad/) || (isMac() && navigator.maxTouchPoints > 1)\nexport const isIos = () => isIPhone() || isIPad()\nexport const isSafari = () => ua(/^((?!chrome|android).)*safari/i)\nexport const isFirefox = () => ua(/^Firefox/)\nexport const isWebkit = () => ua(/^WebKit/) && !ua(/Chrome/)\nexport const isApple = () => isMac() || isIos()\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && \"button\" in v\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && \"touches\" in v\nexport const isLeftClick = (v: MouseEvent | PointerEvent) => v.button === 0\nexport const isRightClick = (v: MouseEvent | PointerEvent) => v.button === 2\nexport const isModifiedEvent = (v: MouseEvent | PointerEvent | KeyboardEvent) =>\n v.ctrlKey || v.altKey || v.metaKey || v.shiftKey\nexport const isCtrlKey = (v: KeyboardEvent) => (isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey)\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "export function getOwnerDocument(el: HTMLElement | Window) {\n if (isWindow(el)) return el.document\n return el?.ownerDocument ?? document\n}\n\nexport function getOwnerWindow(el: HTMLElement) {\n return el?.ownerDocument.defaultView ?? window\n}\n\nexport function getDocumentElement(el: HTMLElement | Window): HTMLElement {\n return getOwnerDocument(el).documentElement\n}\n\nexport function getNodeName(node: HTMLElement | Window): string {\n return isWindow(node) ? \"\" : node ? node.localName || \"\" : \"\"\n}\n\nexport function getEventWindow(event: UIEvent) {\n if (event.view) return event.view\n let target = event.currentTarget\n if (target != null) return getOwnerWindow(target as HTMLElement)\n return window\n}\n\nexport function getParent(el: HTMLElement): HTMLElement {\n const doc = getOwnerDocument(el)\n if (getNodeName(el) === \"html\") return el\n return el.assignedSlot || el.parentElement || doc.documentElement\n}\n\ntype Node = HTMLElement | EventTarget | null\n\nexport function contains(parent: Node | undefined, child: Node) {\n if (!parent) return false\n return parent === child || (isHTMLElement(parent) && isHTMLElement(child) && parent.contains(child))\n}\n\nexport function isHTMLElement(v: any): v is HTMLElement {\n return typeof v === \"object\" && v?.nodeType === Node.ELEMENT_NODE && typeof v?.nodeName === \"string\"\n}\n\nexport function isWindow(value: any): value is Window {\n return value?.toString() === \"[object Window]\"\n}\n\nexport const isDisabled = (el: HTMLElement | null): boolean => {\n return el?.getAttribute(\"disabled\") != null || !!el?.getAttribute(\"aria-disabled\") === true\n}\n\nexport function getNativeEvent<E>(\n event: E,\n): React.ChangeEvent<any> extends E ? InputEvent : E extends React.SyntheticEvent<any, infer T> ? T : never {\n return (event as any).nativeEvent ?? event\n}\n", "import { getComputedStyle } from \"./computed-style\"\nimport { isDisabled, isHTMLElement } from \"./query\"\n\nexport const focusableSelector = /*#__PURE__*/ [\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"[contenteditable]:not([contenteditable=false])\",\n \"details > summary:first-of-type\",\n].join(\",\")\n\nexport function isHidden(el: HTMLElement | null, until?: HTMLElement) {\n const style = getComputedStyle(el)\n if (!el || style.getPropertyValue(\"visibility\") === \"hidden\") return true\n while (el) {\n if (until != null && el === until) return false\n if (style.getPropertyValue(\"display\") === \"none\") return true\n el = el.parentElement\n }\n return false\n}\n\n/**\n * Returns the focusable elements within the element\n */\nexport const getFocusables = (el: HTMLElement | Document | null, includeContainer = false) => {\n if (!el) return []\n let els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n if (includeContainer && isHTMLElement(el)) {\n els.unshift(el)\n }\n return els.filter((el) => isFocusable(el) && !isHidden(el))\n}\n\n/**\n * Whether this element is focusable\n */\nexport const isFocusable = (el: HTMLElement | null) => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) return false\n return el?.matches(focusableSelector)\n}\n\n/**\n * Returns the tabbable elements within the element\n */\nexport const getTabbables = (el: HTMLElement | Document, includeContainer = false) => {\n return getFocusables(el, includeContainer).filter(isTabbable)\n}\n\n/**\n * Whether this element is tabbable\n */\nexport const isTabbable = (el: HTMLElement | null) => {\n return isFocusable(el) && !isDisabled(el) && !isHidden(el)\n}\n", "import type { KeyboardEvent } from \"react\"\n\ntype EventKey =\n | \"ArrowDown\"\n | \"ArrowUp\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"Space\"\n | \"Enter\"\n | \"Comma\"\n | \"Escape\"\n | \"Backspace\"\n | \"Delete\"\n | \"Home\"\n | \"End\"\n | \"Tab\"\n | \"PageUp\"\n | \"PageDown\"\n | (string & {})\n\nexport type EventKeyMap = Partial<Record<EventKey, (event: React.KeyboardEvent) => void>>\n\nconst rtlKeyMap = {\n ArrowLeft: \"ArrowRight\",\n ArrowRight: \"ArrowLeft\",\n Home: \"End\",\n End: \"Home\",\n}\n\nconst sameKeyMap = {\n Up: \"ArrowUp\",\n Down: \"ArrowDown\",\n Esc: \"Escape\",\n \" \": \"Space\",\n \",\": \"Comma\",\n Left: \"ArrowLeft\",\n Right: \"ArrowRight\",\n}\n\ntype EventKeyOptions = {\n dir?: \"ltr\" | \"rtl\"\n orientation?: \"horizontal\" | \"vertical\"\n}\n\n/**\n * Determine the event key based on text direction.\n */\nexport function getEventKey(event: KeyboardEvent, options: EventKeyOptions = {}) {\n const { dir = \"ltr\", orientation = \"horizontal\" } = options\n\n let { key } = event\n key = sameKeyMap[key] ?? key // normalize key\n\n const isRtl = dir === \"rtl\" && orientation === \"horizontal\"\n\n if (isRtl && key in rtlKeyMap) {\n key = rtlKeyMap[key]\n }\n\n return key\n}\n\nconst PAGE_KEYS = new Set([\"PageUp\", \"PageDown\"])\nconst ARROW_KEYS = new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"])\n\n/**\n * Determine the step factor for keyboard events\n */\nexport function getEventStep(event: KeyboardEvent) {\n if (event.ctrlKey || event.metaKey) {\n return 0.1\n } else {\n const isPageKey = PAGE_KEYS.has(event.key)\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.has(event.key))\n return isSkipKey ? 10 : 1\n }\n}\n", "type Root = Document | Element | null | undefined\n\nexport function queryAll<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return Array.from(root?.querySelectorAll<T>(selector) ?? [])\n}\n\nexport function query<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return root?.querySelector<T>(selector)\n}\n\nexport function itemById<T extends HTMLElement>(v: T[], id: string) {\n return v.find((node) => node.id === id)\n}\n\nexport function indexOfId<T extends HTMLElement>(v: T[], id: string) {\n const item = itemById(v, id)\n return item ? v.indexOf(item) : -1\n}\n\nexport function nextById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1)\n return v[idx]\n}\n\nexport function prevById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n if (idx === -1) return loop ? v[v.length - 1] : null\n idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1)\n return v[idx]\n}\n\nexport function findByText<T extends HTMLElement>(v: T[], text: string, currentId?: string | null) {\n const filtered = v.filter((item) => {\n const str = item.dataset.valuetext ?? item.textContent\n return !!str?.toLowerCase().startsWith(text.toLowerCase())\n })\n return currentId ? nextById(filtered, currentId) : null\n}\n\nexport function sortByTreeOrder<T extends HTMLElement>(v: T[]) {\n return v.sort((a, b) => (a.compareDocumentPosition(b) & 2 ? 1 : -1))\n}\n", "import type * as React from \"react\"\n\ntype Dict<T = any> = Record<string, T>\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\ntype Omit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]?: T[P] }\n\ntype WithStyle<T extends { style?: any }> = Omit<T, \"style\"> & {\n style?: T[\"style\"] & {\n [prop: string]: string | number | undefined\n }\n}\n\ntype DataAttr = {\n \"data-uid\"?: string\n \"data-name\"?: string\n \"data-ownedby\"?: string\n \"data-selected\"?: Booleanish\n \"data-expanded\"?: Booleanish\n \"data-highlighted\"?: Booleanish\n \"data-readonly\"?: Booleanish\n \"data-invalid\"?: Booleanish\n \"data-hover\"?: Booleanish\n \"data-active\"?: Booleanish\n \"data-focus\"?: Booleanish\n \"data-disabled\"?: Booleanish\n \"data-type\"?: string\n \"data-value\"?: string | number\n \"data-valuetext\"?: string\n \"data-open\"?: Booleanish\n \"data-placement\"?: string\n \"data-orientation\"?: \"horizontal\" | \"vertical\"\n \"data-label\"?: string\n \"data-checked\"?: Booleanish\n \"data-pressed\"?: Booleanish\n \"data-state\"?: string | null\n \"data-half\"?: Booleanish\n \"data-count\"?: number\n \"data-controls\"?: string\n \"data-part\"?: string\n \"data-index\"?: number\n \"data-complete\"?: Booleanish\n \"data-empty\"?: Booleanish\n \"data-placeholder-shown\"?: Booleanish\n}\n\ntype JSXElementAttributes = DataAttr & React.HTMLAttributes<HTMLElement>\ntype JSXButtonAttributes = DataAttr & React.ButtonHTMLAttributes<HTMLButtonElement>\ntype JSXInputAttributes = DataAttr & React.InputHTMLAttributes<HTMLInputElement>\ntype JSXLabelAttributes = DataAttr & React.LabelHTMLAttributes<HTMLLabelElement>\ntype JSXOutputAttributes = DataAttr & React.OutputHTMLAttributes<HTMLOutputElement>\n\nexport type PropTypes = Record<\"button\" | \"label\" | \"input\" | \"output\" | \"element\", Dict>\n\nexport type ReactPropTypes = {\n button: JSXButtonAttributes\n label: JSXLabelAttributes\n input: JSXInputAttributes\n output: JSXOutputAttributes\n element: JSXElementAttributes\n}\n\nexport type NormalizeProps = {\n button<T extends PropTypes>(props: WithStyle<JSXButtonAttributes>): T[\"button\"]\n label<T extends PropTypes>(props: WithStyle<JSXLabelAttributes>): T[\"label\"]\n input<T extends PropTypes>(props: WithStyle<JSXInputAttributes>): T[\"input\"]\n output<T extends PropTypes>(props: WithStyle<JSXOutputAttributes>): T[\"output\"]\n element<T extends PropTypes>(props: WithStyle<JSXElementAttributes>): T[\"element\"]\n}\n\nexport function createNormalizer(fn: (props: Dict) => Dict): NormalizeProps {\n return { button: fn, label: fn, input: fn, output: fn, element: fn }\n}\n\nexport const normalizeProp = createNormalizer((v) => v)\n", "import { itemById, nextById, prevById, queryAll } from \"@zag-js/dom-utils\"\nimport { first, last } from \"@zag-js/utils\"\nimport { MachineContext as Ctx } from \"./tabs.types\"\n\nexport const dom = {\n getDoc: (ctx: Ctx) => ctx.doc ?? document,\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `tabs-${ctx.uid}`,\n getTriggerGroupId: (ctx: Ctx) => ctx.ids?.triggerGroup ?? `tabs-${ctx.uid}-trigger-group`,\n getContentId: (ctx: Ctx, id: string) => ctx.ids?.content ?? `tabs-${ctx.uid}-content-${id}`,\n getContentGroupId: (ctx: Ctx) => ctx.ids?.contentGroup ?? `tabs-${ctx.uid}-content-group`,\n getTriggerId: (ctx: Ctx, id: string) => ctx.ids?.trigger ?? `tabs-${ctx.uid}-trigger-${id}`,\n getIndicatorId: (ctx: Ctx) => `tabs-${ctx.uid}-indicator`,\n\n getTriggerGroupEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getTriggerGroupId(ctx)),\n getContentEl: (ctx: Ctx, id: string) => dom.getDoc(ctx).getElementById(dom.getContentId(ctx, id)),\n getTriggerEl: (ctx: Ctx, id: string) => dom.getDoc(ctx).getElementById(dom.getTriggerId(ctx, id)),\n getIndicatorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getIndicatorId(ctx)),\n\n getElements: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getTriggerGroupId(ctx))\n const selector = `[role=tab][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll(dom.getTriggerGroupEl(ctx), selector)\n },\n getFirstEl: (ctx: Ctx) => first(dom.getElements(ctx)),\n getLastEl: (ctx: Ctx) => last(dom.getElements(ctx)),\n getNextEl: (ctx: Ctx, id: string) => nextById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loop),\n getPrevEl: (ctx: Ctx, id: string) => prevById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loop),\n getRectById: (ctx: Ctx, id: string) => {\n const empty = { offsetLeft: 0, offsetTop: 0, offsetWidth: 0, offsetHeight: 0 }\n const tab = itemById(dom.getElements(ctx), dom.getTriggerId(ctx, id)) ?? empty\n if (ctx.isVertical) {\n return { top: `${tab.offsetTop}px`, height: `${tab.offsetHeight}px` }\n }\n return { left: `${tab.offsetLeft}px`, width: `${tab.offsetWidth}px` }\n },\n getActiveContentEl: (ctx: Ctx) => {\n if (!ctx.value) return\n const id = dom.getContentId(ctx, ctx.value)\n return dom.getDoc(ctx).getElementById(id)\n },\n}\n", "import { StateMachine as S } from \"@zag-js/core\"\nimport { dataAttr, EventKeyMap, getEventKey } from \"@zag-js/dom-utils\"\nimport { normalizeProp, PropTypes, ReactPropTypes } from \"@zag-js/types\"\nimport { isSafari } from \"@zag-js/utils\"\nimport { dom } from \"./tabs.dom\"\nimport { MachineContext, MachineState, TabProps } from \"./tabs.types\"\n\nexport function connect<T extends PropTypes = ReactPropTypes>(\n state: S.State<MachineContext, MachineState>,\n send: (event: S.Event<S.AnyEventObject>) => void,\n normalize = normalizeProp,\n) {\n const messages = state.context.messages\n const isFocused = state.matches(\"focused\")\n\n return {\n value: state.context.value,\n focusedValue: state.context.focusedValue,\n previousValues: Array.from(state.context.previousValues),\n setValue(value: string) {\n send({ type: \"SET_VALUE\", value })\n },\n\n rootProps: normalize.element<T>({\n \"data-part\": \"root\",\n id: dom.getRootId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\n dir: state.context.dir,\n }),\n\n triggerGroupProps: normalize.element<T>({\n \"data-part\": \"trigger-group\",\n id: dom.getTriggerGroupId(state.context),\n role: \"tablist\",\n \"data-focus\": dataAttr(isFocused),\n \"aria-orientation\": state.context.orientation,\n \"data-orientation\": state.context.orientation,\n \"aria-label\": messages.tablistLabel,\n onKeyDown(event) {\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send(\"ARROW_DOWN\")\n },\n ArrowUp() {\n send(\"ARROW_UP\")\n },\n ArrowLeft() {\n send(\"ARROW_LEFT\")\n },\n ArrowRight() {\n send(\"ARROW_RIGHT\")\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n Enter() {\n send({ type: \"ENTER\", value: state.context.focusedValue })\n },\n }\n\n let key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n event.preventDefault()\n exec(event)\n }\n },\n }),\n\n getTriggerProps(props: TabProps) {\n const { value, disabled } = props\n const selected = state.context.value === value\n\n return normalize.button<T>({\n \"data-part\": \"trigger\",\n role: \"tab\",\n type: \"button\",\n disabled,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(disabled),\n \"aria-disabled\": disabled,\n \"data-value\": value,\n \"aria-selected\": selected,\n \"data-selected\": dataAttr(selected),\n \"aria-controls\": dom.getContentId(state.context, value),\n \"data-ownedby\": dom.getTriggerGroupId(state.context),\n id: dom.getTriggerId(state.context, value),\n tabIndex: selected ? 0 : -1,\n onFocus() {\n send({ type: \"TAB_FOCUS\", value })\n },\n onBlur(event) {\n const target = event.relatedTarget as HTMLElement | null\n if (target?.getAttribute(\"role\") !== \"tab\") {\n send({ type: \"TAB_BLUR\" })\n }\n },\n onClick(event) {\n if (disabled) return\n if (isSafari()) {\n event.currentTarget.focus()\n }\n send({ type: \"TAB_CLICK\", value })\n },\n })\n },\n\n contentGroupProps: normalize.element<T>({\n \"data-part\": \"content-group\",\n id: dom.getContentGroupId(state.context),\n \"data-orientation\": state.context.orientation,\n }),\n\n getContentProps({ value }: { value: string }) {\n const selected = state.context.value === value\n return normalize.element<T>({\n \"data-part\": \"content\",\n id: dom.getContentId(state.context, value),\n tabIndex: 0,\n \"aria-labelledby\": dom.getTriggerId(state.context, value),\n role: \"tabpanel\",\n \"data-ownedby\": dom.getTriggerGroupId(state.context),\n hidden: !selected,\n })\n },\n\n getDeleteButtonProps({ value, disabled }: TabProps) {\n return normalize.button<T>({\n \"data-part\": \"delete-button\",\n type: \"button\",\n tabIndex: -1,\n \"aria-label\": messages.deleteLabel?.(value),\n disabled,\n onClick() {\n send({ type: \"DELETE\", value })\n },\n })\n },\n\n indicatorProps: normalize.element<T>({\n id: dom.getIndicatorId(state.context),\n \"data-part\": \"indicator\",\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-duration\": \"200ms\",\n \"--transition-property\": \"left, right, top, bottom, width, height\",\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.hasMeasuredRect ? \"var(--transition-duration)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n ...state.context.indicatorRect,\n },\n }),\n }\n}\n", "export { proxy, ref, snapshot, subscribe } from \"valtio/vanilla\"\nexport { choose } from \"./action-utils\"\nexport { guards } from \"./guard-utils\"\nexport * from \"./machine\"\nexport { mergeProps } from \"./merge-props\"\nexport type { StateMachine } from \"./types\"\n", "import { isObject, isString } from \"@zag-js/utils\"\nimport { Dict, StateMachine as S } from \"./types\"\n\nexport function choose<TContext, TState extends S.StateSchema, TEvent extends S.EventObject = S.AnyEventObject>(\n actions: Array<{ guard?: S.Guard<TContext, TEvent>; actions: S.PureActions<TContext, TState, TEvent> }>,\n): S.ChooseHelper<TContext, TState, TEvent> {\n return {\n predicate: (guardMap: Dict) => (ctx: TContext, event: TEvent) =>\n actions.find((def) => {\n def.guard = def.guard || (() => true)\n if (isString(def.guard)) {\n return !!guardMap[def.guard]?.(ctx, event)\n }\n\n if (isGuardHelper(def.guard)) {\n return def.guard.predicate(guardMap ?? {})(ctx, event)\n }\n\n return def.guard(ctx, event)\n })?.actions,\n }\n}\n\nfunction isGuardHelper(value: any): value is { predicate: Function } {\n return isObject(value) && value.predicate != null\n}\n\nexport function determineActionsFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(\n values: S.Actions<TContext, TState, TEvent> | undefined,\n guardMap: S.GuardMap<TContext, TEvent> | undefined,\n) {\n return (context: TContext, event: TEvent) => {\n if (isGuardHelper(values)) return values.predicate(guardMap ?? {})(context, event)\n return values\n }\n}\n", "import { isFunction, isObject, isString } from \"@zag-js/utils\"\nimport { Dict, StateMachine as S } from \"./types\"\n\nfunction or<TContext, TEvent extends S.EventObject>(\n ...conditions: Array<string | S.GuardHelper<TContext, TEvent> | S.GuardExpression<TContext, TEvent>>\n): S.GuardHelper<TContext, TEvent> {\n return {\n predicate: (guards: Dict) => (ctx: TContext, event: TEvent) =>\n conditions\n .map((condition) => {\n if (isString(condition)) {\n return !!guards[condition]?.(ctx, event)\n }\n if (isFunction(condition)) {\n return condition(ctx, event)\n }\n return condition.predicate(guards)(ctx, event)\n })\n .some(Boolean),\n }\n}\n\nfunction and<TContext, TEvent extends S.EventObject>(\n ...conditions: Array<string | S.GuardHelper<TContext, TEvent> | S.GuardExpression<TContext, TEvent>>\n): S.GuardHelper<TContext, TEvent> {\n return {\n predicate: (guards: Dict) => (ctx: TContext, event: TEvent) =>\n conditions\n .map((condition) => {\n if (isString(condition)) {\n return !!guards[condition]?.(ctx, event)\n }\n if (isFunction(condition)) {\n return condition(ctx, event)\n }\n return condition.predicate(guards)(ctx, event)\n })\n .every(Boolean),\n }\n}\n\nfunction not<TContext, TEvent extends S.EventObject>(\n condition: string | S.GuardHelper<TContext, TEvent> | S.GuardExpression<TContext, TEvent>,\n): S.GuardHelper<TContext, TEvent> {\n return {\n predicate: (guardMap: Dict) => (ctx: TContext, event: TEvent) => {\n if (isString(condition)) {\n return !guardMap[condition]?.(ctx, event)\n }\n if (isFunction(condition)) {\n return !condition(ctx, event)\n }\n return !condition.predicate(guardMap)(ctx, event)\n },\n }\n}\n\nexport const guards = { or, and, not }\n\nexport function isGuardHelper(value: unknown): value is { predicate: Function } {\n return isObject(value) && value.predicate != null\n}\n\nexport const TruthyGuard = () => true\n\n/**\n * Guards or conditions can be specified as:\n * - a string (reference to `options.guards`)\n * - a function that returns a number (in ms)\n */\nexport function determineGuardFn<TContext, TEvent extends S.EventObject>(\n guard: S.Guard<TContext, TEvent> | undefined,\n guardMap: S.GuardMap<TContext, TEvent> | undefined,\n) {\n guard = guard ?? TruthyGuard\n return (context: TContext, event: TEvent) => {\n if (isString(guard)) {\n const value = guardMap?.[guard]\n return isFunction(value) ? value(context, event) : value\n }\n\n if (isGuardHelper(guard)) {\n return guard.predicate(guardMap ?? {})(context, event)\n }\n\n return guard?.(context, event)\n }\n}\n", "export function klona(val) {\n\tvar k, out, tmp;\n\n\tif (Array.isArray(val)) {\n\t\tout = Array(k=val.length);\n\t\twhile (k--) out[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp;\n\t\treturn out;\n\t}\n\n\tif (Object.prototype.toString.call(val) === '[object Object]') {\n\t\tout = {}; // null\n\t\tfor (k in val) {\n\t\t\tif (k === '__proto__') {\n\t\t\t\tObject.defineProperty(out, k, {\n\t\t\t\t\tvalue: klona(val[k]),\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tout[k] = (tmp=val[k]) && typeof tmp === 'object' ? klona(tmp) : tmp;\n\t\t\t}\n\t\t}\n\t\treturn out;\n\t}\n\n\treturn val;\n}\n", "import { cast, clear, invariant, isArray, isObject, isString, noop, runIfFn, uuid, warn } from \"@zag-js/utils\"\nimport { klona } from \"klona/json\"\nimport { derive, subscribeKey, underive } from \"valtio/utils\"\nimport { ref, snapshot, subscribe } from \"valtio/vanilla\"\nimport { determineActionsFn } from \"./action-utils\"\nimport { createProxy } from \"./create-proxy\"\nimport { determineDelayFn } from \"./delay-utils\"\nimport { determineGuardFn } from \"./guard-utils\"\nimport { determineTransitionFn, toTransition } from \"./transition-utils\"\nimport { ActionTypes, Dict, MachineStatus, MachineType, StateMachine as S, VoidFunction, Writable } from \"./types\"\nimport { toArray, toEvent } from \"./utils\"\n\nexport class Machine<\n TContext extends Dict,\n TState extends S.StateSchema,\n TEvent extends S.EventObject = S.AnyEventObject,\n> {\n public status: MachineStatus = MachineStatus.NotStarted\n public readonly state: S.State<TContext, TState, TEvent>\n public initialState: S.StateInfo<TContext, TState, TEvent> | undefined\n\n public id: string\n\n public type: MachineType = MachineType.Machine\n\n // Cleanup function map (per state)\n private activityEvents = new Map<string, Set<VoidFunction>>()\n private delayedEvents = new Map<string, VoidFunction[]>()\n\n // state update listeners the user can opt-in for\n private stateListeners = new Set<S.StateListener<TContext, TState, TEvent>>()\n private eventListeners = new Set<S.EventListener<TEvent>>()\n private doneListeners = new Set<S.StateListener<TContext, TState, TEvent>>()\n private contextWatchers = new Set<VoidFunction>()\n\n // Cleanup functions (for `subscribe`)\n private removeStateListener: VoidFunction = noop\n private removeEventListener: VoidFunction = noop\n\n // For Parent <==> Spawned Actor relationship\n private parent?: AnyMachine\n private children = new Map<string, AnyMachine>()\n\n // A map of guard, action, delay implementations\n private guardMap: S.GuardMap<TContext, TEvent>\n private actionMap: S.ActionMap<TContext, TState, TEvent>\n private delayMap: S.DelayMap<TContext, TEvent>\n private activityMap: S.ActivityMap<TContext, TState, TEvent>\n private sync: boolean\n public options?: S.MachineOptions<TContext, TState, TEvent>\n\n // Let's get started!\n constructor(\n public config: S.MachineConfig<TContext, TState, TEvent>,\n options?: S.MachineOptions<TContext, TState, TEvent>,\n ) {\n // deep clone the config\n this.options = klona(options)\n this.id = config.id ?? `machine-${uuid()}`\n\n // maps\n this.guardMap = this.options?.guards ?? {}\n this.actionMap = this.options?.actions ?? {}\n this.delayMap = this.options?.delays ?? {}\n this.activityMap = this.options?.activities ?? {}\n this.sync = this.options?.sync ?? false\n\n // create mutatable state\n this.state = createProxy(klona(config))\n this.setupComputed()\n\n // created actions\n const event = toEvent<TEvent>(ActionTypes.Created)\n this.executeActions(config?.created, event)\n }\n\n // immutable state value\n private get stateSnapshot(): S.State<TContext, TState, TEvent> {\n return cast(snapshot(this.state))\n }\n\n // immutable context value\n private get contextSnapshot(): TContext {\n return this.stateSnapshot.context\n }\n\n // Starts the interpreted machine.\n public start = (init?: S.StateInit<TContext, TState>) => {\n // Don't start if it's already running\n if (this.status === MachineStatus.Running) {\n return this\n }\n\n this.status = MachineStatus.Running\n const event = toEvent<TEvent>(ActionTypes.Init)\n\n if (init) {\n const resolved = isObject(init) ? init : { context: this.config.context!, value: init }\n this.setState(resolved.value)\n this.setContext(resolved.context as Partial<TContext>)\n }\n\n // start transition definition\n const transition = {\n target: !!init ? undefined : this.config.initial,\n }\n\n const info = this.getNextStateInfo(transition, event)\n info.target = cast(info.target || transition.target)\n this.initialState = info\n this.performStateChangeEffects(info.target, info, event)\n\n this.removeStateListener = subscribe(\n this.state,\n () => {\n this.stateListeners.forEach((listener) => {\n listener(this.stateSnapshot)\n })\n },\n this.sync,\n )\n\n // For some reason `subscribe(this.state.event)` doesn't work, so we use `subscribeKey`\n this.removeEventListener = subscribeKey(this.state, \"event\", (value) => {\n if (this.config.onEvent) {\n this.executeActions(this.config.onEvent, value)\n }\n for (const listener of this.eventListeners) {\n listener(value)\n }\n })\n\n this.setupContextWatchers()\n this.executeActivities(toEvent<TEvent>(ActionTypes.Start), toArray(this.config.activities), ActionTypes.Start)\n this.executeActions(this.config.entry, toEvent<TEvent>(ActionTypes.Start))\n\n return this\n }\n\n private setupContextWatchers = () => {\n for (const [key, fn] of Object.entries(this.config.watch ?? {})) {\n this.contextWatchers.add(\n subscribeKey(this.state.context, key, () => {\n this.executeActions(fn, this.state.event as TEvent)\n }),\n )\n }\n }\n\n private setupComputed = () => {\n // convert computed properties to valtio getters format\n const computed = cast<S.TComputedContext<TContext>>(this.config.computed ?? {})\n const deriveFns = Object.fromEntries(\n Object.entries(computed).map(([key, fn]: any) => [key, (get: any) => fn(get(this.state.context))]),\n )\n\n // attach computed properties to the state's context\n derive(deriveFns, { proxy: this.state.context })\n }\n\n private detachComputed = () => {\n underive(this.state.context, { delete: true })\n }\n\n // Stops the interpreted machine\n stop = () => {\n // No need to call if already stopped\n if (this.status === MachineStatus.Stopped) return\n\n this.setState(null)\n this.setEvent(ActionTypes.Stop)\n\n if (this.config.context) {\n this.setContext(this.config.context as Partial<TContext>)\n }\n\n // cleanups\n this.stopStateListeners()\n this.stopChildren()\n this.stopActivities()\n this.stopDelayedEvents()\n this.stopContextWatchers()\n this.stopEventListeners()\n\n // cleanup `derive` subscriptions that was attached to the context\n this.detachComputed()\n\n this.status = MachineStatus.Stopped\n this.executeActions(this.config.exit, toEvent<TEvent>(ActionTypes.Stop))\n return this\n }\n\n private stopEventListeners = () => {\n this.eventListeners.clear()\n this.removeEventListener()\n }\n\n private stopStateListeners = () => {\n this.removeStateListener()\n this.stateListeners.clear()\n }\n\n private stopContextWatchers = () => {\n this.contextWatchers.forEach((fn) => fn())\n this.contextWatchers.clear()\n }\n\n private stopDelayedEvents = () => {\n this.delayedEvents.forEach((state) => {\n state.forEach((stop) => stop())\n })\n this.delayedEvents.clear()\n }\n\n // Cleanup running activities (e.g `setInterval`, invoked callbacks, promises)\n private stopActivities = (state?: TState[\"value\"]) => {\n // stop activities for a state\n if (state) {\n this.activityEvents.get(state)?.forEach((stop) => stop())\n this.activityEvents.get(state)?.clear()\n this.activityEvents.delete(state)\n } else {\n // stop every running activity\n this.activityEvents.forEach((state) => {\n state.forEach((stop) => stop())\n state.clear()\n })\n this.activityEvents.clear()\n }\n }\n\n /**\n * Function to send event to spawned child machine or actor\n */\n sendChild = (evt: S.Event<S.AnyEventObject>, to: string | ((ctx: TContext) => string)) => {\n const event = toEvent(evt)\n const id = runIfFn(to, this.contextSnapshot)\n const child = this.children.get(id)\n if (!child) {\n invariant(`[machine/send-child] Cannot send '${event.type}' event to unknown child`)\n }\n child!.send(event)\n }\n\n /**\n * Function to stop a running child machine or actor\n */\n stopChild = (id: string) => {\n if (!this.children.has(id)) {\n invariant(\"[machine/stop-child] Cannot stop unknown child\")\n }\n this.children.get(id)!.stop()\n this.children.delete(id)\n }\n\n removeChild = (id: string) => {\n this.children.delete(id)\n }\n\n // Stop and delete spawned actors\n private stopChildren = () => {\n this.children.forEach((child) => child.stop())\n this.children.clear()\n }\n\n setParent = (parent: any) => {\n this.parent = parent\n }\n\n public spawn = <TContext extends Dict, TState extends S.StateSchema, TEvent extends S.EventObject = S.AnyEventObject>(\n src: MachineSrc<TContext, TState, TEvent>,\n id?: string,\n ) => {\n const actor = runIfFn(src)\n if (id) actor.id = id\n actor.type = MachineType.Actor\n actor.setParent(this)\n this.children.set(actor.id, cast(actor))\n\n actor\n .onDone(() => {\n this.removeChild(actor.id)\n })\n .start()\n\n return cast<typeof actor>(ref(actor))\n }\n\n private addActivityCleanup = (state: TState[\"value\"] | null, cleanup: VoidFunction) => {\n if (!state) return\n if (!this.activityEvents.has(state)) {\n this.activityEvents.set(state, new Set([cleanup]))\n } else {\n this.activityEvents.get(state)?.add(cleanup)\n }\n }\n\n private setState = (target: TState[\"value\"] | null) => {\n this.state.previousValue = this.state.value\n this.state.value = target\n\n const stateNode = this.getStateNode(target)\n\n if (target == null) {\n // remove all tags\n clear(this.state.tags)\n } else {\n this.state.tags = toArray(stateNode?.tags)\n }\n }\n\n /**\n * To used within side effects for React or Vue to update context\n */\n setContext = (context: Partial<Writable<TContext>>) => {\n for (const key in context) {\n this.state.context[<keyof TContext>key] = context[key]!\n }\n }\n\n withContext = (context: Partial<Writable<TContext>>) => {\n this.detachComputed()\n const newContext = { ...this.config.context, ...context } as TContext\n return new Machine({ ...this.config, context: newContext }, this.options)\n }\n\n withOptions = (options: Partial<S.MachineOptions<TContext, TState, TEvent>>) => {\n this.detachComputed()\n return new Machine(this.config, { ...this.options, ...options })\n }\n\n setActions = (actions: Partial<S.MachineOptions<TContext, TState, TEvent>>[\"actions\"]) => {\n this.actionMap = { ...this.actionMap, ...actions }\n }\n\n clone = () => {\n this.detachComputed()\n return new Machine(this.config, this.options)\n }\n\n private getStateNode = (state: TState[\"value\"] | null) => {\n if (!state) return\n return this.config.states?.[state]\n }\n\n private getNextStateInfo = (\n transitions: S.Transitions<TContext, TState, TEvent>,\n event: TEvent,\n ): S.StateInfo<TContext, TState, TEvent> => {\n const transition = this.determineTransition(transitions, event)\n const target = transition?.target ?? this.state.value\n const stateNode = this.getStateNode(target)\n\n return {\n transition,\n stateNode,\n target: target!,\n }\n }\n\n private getActionFromDelayedTransition = (transition: S.DelayedTransition<TContext, TState, TEvent>) => {\n // get the computed delay\n const event = toEvent<TEvent>(ActionTypes.After)\n\n const determineDelay = determineDelayFn(transition.delay, this.delayMap)\n const delay = determineDelay(this.contextSnapshot, event)\n\n let id: ReturnType<typeof globalThis.setTimeout>\n\n return {\n entry: () => {\n id = globalThis.setTimeout(() => {\n const current = this.state.value!\n const next = this.getNextStateInfo(transition, event)\n this.performStateChangeEffects(current, next, event)\n }, delay)\n },\n exit: () => {\n globalThis.clearTimeout(id)\n },\n }\n }\n\n /**\n * All `after` events leverage `setTimeout` and `clearTimeout`,\n * we invoke the `clearTimeout` on exit and `setTimeout` on entry.\n *\n * To achieve this, we split the `after` defintion into `entry` and `exit`\n * functions and append them to the state's `entry` and `exit` actions\n */\n private getDelayedEventActions = (state: TState[\"value\"]) => {\n const stateNode = this.getStateNode(state)\n const event = toEvent<TEvent>(ActionTypes.After)\n\n if (!stateNode || !stateNode.after) return\n\n const entries: VoidFunction[] = []\n const exits: VoidFunction[] = []\n\n if (isArray(stateNode.after)) {\n //\n const transition = this.determineTransition(stateNode.after, event)\n if (!transition) return\n\n const actions = this.getActionFromDelayedTransition(transition)\n entries.push(actions.entry)\n exits.push(actions.exit)\n //\n } else if (isObject(stateNode.after)) {\n //\n for (const delay in stateNode.after) {\n const transition = stateNode.after[delay]\n let resolvedTransition: S.DelayedTransition<TContext, TState, TEvent> = {}\n\n if (isArray(transition)) {\n //\n const picked = this.determineTransition(transition, event)\n if (picked) resolvedTransition = picked\n //\n } else if (isString(transition)) {\n resolvedTransition = { target: transition, delay }\n } else {\n resolvedTransition = { ...transition, delay }\n }\n\n const actions = this.getActionFromDelayedTransition(resolvedTransition)\n\n entries.push(actions.entry)\n exits.push(actions.exit)\n }\n }\n\n return { entries, exits }\n }\n\n /**\n * A reference to the instance methods of the machine.\n * Useful when spawning child machines and managing the communication between them.\n */\n private get self(): S.Self<TContext, TState, TEvent> {\n const _self = this\n return {\n id: this.id,\n send: this.send.bind(this),\n sendParent: this.sendParent.bind(this),\n sendChild: this.sendChild.bind(this),\n stop: this.stop.bind(this),\n stopChild: this.stopChild.bind(this),\n spawn: this.spawn.bind(this) as any,\n get state() {\n return _self.stateSnapshot\n },\n }\n }\n\n private get meta(): S.Meta<TContext, TState, TEvent> {\n return {\n state: this.stateSnapshot,\n guards: this.guardMap,\n send: this.send.bind(this),\n listen: this.onEvent.bind(this),\n self: this.self,\n getState: () => this.stateSnapshot,\n }\n }\n\n /**\n * Function to executes defined actions. It can accept actions as string\n * (referencing `options.actions`) or actual functions.\n */\n private executeActions = (actions: S.Actions<TContext, TState, TEvent> | undefined, event: TEvent) => {\n const _actions = determineActionsFn(actions, this.guardMap)(this.contextSnapshot, event)\n for (const action of toArray(_actions)) {\n const fn = isString(action) ? this.actionMap?.[action] : action\n warn(isString(action) && !fn, `[machine/exec-action] No implementation found for action: \\`${action}\\``)\n fn?.(this.state.context, event, this.meta)\n }\n }\n\n /**\n * Function to execute running activities and registers\n * their cleanup function internally (to be called later on when we exit the state)\n */\n private executeActivities = (\n event: TEvent,\n activities: Array<S.Activity<TContext, TState, TEvent>>,\n state?: TState[\"value\"],\n ) => {\n for (const activity of activities) {\n const fn = isString(activity) ? this.activityMap?.[activity] : activity\n\n if (!fn) {\n warn(`[machine/exec-activity] No implementation found for activity: \\`${activity}\\``)\n continue\n }\n\n const cleanup = fn(this.state.context, event, this.meta)\n if (cleanup) {\n this.addActivityCleanup(state ?? this.state.value, cleanup)\n }\n }\n }\n\n /**\n * Normalizes the `every` definition to transition. `every` can be:\n * - An array of possible actions to run (we need to pick the first match based on guard)\n * - An object of intervals and actions\n */\n private createEveryActivities = (\n every: S.StateNode<TContext, TState, TEvent>[\"every\"] | undefined,\n callbackfn: (activity: S.Activity<TContext, TState, TEvent>) => void,\n ) => {\n if (!every) return\n const event = toEvent<TEvent>(ActionTypes.Every)\n\n // every: [{ interval: 2000, actions: [...], guard: \"isValid\" }, { interval: 1000, actions: [...] }]\n if (isArray(every)) {\n // picked = { interval: string | number | <ref>, actions: [...], guard: ... }\n const picked = toArray(every).find((t) => {\n //\n const determineDelay = determineDelayFn(t.delay, this.delayMap)\n t.delay = determineDelay(this.contextSnapshot, event)\n\n const determineGuard = determineGuardFn(t.guard, this.guardMap)\n const guard = determineGuard(this.contextSnapshot, event)\n\n return guard ?? t.delay\n })\n\n if (!picked) return\n\n const determineDelay = determineDelayFn(picked.delay, this.delayMap)\n const delay = determineDelay(this.contextSnapshot, event)\n\n const activity = () => {\n const id = globalThis.setInterval(() => {\n this.executeActions(picked.actions, event)\n }, delay)\n return () => {\n globalThis.clearInterval(id)\n }\n }\n callbackfn(activity)\n //\n } else {\n // every = { 1000: [fn, fn] }\n for (const interval in every) {\n const actions = every?.[interval]\n\n // interval could be a `ref` not the actual interval value, let's determine the actual value\n const determineDelay = determineDelayFn(interval, this.delayMap)\n const delay = determineDelay(this.contextSnapshot, event)\n\n // create the activity to run for each `every` reaction\n const activity = () => {\n const id = globalThis.setInterval(() => {\n this.executeActions(actions, event)\n }, delay)\n return () => {\n globalThis.clearInterval(id)\n }\n }\n callbackfn(activity)\n }\n }\n }\n\n private setEvent = (event: TEvent | TEvent[\"type\"]) => {\n this.state.event = ref(toEvent(event))\n }\n\n private performExitEffects = (current: TState[\"value\"] | undefined, event: TEvent) => {\n const currentState = this.state.value!\n const stateNode = current ? this.getStateNode(current) : undefined\n\n // cleanup activities for current state\n this.stopActivities(currentState)\n\n // get explicit exit and implicit \"after.exit\" actions for current state\n const _exit = determineActionsFn(stateNode?.exit, this.guardMap)(this.contextSnapshot, event)\n const exitActions = toArray(_exit)\n\n const afterExitActions = this.delayedEvents.get(currentState)\n if (afterExitActions) {\n exitActions.push(...afterExitActions)\n }\n\n // call all exit actions for current state\n this.executeActions(exitActions, event)\n\n // remove all registered listeners\n this.eventListeners.clear()\n }\n\n private performEntryEffects = (next: TState[\"value\"], event: TEvent) => {\n const stateNode = this.getStateNode(next)\n\n // execute activities for next state\n const activities = toArray(stateNode?.activities)\n\n // if `every` is defined, create an activity and append to activities\n this.createEveryActivities(stateNode?.every, (activity) => {\n activities.unshift(activity)\n })\n\n if (activities.length > 0) {\n this.executeActivities(event, activities)\n }\n\n // get all entry actions\n const _entry = determineActionsFn(stateNode?.entry, this.guardMap)(this.contextSnapshot, event)\n const entryActions = toArray(_entry)\n const afterActions = this.getDelayedEventActions(next)\n\n if (stateNode?.after && afterActions) {\n this.delayedEvents.set(next, afterActions?.exits)\n entryActions.push(...afterActions.entries)\n }\n\n // execute entry actions for next state\n this.executeActions(entryActions, event)\n\n if (stateNode?.type === \"final\") {\n this.state.done = true\n this.doneListeners.forEach((listener) => {\n listener(this.stateSnapshot)\n })\n this.stop()\n }\n }\n\n private performTransitionEffects = (\n transition: S.Transitions<TContext, TState, TEvent> | undefined,\n event: TEvent,\n ) => {\n // execute transition actions\n const t = this.determineTransition(transition, event)\n this.executeActions(t?.actions, event)\n }\n\n /**\n * Performs all the requires side-effects or reactions when\n * we move from state A => state B.\n *\n * The Effect order:\n * Exit actions (current state) => Transition actions => Go to state => Entry actions (next state)\n */\n private performStateChangeEffects = (\n current: TState[\"value\"] | undefined,\n next: S.StateInfo<TContext, TState, TEvent>,\n event: TEvent,\n ) => {\n // update event\n this.setEvent(event)\n\n // determine next target\n next.target = next.target ?? this.state.value ?? undefined\n const ok = next.target && next.target !== this.state.value\n\n if (ok) {\n this.performExitEffects(current, event)\n }\n\n // execute transition actions\n this.performTransitionEffects(next?.transition, event)\n\n // go to next state\n this.setState(next.target)\n\n if (ok) {\n this.performEntryEffects(next.target, event)\n }\n }\n\n private determineTransition = (transition: S.Transitions<TContext, TState, TEvent> | undefined, event: TEvent) => {\n const fn = determineTransitionFn(transition, this.guardMap)\n return fn?.(this.contextSnapshot, event)\n }\n\n /**\n * Function to send event to parent machine from spawned child\n */\n sendParent = (evt: S.Event<S.AnyEventObject>) => {\n if (!this.parent) {\n invariant(\"[machine/send-parent] Cannot send event to an unknown parent\")\n }\n const event = toEvent<S.AnyEventObject>(evt)\n this.parent?.send(event)\n }\n\n /**\n * Function to send an event to current machine\n */\n send = (evt: S.Event<TEvent>) => {\n const event = toEvent<TEvent>(evt)\n this.transition(this.state.value, event)\n }\n\n transition = (state: TState[\"value\"] | S.StateInfo<TContext, TState, TEvent> | null, evt: S.Event<TEvent>) => {\n const stateNode = isString(state) ? this.getStateNode(state) : state?.stateNode\n\n const event = toEvent(evt)\n\n if (!stateNode && !this.config.on) {\n const msg =\n this.status === MachineStatus.Stopped\n ? \"[machine/transition] Cannot transition a stopped machine\"\n : \"[machine/transition] State does not have a definition\"\n warn(msg)\n return\n }\n\n const transitionConfig: S.Transitions<TContext, TState, TEvent> =\n stateNode?.on?.[event.type] ?? this.config.on?.[event.type]\n\n const transition = toTransition(transitionConfig, this.state.value)\n\n if (!transition) return\n\n const info = this.getNextStateInfo(transition, event)\n this.performStateChangeEffects(this.state.value!, info, event)\n\n return info.stateNode\n }\n\n subscribe = (listener: S.StateListener<TContext, TState, TEvent>) => {\n this.stateListeners.add(listener)\n\n if (this.status === MachineStatus.Running) {\n listener(this.stateSnapshot)\n }\n\n return () => {\n this.stateListeners.delete(listener)\n }\n }\n\n public onDone = (listener: S.StateListener<TContext, TState, TEvent>) => {\n this.doneListeners.add(listener)\n return this\n }\n\n public onTransition = (listener: S.StateListener<TContext, TState, TEvent>) => {\n this.stateListeners.add(listener)\n if (this.status === MachineStatus.Running) {\n listener(this.stateSnapshot)\n }\n return this\n }\n\n public onEvent = (listener: S.EventListener<TEvent>) => {\n listener(this.state.event)\n this.eventListeners.add(listener)\n return this\n }\n}\n\nexport type MachineSrc<\n TContext extends Dict,\n TState extends S.StateSchema,\n TEvent extends S.EventObject = S.AnyEventObject,\n> = Machine<TContext, TState, TEvent> | (() => Machine<TContext, TState, TEvent>)\n\nexport type AnyMachine = Machine<Dict, S.StateSchema, S.AnyEventObject>\n\nexport const createMachine = <\n TContext extends Dict,\n TState extends S.StateSchema = S.StateSchema,\n TEvent extends S.EventObject = S.AnyEventObject,\n>(\n config: S.MachineConfig<TContext, TState, TEvent>,\n options?: S.MachineOptions<TContext, TState, TEvent>,\n) => new Machine(config, options)\n", "import { proxy } from \"valtio/vanilla\"\nimport { cast } from \"@zag-js/utils\"\nimport { ActionTypes, Dict, StateMachine as S } from \"./types\"\n\nexport function createProxy<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(\n config: S.MachineConfig<TContext, TState, TEvent>,\n) {\n const state = proxy({\n value: \"\",\n previousValue: \"\",\n event: cast<Dict>({}),\n context: config.context ?? cast<TContext>({}),\n done: false,\n tags: [] as Array<TState[\"tags\"]>,\n hasTag(tag: TState[\"tags\"]): boolean {\n return this.tags.includes(tag)\n },\n matches(...value: string[]): boolean {\n return value.includes(this.value)\n },\n can(event: string): boolean {\n return cast<any>(this).nextEvents.includes(event)\n },\n get nextEvents() {\n const stateEvents = (config.states as Dict)?.[this.value]?.[\"on\"] ?? {}\n const globalEvents = config?.on ?? {}\n return Object.keys({ ...stateEvents, ...globalEvents })\n },\n get changed() {\n if (this.event.value === ActionTypes.Init || !this.previousValue) return false\n return this.value !== this.previousValue\n },\n })\n return cast<S.State<TContext, TState, TEvent>>(state)\n}\n", "import { isFunction, isNumber, isString } from \"@zag-js/utils\"\nimport { StateMachine as S } from \"./types\"\n\n/**\n * Delay can be specified as:\n * - a string (reference to `options.delays`)\n * - a number (in ms)\n * - a function that returns a number (in ms)\n *\n * Let's resolve this to a number\n */\nexport function determineDelayFn<TContext, TEvent extends S.EventObject>(\n delay: S.Delay<TContext, TEvent> | undefined,\n delaysMap: S.DelayMap<TContext, TEvent> | undefined,\n) {\n return (context: TContext, event: TEvent) => {\n if (isNumber(delay)) return delay\n\n if (isFunction(delay)) {\n return delay(context, event)\n }\n\n if (isString(delay)) {\n const value = Number.parseFloat(delay)\n\n if (!Number.isNaN(value)) {\n return value\n }\n\n if (delaysMap) {\n const valueOrFn = delaysMap?.[delay]\n if (valueOrFn == null) {\n const msg = `[machine] Cannot determine delay for ${delay}. It doesn't exist in options.delays`\n throw new Error(msg)\n }\n return isFunction(valueOrFn) ? valueOrFn(context, event) : valueOrFn\n }\n }\n }\n}\n", "import { isArray, isString } from \"@zag-js/utils\"\nimport type { StateMachine as S } from \"./types\"\n\nexport function toEvent<T extends S.EventObject>(event: S.Event<T>): T {\n const obj = isString(event) ? { type: event } : event\n return obj as T\n}\n\nexport function toArray<T>(value: T | T[] | undefined): T[] {\n if (!value) return []\n return isArray(value) ? value : [value]\n}\n", "import { cast, isArray, isObject, isString } from \"@zag-js/utils\"\nimport { determineGuardFn } from \"./guard-utils\"\nimport type { StateMachine as S } from \"./types\"\nimport { toArray } from \"./utils\"\n\n/**\n * A transition is an object that describes the next state, or/and actions\n * that should run when an event is sent.\n *\n * Transitions can be specified as:\n * - A single string: \"spinning\"\n * - An object with `target`, `actions`, or `guard`: { target: \"spinning\", actions: [...], guard: isValid }\n * - An array of possible transitions. In this case, we'll pick the first matching transition\n * depending on the `guard` specified\n */\n\nexport function toTarget<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(\n target: S.Transition<TContext, TState, TEvent>,\n): S.TransitionDefinition<TContext, TState, TEvent> {\n return isString(target) ? { target } : target\n}\n\nexport function determineTransitionFn<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(\n transitions?: S.Transitions<TContext, TState, TEvent>,\n guardMap?: S.GuardMap<TContext, TEvent>,\n) {\n return (context: TContext, event: TEvent) => {\n return toArray(transitions)\n .map(toTarget)\n .find((transition) => {\n // get condition function\n const determineGuard = determineGuardFn(transition.guard, guardMap)\n const guard = determineGuard(context, event)\n return guard ?? transition.target ?? transition.actions\n })\n }\n}\n\nexport function toTransition<TContext, TState extends S.StateSchema, TEvent extends S.EventObject>(\n transition: S.Transitions<TContext, TState, TEvent> | undefined,\n current?: TState[\"value\"] | null,\n) {\n const _transition = isString(transition) ? toTarget(transition) : transition\n\n const fn = (t: S.TransitionDefinition<TContext, TState, TEvent>) => {\n const isTargetless = t.actions && !t.target\n if (isTargetless && current) t.target = current\n return t\n }\n\n if (isArray(_transition)) {\n return _transition.map(fn)\n }\n\n if (isObject(_transition)) {\n return fn(cast(_transition))\n }\n}\n", "import { createMachine, guards, ref } from \"@zag-js/core\"\nimport { getFocusables, nextTick } from \"@zag-js/dom-utils\"\nimport { dom } from \"./tabs.dom\"\nimport { MachineContext, MachineState } from \"./tabs.types\"\n\nconst { not } = guards\n\nexport const machine = createMachine<MachineContext, MachineState>(\n {\n initial: \"unknown\",\n\n context: {\n dir: \"ltr\",\n orientation: \"horizontal\",\n activationMode: \"automatic\",\n value: null,\n focusedValue: null,\n uid: \"\",\n previousValues: [],\n indicatorRect: { left: \"0px\", top: \"0px\", width: \"0px\", height: \"0px\" },\n hasMeasuredRect: false,\n isIndicatorRendered: false,\n loop: true,\n messages: {},\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n isVertical: (ctx) => ctx.orientation === \"vertical\",\n },\n\n created: [\"setPrevSelectedTabs\"],\n\n watch: {\n focusedValue: \"invokeOnFocus\",\n value: [\"invokeOnChange\", \"setPrevSelectedTabs\", \"setIndicatorRect\", \"setContentTabIndex\"],\n dir: [\"clearMeasured\", \"setIndicatorRect\"],\n },\n\n on: {\n SET_VALUE: {\n actions: \"setValue\",\n },\n DELETE: {\n actions: \"deleteValue\",\n },\n },\n\n states: {\n unknown: {\n on: {\n SETUP: {\n target: \"idle\",\n actions: [\"setupDocument\", \"checkRenderedElements\", \"setIndicatorRect\", \"setContentTabIndex\"],\n },\n },\n },\n idle: {\n on: {\n TAB_FOCUS: {\n guard: \"selectOnFocus\",\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n },\n },\n focused: {\n on: {\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: \"focusPrevTab\",\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: \"focusNextTab\",\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: \"focusPrevTab\",\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: \"focusNextTab\",\n },\n HOME: {\n actions: \"focusFirstTab\",\n },\n END: {\n actions: \"focusLastTab\",\n },\n ENTER: {\n guard: not(\"selectOnFocus\"),\n actions: \"setValue\",\n },\n TAB_FOCUS: [\n {\n guard: \"selectOnFocus\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n { actions: \"setFocusedValue\" },\n ],\n TAB_BLUR: {\n target: \"idle\",\n actions: \"clearFocusedValue\",\n },\n },\n },\n },\n },\n {\n guards: {\n isVertical: (ctx) => ctx.isVertical,\n isHorizontal: (ctx) => ctx.isHorizontal,\n selectOnFocus: (ctx) => ctx.activationMode === \"automatic\",\n },\n actions: {\n setupDocument(ctx, evt) {\n ctx.uid = evt.id\n if (evt.doc) ctx.doc = ref(evt.doc)\n },\n setFocusedValue(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n clearFocusedValue(ctx) {\n ctx.focusedValue = null\n },\n setValue(ctx, evt) {\n ctx.value = evt.value\n },\n invokeOnDelete(ctx, evt) {\n ctx.onDelete?.({ value: evt.value })\n },\n focusFirstTab(ctx) {\n nextTick(() => dom.getFirstEl(ctx)?.focus())\n },\n focusLastTab(ctx) {\n nextTick(() => dom.getLastEl(ctx)?.focus())\n },\n focusNextTab(ctx) {\n if (!ctx.focusedValue) return\n const next = dom.getNextEl(ctx, ctx.focusedValue)\n nextTick(() => next?.focus())\n },\n focusPrevTab(ctx) {\n if (!ctx.focusedValue) return\n const prev = dom.getPrevEl(ctx, ctx.focusedValue)\n nextTick(() => prev?.focus())\n },\n setIndicatorRect(ctx) {\n nextTick(() => {\n if (!ctx.isIndicatorRendered || !ctx.value) return\n ctx.indicatorRect = dom.getRectById(ctx, ctx.value)\n if (ctx.hasMeasuredRect) return\n nextTick(() => {\n ctx.hasMeasuredRect = true\n })\n })\n },\n checkRenderedElements(ctx) {\n nextTick(() => {\n ctx.isIndicatorRendered = !!dom.getIndicatorEl(ctx)\n })\n },\n clearMeasured(ctx) {\n ctx.hasMeasuredRect = false\n },\n invokeOnChange(ctx) {\n ctx.onChange?.({ value: ctx.value })\n },\n invokeOnFocus(ctx) {\n ctx.onFocus?.({ value: ctx.focusedValue })\n },\n setPrevSelectedTabs(ctx) {\n if (ctx.value != null) {\n const newSelected = Array.from(ctx.previousValues).concat(ctx.value)\n ctx.previousValues = Array.from(new Set(newSelected))\n }\n },\n // if tab panel contains focusable elements, remove the tabindex attribute\n setContentTabIndex(ctx) {\n nextTick(() => {\n const panel = dom.getActiveContentEl(ctx)\n if (!panel) return\n const focusables = getFocusables(panel)\n if (focusables.length > 0) {\n panel.removeAttribute(\"tabindex\")\n } else {\n panel.setAttribute(\"tabindex\", \"0\")\n }\n })\n },\n },\n },\n)\n"],
5
- "mappings": "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",
3
+ "sources": ["../src/index.ts", "../../../utilities/dom/src/attrs.ts", "../../../utilities/dom/src/computed-style.ts", "../../../utilities/dom/src/next-tick.ts", "../../../utilities/dom/src/auto-resize.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/warning.ts", "../../../utilities/dom/src/event-bus.ts", "../../../utilities/dom/src/listener.ts", "../../../utilities/dom/src/body-pointer-event.ts", "../../../utilities/dom/src/body-scroll-lock.ts", "../../../utilities/dom/src/query.ts", "../../../utilities/dom/src/scrollable.ts", "../../../utilities/dom/src/constants.ts", "../../../utilities/dom/src/dispatch-event.ts", "../../../utilities/dom/src/focus-event.ts", "../../../utilities/dom/src/focusable.ts", "../../../utilities/dom/src/form.ts", "../../../utilities/dom/src/keyboard-event.ts", "../../../utilities/dom/src/visually-hidden.ts", "../../../utilities/dom/src/live-region.ts", "../../../utilities/dom/src/mutation-observer.ts", "../../../utilities/dom/src/nodelist.ts", "../../../utilities/dom/src/text-selection.ts", "../../../utilities/dom/src/pointer-event.ts", "../../../utilities/dom/src/pointerlock.ts", "../../../utilities/dom/src/rect-observer.ts", "../../../utilities/dom/src/visibility-event.ts", "../../../utilities/dom/src/wait.ts", "../../../types/src/prop-types.ts", "../../../types/src/controls.ts", "../../../utilities/core/src/array.ts", "../../../utilities/core/src/functions.ts", "../../../utilities/core/src/guard.ts", "../../../utilities/core/src/warning.ts", "../src/tabs.dom.ts", "../src/tabs.connect.ts", "../src/tabs.machine.ts"],
4
+ "sourcesContent": ["export { connect } from \"./tabs.connect\"\nexport { machine } from \"./tabs.machine\"\nexport type { MachineContext, MachineState } from \"./tabs.types\"\n", "type Booleanish = boolean | \"true\" | \"false\"\n\nexport const dataAttr = (guard: boolean | undefined) => {\n return (guard ? \"\" : undefined) as Booleanish\n}\n\nexport const ariaAttr = (guard: boolean | undefined) => {\n return guard ? true : undefined\n}\n", "type Key = keyof CSSStyleDeclaration | (string & {})\ntype Styles = Record<Key, any>\ntype El = HTMLElement | null | undefined\n\nfunction getStyleCache(): WeakMap<HTMLElement, Styles> {\n ;(globalThis as any).__styleCache__ = (globalThis as any).__styleCache__ || new WeakMap()\n return (globalThis as any).__styleCache__\n}\n\nexport function getComputedStyle(el: El): Styles {\n if (!el) return {} as Styles\n const cache = getStyleCache()\n let style: Styles | undefined = cache.get(el)\n if (!style) {\n const win = el?.ownerDocument.defaultView ?? window\n style = win.getComputedStyle(el) as Styles\n cache.set(el, style)\n }\n return style\n}\n\nexport function copyVisualStyles(fromEl: HTMLElement | null, toEl: HTMLElement) {\n if (!fromEl) return\n const el = getComputedStyle(fromEl)\n // prettier-ignore\n const cssText = 'box-sizing:' + el.boxSizing +\n ';border-left:' + el.borderLeftWidth + ' solid red' +\n ';border-right:' + el.borderRightWidth + ' solid red' +\n ';font-family:' + el.fontFamily +\n ';font-feature-settings:' + el.fontFeatureSettings +\n ';font-kerning:' + el.fontKerning +\n ';font-size:' + el.fontSize +\n ';font-stretch:' + el.fontStretch +\n ';font-style:' + el.fontStyle +\n ';font-variant:' + el.fontVariant +\n ';font-variant-caps:' + el.fontVariantCaps +\n ';font-variant-ligatures:' + el.fontVariantLigatures +\n ';font-variant-numeric:' + el.fontVariantNumeric +\n ';font-weight:' + el.fontWeight +\n ';letter-spacing:' + el.letterSpacing +\n ';margin-left:' + el.marginLeft +\n ';margin-right:' + el.marginRight +\n ';padding-left:' + el.paddingLeft +\n ';padding-right:' + el.paddingRight +\n ';text-indent:' + el.textIndent +\n ';text-transform:' + el.textTransform\n\n toEl.style.cssText += cssText\n}\n", "export function nextTick(fn: VoidFunction) {\n const set = new Set<VoidFunction>()\n function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n set.add(() => globalThis.cancelAnimationFrame(id))\n }\n raf(() => raf(fn))\n return function cleanup() {\n set.forEach(function (fn) {\n fn()\n })\n }\n}\n\nexport function raf(fn: VoidFunction) {\n const id = globalThis.requestAnimationFrame(fn)\n return function cleanup() {\n globalThis.cancelAnimationFrame(id)\n }\n}\n\nexport function forceReflow() {\n return document.body.offsetHeight\n}\n", "import { copyVisualStyles } from \"./computed-style\"\nimport { raf } from \"./next-tick\"\n\nfunction createGhostElement(doc: Document) {\n var el = doc.createElement(\"div\")\n el.id = \"ghost\"\n el.style.cssText =\n \"display:inline-block;height:0;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:nowrap;\"\n doc.body.appendChild(el)\n return el\n}\n\nexport function autoResizeInput(input: HTMLInputElement | null) {\n if (!input) return\n const doc = input.ownerDocument ?? document\n const ghost = createGhostElement(doc)\n\n copyVisualStyles(input, ghost)\n\n function resize() {\n raf(() => {\n ghost.innerHTML = input!.value\n const rect = getComputedStyle(ghost)\n input?.style.setProperty(\"width\", rect.width)\n })\n }\n\n resize()\n\n input?.addEventListener(\"input\", resize)\n input?.addEventListener(\"change\", resize)\n\n return () => {\n doc.body.removeChild(ghost)\n input?.removeEventListener(\"input\", resize)\n input?.removeEventListener(\"change\", resize)\n }\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "const platform = (v: RegExp) => isDom() && v.test(navigator.platform)\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\n\nexport const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => !!(typeof window !== \"undefined\")\nexport const isMac = () => platform(/^Mac/)\nexport const isIPhone = () => platform(/^iPhone/)\nexport const isIPad = () => platform(/^iPad/) || (isMac() && navigator.maxTouchPoints > 1)\nexport const isIos = () => isIPhone() || isIPad()\nexport const isSafari = () => ua(/^((?!chrome|android).)*safari/i)\nexport const isFirefox = () => ua(/^Firefox/)\nexport const isWebkit = () => ua(/^WebKit/) && !ua(/Chrome/)\nexport const isApple = () => isMac() || isIos()\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && \"button\" in v\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && \"touches\" in v\nexport const isLeftClick = (v: MouseEvent | PointerEvent) => v.button === 0\nexport const isRightClick = (v: MouseEvent | PointerEvent) => v.button === 2\nexport const isModifiedEvent = (v: MouseEvent | PointerEvent | KeyboardEvent) =>\n v.ctrlKey || v.altKey || v.metaKey || v.shiftKey\nexport const isCtrlKey = (v: KeyboardEvent) => (isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey)\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype El = HTMLElement | Document | VisualViewport | Window\ntype Handler = (event: Event) => void\ntype Group = Map<string, Set<Handler>>\ntype Option = boolean | AddEventListenerOptions\n\nfunction getListenerElements(): Map<El, Group> {\n ;(globalThis as any).__listenerElements__ = (globalThis as any).__listenerElements__ || new Map()\n return (globalThis as any).__listenerElements__\n}\n\nfunction getListenerCache(): Map<El, Map<string, Handler>> {\n ;(globalThis as any).__listenerCache__ = (globalThis as any).__listenerCache__ || new Map()\n return (globalThis as any).__listenerCache__\n}\n\n/**\n * The global event bus for managing event listeners attached to DOM elements.\n *\n * It's goal is to ensure that only one listener is attached to a DOM element for a given event,\n * regardless of the number of times `addEventListener` is called.\n */\n\nexport function globalEventBus(node: El | null, type: string, handler: Handler, options?: Option) {\n if (!node) return noop\n\n // unique identifier for the event listener\n const hash = JSON.stringify({ type, options })\n\n // Subscribe pattern\n const listenerElements = getListenerElements()\n const listenerCache = getListenerCache()\n\n const group = listenerElements.get(node)\n\n if (!listenerElements.has(node)) {\n // create group of listeners per hash\n const group: Group = new Map([[hash, new Set([handler])]])\n listenerElements.set(node, group)\n } else if (group?.has(hash)) {\n group?.get(hash)?.add(handler)\n } else {\n group?.set(hash, new Set([handler]))\n }\n\n // add the event listener to the node or register it in the cache\n function attach(node: El) {\n // Publish pattern\n function listener(event: Event) {\n const group = listenerElements.get(node)\n group?.get(hash)?.forEach((fn) => fn(event))\n }\n\n if (!listenerCache?.has(node)) {\n listenerCache.set(node, new Map([[hash, listener]]))\n node.addEventListener(type, listener, options)\n return\n }\n\n if (!listenerCache?.get(node)?.has(hash)) {\n listenerCache.get(node)?.set(hash, listener)\n node.addEventListener(type, listener, options)\n }\n }\n\n attach(node)\n\n return function remove() {\n if (!listenerElements.has(node)) return\n\n const group = listenerElements.get(node)\n group?.get(hash)?.delete(handler)\n\n if (group?.get(hash)?.size === 0) {\n const listener = listenerCache.get(node)?.get(hash)!\n node.removeEventListener(type, listener, options)\n group?.delete(hash)\n listenerCache.get(node)?.delete(hash)\n\n if (group?.size === 0) {\n listenerElements.delete(node)\n listenerCache.delete(node)\n }\n }\n }\n}\n", "import { globalEventBus } from \"./event-bus\"\nimport {\n AnyPointerEvent,\n DOMEventTarget,\n EventMap,\n PointerEventInfo,\n PointerNameMap,\n RefTarget,\n} from \"./listener.types\"\n\nconst t = (v: any) => Object.prototype.toString.call(v).slice(8, -1)\nconst isRef = (v: any): v is RefTarget => t(v) === \"Object\" && \"current\" in v\nconst runIfFn = (fn: any): HTMLElement | null => (t(fn) === \"Function\" ? fn() : fn)\nconst isTouchEvent = (v: Event): v is TouchEvent => t(v) === \"Object\" && !!(v as TouchEvent).touches\n\nconst fallback = { pageX: 0, pageY: 0, clientX: 0, clientY: 0 }\n\nexport function extractInfo<T extends AnyPointerEvent = AnyPointerEvent>(event: T, type: \"page\" | \"client\" = \"page\") {\n const point = isTouchEvent(event) ? event.touches[0] || event.changedTouches[0] || fallback : event\n return {\n point: {\n x: point[`${type}X`],\n y: point[`${type}Y`],\n },\n }\n}\n\nexport function addDomEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K]) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const node = isRef(target) ? target.current : runIfFn(target)\n return globalEventBus(node, event, listener as any, options)\n}\n\nexport function addPointerEvent<K extends keyof EventMap>(\n target: DOMEventTarget,\n event: K,\n listener: (event: EventMap[K], info: PointerEventInfo) => void,\n options?: boolean | AddEventListenerOptions,\n) {\n const type = getEventName(event) ?? event\n return addDomEvent(target, type, wrapHandler(listener, event === \"pointerdown\"), options)\n}\n\nfunction wrapHandler<E extends EventMap[keyof EventMap]>(\n fn: (event: E, info: PointerEventInfo) => void,\n filter = false,\n) {\n const listener: EventListener = (event: any) => {\n fn(event, extractInfo(event))\n }\n return filter ? filterPrimaryPointer(listener) : listener\n}\n\nfunction filterPrimaryPointer(fn: EventListener): EventListener {\n return (event: Event) => {\n const win = ((event as UIEvent).view ?? window) as typeof window\n const isMouseEvent = event instanceof win.MouseEvent\n const isPrimary = !isMouseEvent || (isMouseEvent && (event as MouseEvent).button === 0)\n if (isPrimary) fn(event)\n }\n}\n\nexport function extractClientInfo(event: AnyPointerEvent) {\n return extractInfo(event, \"client\")\n}\n\nconst supportsPointerEvent = () => typeof window !== \"undefined\" && window.onpointerdown === null\nconst supportsTouchEvent = () => typeof window !== \"undefined\" && window.ontouchstart === null\nconst supportsMouseEvent = () => typeof window !== \"undefined\" && window.onmousedown === null\n\nconst mouseEventNames: PointerNameMap = {\n pointerdown: \"mousedown\",\n pointermove: \"mousemove\",\n pointerup: \"mouseup\",\n pointercancel: \"mousecancel\",\n pointerover: \"mouseover\",\n pointerout: \"mouseout\",\n pointerenter: \"mouseenter\",\n pointerleave: \"mouseleave\",\n}\n\nconst touchEventNames: PointerNameMap = {\n pointerdown: \"touchstart\",\n pointermove: \"touchmove\",\n pointerup: \"touchend\",\n pointercancel: \"touchcancel\",\n}\n\nexport function getEventName(evt: keyof EventMap): keyof EventMap {\n if (supportsPointerEvent()) return evt\n if (supportsTouchEvent()) return touchEventNames[evt]\n if (supportsMouseEvent()) return mouseEventNames[evt]\n return evt\n}\n", "import { isLeftClick, pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\nimport { nextTick } from \"./next-tick\"\n\nlet changeCount = 0\nlet originalBodyPointerEvents: string\n\ntype PointerEventOptions = {\n disabled: boolean\n document?: Document\n}\n\nexport function preventBodyPointerEvents(el: HTMLElement | null, opts: Partial<PointerEventOptions> = {}) {\n const { disabled = false, document: docProp } = opts\n const doc: Document = docProp || document\n\n let isTouchOrPenPressed = false\n let isLeftClickPressed = false\n\n function listen() {\n const onPointerDown = (event: PointerEvent) => {\n const isMouse = event.pointerType === \"mouse\"\n isTouchOrPenPressed = !isMouse\n isLeftClickPressed = isMouse && isLeftClick(event)\n }\n\n const onPointerUp = () => {\n isTouchOrPenPressed = false\n isLeftClickPressed = false\n }\n\n // prettier-ignore\n return pipe(\n addDomEvent(doc, \"pointerdown\", onPointerDown),\n addDomEvent(doc,\"pointerup\", onPointerUp)\n )\n }\n\n function reset() {\n changeCount--\n if (changeCount === 0) {\n doc.body.style.pointerEvents = originalBodyPointerEvents\n }\n if (el) {\n el.style.pointerEvents = \"\"\n }\n }\n\n function apply() {\n if (disabled) return\n\n if (changeCount === 0) {\n originalBodyPointerEvents = doc.body.style.pointerEvents\n }\n\n doc.body.style.pointerEvents = \"none\"\n if (el) {\n el.style.pointerEvents = \"auto\"\n }\n\n changeCount++\n\n return function () {\n if (isTouchOrPenPressed) {\n addDomEvent(doc, \"click\", reset, { once: true })\n } else if (isLeftClickPressed) {\n addDomEvent(doc, \"pointerup\", reset, { once: true })\n } else {\n reset()\n }\n }\n }\n\n const cleanups: Array<VoidFunction | undefined> = []\n cleanups.push(apply())\n nextTick(() => {\n cleanups.push(listen())\n })\n\n return function () {\n cleanups.forEach((cleanup) => cleanup?.())\n }\n}\n", "import { isDom, isIos, noop, pipe } from \"@zag-js/utils\"\nimport scrollIntoView from \"scroll-into-view-if-needed\"\nimport { addDomEvent } from \"./listener\"\nimport { getScrollParent } from \"./scrollable\"\n\ninterface PreventScrollOptions {\n disabled?: boolean\n allowPinchZoom?: boolean\n document?: Document\n}\n\n// HTML input types that do not cause the software keyboard to appear.\nconst nonTextInputTypes = new Set([\"checkbox\", \"radio\", \"range\", \"color\", \"file\", \"image\", \"button\", \"submit\", \"reset\"])\n\nexport function preventBodyScroll(opts?: PreventScrollOptions) {\n const { document: docProp, disabled = false, allowPinchZoom } = opts ?? {}\n\n const doc = docProp ?? document\n const win = doc?.defaultView ?? window\n\n const viewport = isDom() ? win.visualViewport : null\n const docEl = doc.documentElement\n\n function preventScrollStandard() {\n const fn = pipe(\n setStyle(docEl, \"paddingRight\", `${win.innerWidth - docEl.clientWidth}px`),\n setStyle(docEl, \"overflow\", \"hidden\"),\n )\n return () => fn?.()\n }\n\n function preventScrollMobileSafari() {\n let scrollable: HTMLElement | undefined\n let lastY = 0\n\n let onTouchStart = (e: TouchEvent) => {\n scrollable = getScrollParent(e.target as HTMLElement)\n\n if (scrollable === docEl && scrollable === doc.body) {\n return\n }\n lastY = e.changedTouches[0].pageY\n }\n\n let onTouchMove = (e: TouchEvent) => {\n if (e.touches.length === 2 && allowPinchZoom) return\n\n if (!scrollable || scrollable === docEl || scrollable === doc.body) {\n e.preventDefault()\n return\n }\n\n let y = e.changedTouches[0].pageY\n let scrollTop = scrollable.scrollTop\n let bottom = scrollable.scrollHeight - scrollable.clientHeight\n\n if ((scrollTop <= 0 && y > lastY) || (scrollTop >= bottom && y < lastY)) {\n e.preventDefault()\n }\n\n lastY = y\n }\n\n let onTouchEnd = (e: TouchEvent) => {\n let target = e.target as HTMLElement\n if (target instanceof win.HTMLInputElement && !nonTextInputTypes.has(target.type)) {\n e.preventDefault()\n target.style.transform = \"translateY(-2000px)\"\n target.focus()\n win.requestAnimationFrame(() => {\n target.style.transform = \"\"\n })\n }\n }\n\n let onFocus = (e: FocusEvent) => {\n let target = e.target as HTMLElement\n if (target instanceof win.HTMLInputElement && !nonTextInputTypes.has(target.type)) {\n target.style.transform = \"translateY(-2000px)\"\n win.requestAnimationFrame(() => {\n target.style.transform = \"\"\n if (!viewport) return\n\n if (viewport.height < win.innerHeight) {\n win.requestAnimationFrame(function () {\n scrollIntoView(target, { scrollMode: \"if-needed\" })\n })\n } else {\n const onResize = () => {\n scrollIntoView(target, { scrollMode: \"if-needed\" })\n }\n addDomEvent(viewport, \"resize\", onResize, { once: true })\n }\n })\n }\n }\n\n let onWindowScroll = () => {\n win.scrollTo(0, 0)\n }\n\n let scrollX = win.scrollX\n let scrollY = win.scrollY\n let restoreStyles = pipe(\n setStyle(docEl, \"paddingRight\", `${win.innerWidth - docEl.clientWidth}px`),\n setStyle(docEl, \"overflow\", \"hidden\"),\n setStyle(doc.body, \"marginTop\", `-${scrollY}px`),\n )\n\n win.scrollTo(0, 0)\n\n let removeEvents = pipe(\n addDomEvent(doc, \"touchstart\", onTouchStart, { passive: false, capture: true }),\n addDomEvent(doc, \"touchmove\", onTouchMove, { passive: false, capture: true }),\n addDomEvent(doc, \"touchend\", onTouchEnd, { passive: false, capture: true }),\n addDomEvent(doc, \"focus\", onFocus, true),\n addDomEvent(win, \"scroll\", onWindowScroll),\n )\n\n return () => {\n restoreStyles()\n removeEvents()\n win.scrollTo(scrollX, scrollY)\n }\n }\n\n if (disabled) return noop\n return isIos() ? preventScrollMobileSafari() : preventScrollStandard()\n}\n\nfunction setStyle(el: HTMLElement, key: string, value: string) {\n let cur = el.style[key]\n el.style[key] = value\n return () => {\n el.style[key] = cur\n }\n}\n\n// Backup lib: https://github.com/hanai/html-body-scroll-lock\n", "export function getOwnerDocument(el: HTMLElement | Window) {\n if (isWindow(el)) return el.document\n return el?.ownerDocument ?? document\n}\n\nexport function getOwnerWindow(el: HTMLElement) {\n return el?.ownerDocument.defaultView ?? window\n}\n\nexport function getDocumentElement(el: HTMLElement | Window): HTMLElement {\n return getOwnerDocument(el).documentElement\n}\n\nexport function getNodeName(node: HTMLElement | Window): string {\n return isWindow(node) ? \"\" : node ? node.localName || \"\" : \"\"\n}\n\nexport function getEventWindow(event: UIEvent) {\n if (event.view) return event.view\n let target = event.currentTarget\n if (target != null) return getOwnerWindow(target as HTMLElement)\n return window\n}\n\nexport function getParent(el: HTMLElement): HTMLElement {\n const doc = getOwnerDocument(el)\n if (getNodeName(el) === \"html\") return el\n return el.assignedSlot || el.parentElement || doc.documentElement\n}\n\ntype Node = HTMLElement | EventTarget | null\n\nexport function contains(parent: Node | undefined, child: Node) {\n if (!parent) return false\n return parent === child || (isHTMLElement(parent) && isHTMLElement(child) && parent.contains(child))\n}\n\nexport function isHTMLElement(v: any): v is HTMLElement {\n return typeof v === \"object\" && v?.nodeType === Node.ELEMENT_NODE && typeof v?.nodeName === \"string\"\n}\n\nexport function isWindow(value: any): value is Window {\n return value?.toString() === \"[object Window]\"\n}\n\nexport const isDisabled = (el: HTMLElement | null): boolean => {\n return el?.getAttribute(\"disabled\") != null || !!el?.getAttribute(\"aria-disabled\") === true\n}\n\nexport function getNativeEvent<E>(\n event: E,\n): React.ChangeEvent<any> extends E ? InputEvent : E extends React.SyntheticEvent<any, infer T> ? T : never {\n return (event as any).nativeEvent ?? event\n}\n", "import { getComputedStyle } from \"./computed-style\"\nimport { getNodeName, getOwnerDocument, getOwnerWindow, getParent, isHTMLElement, isWindow } from \"./query\"\n\nexport function isScrollParent(el: HTMLElement): boolean {\n const { overflow, overflowX, overflowY } = getComputedStyle(el)\n return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX)\n}\n\nexport function getScrollParent(el: HTMLElement): HTMLElement {\n if ([\"html\", \"body\", \"#document\"].includes(getNodeName(el))) {\n return getOwnerDocument(el).body\n }\n\n if (isHTMLElement(el) && isScrollParent(el)) {\n return el\n }\n\n return getScrollParent(getParent(el))\n}\n\ntype Target = Array<VisualViewport | Window | HTMLElement>\n\nexport function getScrollParents(el: HTMLElement, list: Target = []): Target {\n const scrollParent = getScrollParent(el)\n const isBody = scrollParent === getOwnerDocument(el).body\n const win = getOwnerWindow(scrollParent)\n\n const target = isBody\n ? ([win] as Target).concat(win.visualViewport || [], isScrollParent(scrollParent) ? scrollParent : [])\n : scrollParent\n\n const parents = list.concat(target)\n if (isBody) return parents\n\n return parents.concat(getScrollParents(getParent(<HTMLElement>target)))\n}\n\nexport function getScrollOffset(el: HTMLElement) {\n if (isWindow(el)) {\n return { scrollLeft: el.scrollX, scrollTop: el.scrollY }\n }\n\n return { scrollLeft: el.scrollLeft, scrollTop: el.scrollTop }\n}\n", "export const MAX_Z_INDEX = 2147483647\n", "import { getOwnerWindow } from \"./query\"\n\ntype DescriptorOptions = {\n type: \"input\" | \"textarea\"\n property: \"value\" | \"checked\"\n}\n\nfunction getDescriptor(el: HTMLElement, options: DescriptorOptions) {\n const { type, property } = options\n const win = getOwnerWindow(el)\n const _type = type === \"input\" ? \"HTMLInputElement\" : \"HTMLTextAreaElement\"\n const proto = win[_type].prototype\n return Object.getOwnPropertyDescriptor(proto, property) ?? {}\n}\n\nexport function dispatchInputValueEvent(el: HTMLElement, value: string | number) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"value\" })\n desc.set?.call(el, value)\n const event = new win.Event(\"input\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function dispatchInputCheckedEvent(el: HTMLElement, checked: boolean) {\n const win = getOwnerWindow(el)\n if (!(el instanceof win.HTMLInputElement)) return\n const desc = getDescriptor(el, { type: \"input\", property: \"checked\" })\n desc.set?.call(el, checked)\n const event = new win.Event(\"click\", { bubbles: true })\n el.dispatchEvent(event)\n}\n\nexport function trackInputPropertyMutation(\n el: HTMLInputElement | null,\n options: DescriptorOptions & { fn?: (value: string) => void },\n) {\n const { fn, property, type } = options\n\n if (!fn || !el) return\n\n const { get, set } = getDescriptor(el, { property, type })\n\n let run = true\n\n Object.defineProperty(el, property, {\n get() {\n return get?.call(this)\n },\n set(value: string) {\n if (run) fn(value)\n return set?.call(this, value)\n },\n })\n\n return function () {\n run = false\n }\n}\n", "/**\n * Determine if the blur event within an element is valid\n */\nexport function validateBlur(event: Event, opts: Options) {\n const exclude = Array.isArray(opts.exclude) ? opts.exclude : [opts.exclude]\n const relatedTarget = (event.relatedTarget ?? opts.fallback) as HTMLElement\n return exclude.every((el) => !el?.contains(relatedTarget))\n}\n\ntype MaybeArray<T> = T | T[]\n\ntype Options = {\n exclude: MaybeArray<HTMLElement | null>\n fallback?: HTMLElement | null\n}\n\ntype Event = Pick<FocusEvent, \"relatedTarget\">\n", "import { getComputedStyle } from \"./computed-style\"\nimport { isDisabled, isHTMLElement } from \"./query\"\n\nexport const focusableSelector = /*#__PURE__*/ [\n \"input:not([disabled]):not([type=hidden])\",\n \"select:not([disabled])\",\n \"textarea:not([disabled])\",\n \"button:not([disabled])\",\n \"embed\",\n \"iframe\",\n \"object\",\n \"a[href]\",\n \"area[href]\",\n \"[tabindex]\",\n \"audio[controls]\",\n \"video[controls]\",\n \"*[tabindex]:not([aria-disabled])\",\n \"[contenteditable]:not([contenteditable=false])\",\n \"details > summary:first-of-type\",\n].join(\",\")\n\nexport function isHidden(el: HTMLElement | null, until?: HTMLElement) {\n const style = getComputedStyle(el)\n if (!el || style.getPropertyValue(\"visibility\") === \"hidden\") return true\n while (el) {\n if (until != null && el === until) return false\n if (style.getPropertyValue(\"display\") === \"none\") return true\n el = el.parentElement\n }\n return false\n}\n\n/**\n * Returns the focusable elements within the element\n */\nexport const getFocusables = (el: HTMLElement | Document | null, includeContainer = false) => {\n if (!el) return []\n let els = Array.from(el.querySelectorAll<HTMLElement>(focusableSelector))\n if (includeContainer && isHTMLElement(el)) {\n els.unshift(el)\n }\n return els.filter((el) => isFocusable(el) && !isHidden(el))\n}\n\n/**\n * Whether this element is focusable\n */\nexport const isFocusable = (el: HTMLElement | null) => {\n if (!isHTMLElement(el) || isHidden(el) || isDisabled(el)) return false\n return el?.matches(focusableSelector)\n}\n\n/**\n * Returns the tabbable elements within the element\n */\nexport const getTabbables = (el: HTMLElement | Document, includeContainer = false) => {\n return getFocusables(el, includeContainer).filter(isTabbable)\n}\n\n/**\n * Whether this element is tabbable\n */\nexport const isTabbable = (el: HTMLElement | null) => {\n return isFocusable(el) && !isDisabled(el) && !isHidden(el)\n}\n", "export function getClosestFormElement(el: HTMLElement) {\n if (isFormElement(el)) return el.form\n else return el.closest(\"form\")\n}\n\nfunction isFormElement(el: HTMLElement): el is HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement {\n return [\"textarea\", \"input\", \"select\", \"button\"].includes(el.localName)\n}\n\nexport function trackFormReset(el: HTMLElement | null | undefined, callback: () => void) {\n if (!el) return\n const form = getClosestFormElement(el)\n form?.addEventListener(\"reset\", callback, { passive: true })\n return () => {\n form?.removeEventListener(\"reset\", callback)\n }\n}\n", "import type { KeyboardEvent } from \"react\"\n\ntype EventKey =\n | \"ArrowDown\"\n | \"ArrowUp\"\n | \"ArrowLeft\"\n | \"ArrowRight\"\n | \"Space\"\n | \"Enter\"\n | \"Comma\"\n | \"Escape\"\n | \"Backspace\"\n | \"Delete\"\n | \"Home\"\n | \"End\"\n | \"Tab\"\n | \"PageUp\"\n | \"PageDown\"\n | (string & {})\n\nexport type EventKeyMap = Partial<Record<EventKey, (event: React.KeyboardEvent) => void>>\n\nconst rtlKeyMap = {\n ArrowLeft: \"ArrowRight\",\n ArrowRight: \"ArrowLeft\",\n Home: \"End\",\n End: \"Home\",\n}\n\nconst sameKeyMap = {\n Up: \"ArrowUp\",\n Down: \"ArrowDown\",\n Esc: \"Escape\",\n \" \": \"Space\",\n \",\": \"Comma\",\n Left: \"ArrowLeft\",\n Right: \"ArrowRight\",\n}\n\ntype EventKeyOptions = {\n dir?: \"ltr\" | \"rtl\"\n orientation?: \"horizontal\" | \"vertical\"\n}\n\n/**\n * Determine the event key based on text direction.\n */\nexport function getEventKey(event: KeyboardEvent, options: EventKeyOptions = {}) {\n const { dir = \"ltr\", orientation = \"horizontal\" } = options\n\n let { key } = event\n key = sameKeyMap[key] ?? key // normalize key\n\n const isRtl = dir === \"rtl\" && orientation === \"horizontal\"\n\n if (isRtl && key in rtlKeyMap) {\n key = rtlKeyMap[key]\n }\n\n return key\n}\n\nconst PAGE_KEYS = new Set([\"PageUp\", \"PageDown\"])\nconst ARROW_KEYS = new Set([\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"])\n\n/**\n * Determine the step factor for keyboard events\n */\nexport function getEventStep(event: KeyboardEvent) {\n if (event.ctrlKey || event.metaKey) {\n return 0.1\n } else {\n const isPageKey = PAGE_KEYS.has(event.key)\n const isSkipKey = isPageKey || (event.shiftKey && ARROW_KEYS.has(event.key))\n return isSkipKey ? 10 : 1\n }\n}\n", "export const visuallyHiddenStyle = {\n border: \"0\",\n clip: \"rect(0 0 0 0)\",\n height: \"1px\",\n margin: \"-1px\",\n overflow: \"hidden\",\n padding: \"0\",\n position: \"absolute\",\n width: \"1px\",\n whiteSpace: \"nowrap\",\n wordWrap: \"normal\",\n} as const\n\nexport function setVisuallyHidden(el: HTMLElement) {\n Object.assign(el.style, visuallyHiddenStyle)\n}\n", "import { setVisuallyHidden } from \"./visually-hidden\"\n\nexport type LiveRegionOptions = {\n level: \"polite\" | \"assertive\"\n doc?: Document\n root?: HTMLElement | null\n delay?: number\n}\n\nexport type LiveRegion = ReturnType<typeof createLiveRegion>\n\nexport function createLiveRegion(opts: Partial<LiveRegionOptions> = {}) {\n const { level = \"polite\", doc: ownerDocument, root, delay: rootDelay = 0 } = opts\n\n const doc = ownerDocument ?? document\n const win = doc.defaultView ?? window\n\n const parent = root ?? doc.body\n\n function announce(msg: string, delay?: number) {\n const oldRegion = doc.getElementById(\"__live-region__\")\n\n // remove old region\n if (!!oldRegion) {\n parent.removeChild(oldRegion)\n }\n\n // Did an override level get set?\n delay = delay ?? rootDelay\n\n // create fresh region\n const region = doc.createElement(\"span\")\n region.id = \"__live-region__\"\n\n // Determine redundant role\n var role = level !== \"assertive\" ? \"status\" : \"alert\"\n\n // add role and attributes\n region.setAttribute(\"aria-live\", level)\n region.setAttribute(\"role\", role)\n\n // hide live region\n setVisuallyHidden(region)\n\n parent.appendChild(region)\n\n // populate region to trigger it\n win.setTimeout(() => {\n region!.textContent = msg\n }, delay)\n }\n\n function destroy() {\n const oldRegion = doc.getElementById(\"__live-region__\")\n if (oldRegion) {\n parent.removeChild(oldRegion)\n }\n }\n\n return { announce, destroy }\n}\n", "import { noop } from \"@zag-js/utils\"\n\ntype Callback = (v: MutationRecord) => void\n\nexport function observeAttributes(node: Element | null, attributes: string | string[], fn: Callback) {\n if (!node) return noop\n const attrs = Array.isArray(attributes) ? attributes : [attributes]\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"attributes\" && change.attributeName && attrs.includes(change.attributeName)) {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { attributes: true, attributeFilter: attrs })\n\n return () => obs.disconnect()\n}\n\nexport function observeChildren(node: Element | null, fn: Callback, subtree = false) {\n if (!node) return noop\n const win = node.ownerDocument.defaultView || window\n const obs = new win.MutationObserver((changes) => {\n for (const change of changes) {\n if (change.type === \"childList\") {\n fn(change)\n }\n }\n })\n\n obs.observe(node, { childList: true, subtree })\n\n return () => obs.disconnect()\n}\n", "type Root = Document | Element | null | undefined\n\nexport function queryAll<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return Array.from(root?.querySelectorAll<T>(selector) ?? [])\n}\n\nexport function query<T extends HTMLElement = HTMLElement>(root: Root, selector: string) {\n return root?.querySelector<T>(selector)\n}\n\nexport function itemById<T extends HTMLElement>(v: T[], id: string) {\n return v.find((node) => node.id === id)\n}\n\nexport function indexOfId<T extends HTMLElement>(v: T[], id: string) {\n const item = itemById(v, id)\n return item ? v.indexOf(item) : -1\n}\n\nexport function nextById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n idx = loop ? (idx + 1) % v.length : Math.min(idx + 1, v.length - 1)\n return v[idx]\n}\n\nexport function prevById<T extends HTMLElement>(v: T[], id: string, loop = true) {\n let idx = indexOfId(v, id)\n if (idx === -1) return loop ? v[v.length - 1] : null\n idx = loop ? (idx - 1 + v.length) % v.length : Math.max(0, idx - 1)\n return v[idx]\n}\n\nexport function findByText<T extends HTMLElement>(v: T[], text: string, currentId?: string | null) {\n const filtered = v.filter((item) => {\n const str = item.dataset.valuetext ?? item.textContent\n return !!str?.toLowerCase().startsWith(text.toLowerCase())\n })\n return currentId ? nextById(filtered, currentId) : null\n}\n\nexport function sortByTreeOrder<T extends HTMLElement>(v: T[]) {\n return v.sort((a, b) => (a.compareDocumentPosition(b) & 2 ? 1 : -1))\n}\n", "// Credits: https://github.com/adobe/react-spectrum/blob/e81cfec20056338c7987c513826dc45df32f3db4/packages/%40react-aria/interactions/src/textSelection.ts\nimport { isIos } from \"@zag-js/utils\"\nimport { nextTick } from \"./next-tick\"\n\ntype State = \"default\" | \"disabled\" | \"restoring\"\n\nlet state: State = \"default\"\nlet savedUserSelect = \"\"\nlet modifiedElementMap = new WeakMap<HTMLElement, string>()\n\nexport function disableTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state === \"default\") {\n savedUserSelect = _document.documentElement.style.webkitUserSelect\n _document.documentElement.style.webkitUserSelect = \"none\"\n }\n\n state = \"disabled\"\n } else if (target) {\n modifiedElementMap.set(target, target.style.userSelect)\n target.style.userSelect = \"none\"\n }\n\n return () => restoreTextSelection({ target, doc: _document })\n}\n\nexport function restoreTextSelection({ target, doc }: { target?: HTMLElement; doc?: Document } = {}) {\n const _document = doc ?? document\n\n if (isIos()) {\n if (state !== \"disabled\") return\n state = \"restoring\"\n\n setTimeout(() => {\n nextTick(() => {\n if (state === \"restoring\") {\n if (_document.documentElement.style.webkitUserSelect === \"none\") {\n _document.documentElement.style.webkitUserSelect = savedUserSelect || \"\"\n }\n\n savedUserSelect = \"\"\n state = \"default\"\n }\n })\n }, 300)\n } else {\n if (target && modifiedElementMap.has(target)) {\n let targetOldUserSelect = modifiedElementMap.get(target)\n\n if (target.style.userSelect === \"none\") {\n target.style.userSelect = targetOldUserSelect ?? \"\"\n }\n\n if (target.getAttribute(\"style\") === \"\") {\n target.removeAttribute(\"style\")\n }\n modifiedElementMap.delete(target)\n }\n }\n}\n", "import { isLeftClick, isMouseEvent, pipe } from \"@zag-js/utils\"\nimport { addDomEvent, addPointerEvent } from \"./listener\"\nimport type { AnyPointerEvent, EventListenerWithPointInfo as Listener, PointerEventInfo } from \"./listener.types\"\nimport { disableTextSelection } from \"./text-selection\"\n\nexport function trackPointerDown(doc: Document, onPointerDown: (el: HTMLElement) => void) {\n const win = doc.defaultView ?? window\n const fn = (event: PointerEvent) => {\n if (event.target instanceof win.HTMLElement) {\n onPointerDown(event.target)\n }\n }\n return addDomEvent(doc, \"pointerdown\", fn)\n}\n\ntype TrackPointerMoveOptions = {\n ctx: { doc?: Document; threshold?: number }\n onPointerUp: VoidFunction\n onPointerMove: (info: PointerEventInfo, event: AnyPointerEvent) => void\n}\n\nexport function trackPointerMove(opts: TrackPointerMoveOptions) {\n const { onPointerMove, onPointerUp, ctx } = opts\n const { doc = document, threshold = 5 } = ctx\n\n const handlePointerMove: Listener = (event, info) => {\n const { point: p } = info\n const distance = Math.sqrt(p.x ** 2 + p.y ** 2)\n if (distance < threshold) return\n\n // Because Safari doesn't trigger mouseup events when it's above a `<select>`\n if (isMouseEvent(event) && isLeftClick(event)) {\n onPointerUp()\n return\n }\n\n onPointerMove(info, event)\n }\n\n return pipe(\n addPointerEvent(doc, \"pointermove\", handlePointerMove, false),\n addPointerEvent(doc, \"pointerup\", onPointerUp, false),\n addPointerEvent(doc, \"pointercancel\", onPointerUp, false),\n addPointerEvent(doc, \"contextmenu\", onPointerUp, false),\n disableTextSelection({ doc }),\n )\n}\n", "import { pipe } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\ntype PointerLockHandlers = {\n onPointerLock?: VoidFunction\n onPointerUnlock?: VoidFunction\n}\n\nexport function addPointerlockChangeListener(doc: Document, fn: VoidFunction) {\n return addDomEvent(doc, \"pointerlockchange\", fn, false)\n}\n\nexport function addPointerlockErrorListener(doc: Document, fn: (e: Event) => void) {\n doc.addEventListener(\"pointerlockerror\", fn, false)\n return function cleanup() {\n doc.removeEventListener(\"pointerlockerror\", fn, false)\n }\n}\n\nexport function requestPointerLock(doc: Document, handlers: PointerLockHandlers = {}) {\n const { onPointerLock, onPointerUnlock } = handlers\n const body = doc.body\n\n const supported = \"pointerLockElement\" in doc || \"mozPointerLockElement\" in doc\n const locked = !!doc.pointerLockElement\n\n function onPointerChange() {\n if (locked) onPointerLock?.()\n else onPointerUnlock?.()\n }\n\n function onPointerError(event: Event) {\n if (locked) onPointerUnlock?.()\n console.error(\"PointerLock error occured:\", event)\n exit()\n }\n\n function exit() {\n doc.exitPointerLock()\n }\n\n if (!supported) return\n\n body.requestPointerLock()\n\n const cleanup = pipe(\n addPointerlockChangeListener(doc, onPointerChange),\n addPointerlockErrorListener(doc, onPointerError),\n )\n\n return function dispose() {\n if (!supported) return\n cleanup()\n exit()\n }\n}\n", "// Credit goes to the radix-ui team for this utility:\n// https://github.com/radix-ui/primitives/blob/main/packages/core/rect/src/observeElementRect.ts\n\ntype Fn = (rect: DOMRect) => void\ntype ObservedData = { rect: DOMRect; callbacks: Fn[] }\nexport type Measurable = { getBoundingClientRect(): DOMRect }\n\nfunction getObservedElements(): Map<Measurable, ObservedData> {\n ;(globalThis as any).__rectObserverMap__ = (globalThis as any).__rectObserverMap__ || new Map()\n return (globalThis as any).__rectObserverMap__\n}\n\nexport function observeElementRect(el: Measurable, fn: Fn) {\n const observedElements = getObservedElements()\n\n const data = observedElements.get(el)\n\n if (!data) {\n observedElements.set(el, { rect: {} as DOMRect, callbacks: [fn] })\n\n if (observedElements.size === 1) {\n rafId = requestAnimationFrame(runLoop)\n }\n } else {\n data.callbacks.push(fn)\n fn(el.getBoundingClientRect())\n }\n\n return function unobserve() {\n const data = observedElements.get(el)\n if (!data) return\n\n const index = data.callbacks.indexOf(fn)\n if (index > -1) {\n data.callbacks.splice(index, 1)\n }\n\n if (data.callbacks.length === 0) {\n observedElements.delete(el)\n\n if (observedElements.size === 0) {\n cancelAnimationFrame(rafId)\n }\n }\n }\n}\n\nlet rafId: number\n\nfunction runLoop() {\n const observedElements = getObservedElements()\n\n const changedRectsData: Array<ObservedData> = []\n\n observedElements.forEach((data, element) => {\n const newRect = element.getBoundingClientRect()\n\n if (!isEqual(data.rect, newRect)) {\n data.rect = newRect\n changedRectsData.push(data)\n }\n })\n\n changedRectsData.forEach((data) => {\n data.callbacks.forEach((callback) => callback(data.rect))\n })\n\n rafId = requestAnimationFrame(runLoop)\n}\n\nfunction isEqual(rect1: DOMRect, rect2: DOMRect) {\n return (\n rect1.width === rect2.width &&\n rect1.height === rect2.height &&\n rect1.top === rect2.top &&\n rect1.right === rect2.right &&\n rect1.bottom === rect2.bottom &&\n rect1.left === rect2.left\n )\n}\n", "import { cast } from \"@zag-js/utils\"\nimport { addDomEvent } from \"./listener\"\n\nexport function trackDocumentVisibility(_doc: Document, callback: (hidden: boolean) => void) {\n const doc = cast(_doc) as Document & { msHidden?: boolean; webkitHidden?: boolean }\n return addDomEvent(doc, \"visibilitychange\", () => {\n const hidden = doc.hidden || doc.msHidden || doc.webkitHidden\n callback(!!hidden)\n })\n}\n", "export function waitFor<T>(predicate: () => T): Promise<T> {\n let value = predicate()\n if (!!value) return Promise.resolve(value)\n return new Promise((resolve) => {\n const id = globalThis.setInterval(function () {\n let value = predicate()\n if (value) {\n globalThis.clearInterval(id)\n resolve(value)\n }\n }, 0)\n })\n}\n\nexport function waitForEvent(el: HTMLElement, eventName: string) {\n return new Promise<void>((resolve) => {\n function done(event: Event) {\n if (event.target === el) {\n el.removeEventListener(eventName, done)\n resolve()\n }\n }\n\n el.addEventListener(eventName, done)\n })\n}\n", "import type * as React from \"react\"\n\ntype Dict<T = any> = Record<string, T>\n\ntype Booleanish = boolean | \"true\" | \"false\"\n\ntype Omit<T, K extends keyof T> = { [P in Exclude<keyof T, K>]?: T[P] }\n\ntype WithStyle<T extends { style?: any }> = Omit<T, \"style\"> & {\n style?: T[\"style\"] & {\n [prop: string]: string | number | undefined\n }\n}\n\ntype DataAttr = {\n \"data-uid\"?: string\n \"data-name\"?: string\n \"data-ownedby\"?: string\n \"data-selected\"?: Booleanish\n \"data-expanded\"?: Booleanish\n \"data-highlighted\"?: Booleanish\n \"data-readonly\"?: Booleanish\n \"data-invalid\"?: Booleanish\n \"data-hover\"?: Booleanish\n \"data-active\"?: Booleanish\n \"data-focus\"?: Booleanish\n \"data-disabled\"?: Booleanish\n \"data-type\"?: string\n \"data-value\"?: string | number\n \"data-valuetext\"?: string\n \"data-open\"?: Booleanish\n \"data-placement\"?: string\n \"data-orientation\"?: \"horizontal\" | \"vertical\"\n \"data-label\"?: string\n \"data-checked\"?: Booleanish\n \"data-pressed\"?: Booleanish\n \"data-state\"?: string | null\n \"data-half\"?: Booleanish\n \"data-count\"?: number\n \"data-controls\"?: string\n \"data-part\"?: string\n \"data-index\"?: number\n \"data-complete\"?: Booleanish\n \"data-empty\"?: Booleanish\n \"data-placeholder-shown\"?: Booleanish\n}\n\ntype JSXElementAttributes = DataAttr & React.HTMLAttributes<HTMLElement>\ntype JSXButtonAttributes = DataAttr & React.ButtonHTMLAttributes<HTMLButtonElement>\ntype JSXInputAttributes = DataAttr & React.InputHTMLAttributes<HTMLInputElement>\ntype JSXLabelAttributes = DataAttr & React.LabelHTMLAttributes<HTMLLabelElement>\ntype JSXOutputAttributes = DataAttr & React.OutputHTMLAttributes<HTMLOutputElement>\n\nexport type PropTypes = Record<\"button\" | \"label\" | \"input\" | \"output\" | \"element\", Dict>\n\nexport type ReactPropTypes = {\n button: JSXButtonAttributes\n label: JSXLabelAttributes\n input: JSXInputAttributes\n output: JSXOutputAttributes\n element: JSXElementAttributes\n}\n\nexport type NormalizeProps = {\n button<T extends PropTypes>(props: WithStyle<JSXButtonAttributes>): T[\"button\"]\n label<T extends PropTypes>(props: WithStyle<JSXLabelAttributes>): T[\"label\"]\n input<T extends PropTypes>(props: WithStyle<JSXInputAttributes>): T[\"input\"]\n output<T extends PropTypes>(props: WithStyle<JSXOutputAttributes>): T[\"output\"]\n element<T extends PropTypes>(props: WithStyle<JSXElementAttributes>): T[\"element\"]\n}\n\nexport function createNormalizer(fn: (props: Dict) => Dict): NormalizeProps {\n return { button: fn, label: fn, input: fn, output: fn, element: fn }\n}\n\nexport const normalizeProp = createNormalizer((v) => v)\n", "export type ControlProp =\n | { type: \"boolean\"; label?: string; defaultValue: boolean }\n | { type: \"string\"; label?: string; defaultValue: string; placeholder?: string }\n | { type: \"select\"; options: readonly string[]; defaultValue: string; label?: string }\n | { type: \"multiselect\"; options: readonly string[]; defaultValue: string[]; label?: string }\n | { type: \"number\"; label?: string; defaultValue: number; min?: number; max?: number }\n\nexport type ControlRecord = Record<string, ControlProp>\n\nexport type ControlValue<T extends ControlRecord> = {\n [K in keyof T]: T[K] extends { type: \"boolean\" }\n ? boolean\n : T[K] extends { type: \"string\" }\n ? string\n : T[K] extends { type: \"select\" }\n ? T[K][\"options\"][number]\n : T[K] extends { type: \"multiselect\" }\n ? T[K][\"options\"][number][]\n : T[K] extends { type: \"number\" }\n ? number\n : never\n}\n\nexport function defineControls<T extends ControlRecord>(config: T) {\n return config\n}\n", "export function toArray<T>(v: T | T[] | undefined | null): T[] {\n if (!v) return []\n return Array.isArray(v) ? v : [v]\n}\n\nexport const fromLength = (length: number) => Array.from(Array(length).keys())\n\nexport const first = <T>(v: T[]): T | undefined => v[0]\n\nexport const last = <T>(v: T[]): T | undefined => v[v.length - 1]\n\nexport const isEmpty = <T>(v: T[]): boolean => v.length === 0\n\nexport const has = <T>(v: T[], t: any): boolean => v.indexOf(t) !== -1\n\nexport const add = <T>(v: T[], ...items: T[]): T[] => v.concat(items)\n\nexport const remove = <T>(v: T[], item: T): T[] => removeAt(v, v.indexOf(item))\n\nexport const removeAt = <T>(v: T[], i: number): T[] => {\n if (i > -1) v.splice(i, 1)\n return v\n}\n\nexport function clear<T>(v: T[]): T[] {\n while (v.length > 0) v.pop()\n return v\n}\n\nexport type IndexOptions = {\n step?: number\n loop?: boolean\n}\n\nexport function nextIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n const next = idx + step\n const len = v.length\n const last = len - 1\n if (idx === -1) return step > 0 ? 0 : last\n if (next < 0) return loop ? last : 0\n if (next >= len) return loop ? 0 : idx > len ? len : idx\n return next\n}\n\nexport function next<T>(v: T[], idx: number, opts: IndexOptions = {}): T | undefined {\n return v[nextIndex(v, idx, opts)]\n}\n\nexport function prevIndex<T>(v: T[], idx: number, opts: IndexOptions = {}): number {\n const { step = 1, loop = true } = opts\n return nextIndex(v, idx, { step: -step, loop })\n}\n\nexport function prev<T>(v: T[], index: number, opts: IndexOptions = {}): T | undefined {\n return v[prevIndex(v, index, opts)]\n}\n\nexport const chunk = <T>(v: T[], size: number): T[][] => {\n const res: T[][] = []\n return v.reduce((rows, value, index) => {\n if (index % size === 0) rows.push([value])\n else last(rows)?.push(value)\n return rows\n }, res)\n}\n", "export const runIfFn = <T>(\n v: T | undefined,\n ...a: T extends (...a: any[]) => void ? Parameters<T> : never\n): T extends (...a: any[]) => void ? NonNullable<ReturnType<T>> : NonNullable<T> => {\n const res = typeof v === \"function\" ? v(...a) : v\n return res ?? undefined\n}\n\nexport const cast = <T>(v: unknown): T => v as T\n\nexport const noop = () => {}\n\nexport const pipe =\n <T>(...fns: Array<(a: T) => T>) =>\n (v: T) =>\n fns.reduce((a, b) => b(a), v)\n\nexport const callAll =\n <T extends (...a: any[]) => void>(...fns: (T | undefined)[]) =>\n (...a: Parameters<T>) => {\n fns.forEach(function (fn) {\n fn?.(...a)\n })\n }\n\nexport const uuid = /*#__PURE__*/ (() => {\n let id = 0\n return () => {\n id++\n return id.toString(36)\n }\n})()\n\nexport function merge<T, U>(origin: T, patch: U): T & U {\n if (!(typeof patch === \"object\")) return patch as any\n const result = !(typeof origin === \"object\") ? {} : Object.assign({}, origin)\n for (const key of Object.keys(patch)) {\n const value = patch[key]\n const src = result[key]\n if (value === null) delete result[key]\n else if (Array.isArray(value) || Array.isArray(src)) result[key] = (src || []).concat(value || [])\n else result[key] = merge(src, value)\n }\n return result as any\n}\n", "const platform = (v: RegExp) => isDom() && v.test(navigator.platform)\nconst ua = (v: RegExp) => isDom() && v.test(navigator.userAgent)\n\nexport const isDev = () => process.env.NODE_ENV !== \"production\"\nexport const isDom = () => !!(typeof window !== \"undefined\")\nexport const isMac = () => platform(/^Mac/)\nexport const isIPhone = () => platform(/^iPhone/)\nexport const isIPad = () => platform(/^iPad/) || (isMac() && navigator.maxTouchPoints > 1)\nexport const isIos = () => isIPhone() || isIPad()\nexport const isSafari = () => ua(/^((?!chrome|android).)*safari/i)\nexport const isFirefox = () => ua(/^Firefox/)\nexport const isWebkit = () => ua(/^WebKit/) && !ua(/Chrome/)\nexport const isApple = () => isMac() || isIos()\n\nexport const isArray = (v: any): v is any[] => Array.isArray(v)\nexport const isBoolean = (v: any): v is boolean => v === true || v === false\nexport const isObject = (v: any): v is Record<string, any> => !(v == null || typeof v !== \"object\" || isArray(v))\nexport const isNumber = (v: any): v is number => typeof v === \"number\" && !Number.isNaN(v)\nexport const isString = (v: any): v is string => typeof v === \"string\"\nexport const isFunction = (v: any): v is Function => typeof v === \"function\"\n\nexport const supportsPointerEvent = () => isDom() && window.onpointerdown === null\nexport const supportsTouchEvent = () => isDom() && window.ontouchstart === null\nexport const supportsMouseEvent = () => isDom() && window.onmousedown === null\n\nexport const isMouseEvent = (v: any): v is MouseEvent => isObject(v) && \"button\" in v\nexport const isTouchEvent = (v: any): v is TouchEvent => isObject(v) && \"touches\" in v\nexport const isLeftClick = (v: MouseEvent | PointerEvent) => v.button === 0\nexport const isRightClick = (v: MouseEvent | PointerEvent) => v.button === 2\nexport const isModifiedEvent = (v: MouseEvent | PointerEvent | KeyboardEvent) =>\n v.ctrlKey || v.altKey || v.metaKey || v.shiftKey\nexport const isCtrlKey = (v: KeyboardEvent) => (isMac() ? v.metaKey && !v.ctrlKey : v.ctrlKey && !v.metaKey)\n", "export function warn(m: string): void\nexport function warn(c: boolean, m: string): void\nexport function warn(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n console.warn(m)\n }\n}\n\nexport function invariant(m: string): void\nexport function invariant(c: boolean, m: string): void\nexport function invariant(...a: any[]): void {\n const m = a.length === 1 ? a[0] : a[1]\n const c = a.length === 2 ? a[0] : true\n if (c && process.env.NODE_ENV !== \"production\") {\n throw new Error(m)\n }\n}\n", "import { itemById, nextById, prevById, queryAll } from \"@zag-js/dom-utils\"\nimport { first, last } from \"@zag-js/utils\"\nimport { MachineContext as Ctx } from \"./tabs.types\"\n\nexport const dom = {\n getDoc: (ctx: Ctx) => ctx.doc ?? document,\n\n getRootId: (ctx: Ctx) => ctx.ids?.root ?? `tabs-${ctx.uid}`,\n getTriggerGroupId: (ctx: Ctx) => ctx.ids?.triggerGroup ?? `tabs-${ctx.uid}-trigger-group`,\n getContentId: (ctx: Ctx, id: string) => ctx.ids?.content ?? `tabs-${ctx.uid}-content-${id}`,\n getContentGroupId: (ctx: Ctx) => ctx.ids?.contentGroup ?? `tabs-${ctx.uid}-content-group`,\n getTriggerId: (ctx: Ctx, id: string) => ctx.ids?.trigger ?? `tabs-${ctx.uid}-trigger-${id}`,\n getIndicatorId: (ctx: Ctx) => `tabs-${ctx.uid}-indicator`,\n\n getTriggerGroupEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getTriggerGroupId(ctx)),\n getContentEl: (ctx: Ctx, id: string) => dom.getDoc(ctx).getElementById(dom.getContentId(ctx, id)),\n getTriggerEl: (ctx: Ctx, id: string) => dom.getDoc(ctx).getElementById(dom.getTriggerId(ctx, id)),\n getIndicatorEl: (ctx: Ctx) => dom.getDoc(ctx).getElementById(dom.getIndicatorId(ctx)),\n\n getElements: (ctx: Ctx) => {\n const ownerId = CSS.escape(dom.getTriggerGroupId(ctx))\n const selector = `[role=tab][data-ownedby='${ownerId}']:not([disabled])`\n return queryAll(dom.getTriggerGroupEl(ctx), selector)\n },\n getFirstEl: (ctx: Ctx) => first(dom.getElements(ctx)),\n getLastEl: (ctx: Ctx) => last(dom.getElements(ctx)),\n getNextEl: (ctx: Ctx, id: string) => nextById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loop),\n getPrevEl: (ctx: Ctx, id: string) => prevById(dom.getElements(ctx), dom.getTriggerId(ctx, id), ctx.loop),\n getRectById: (ctx: Ctx, id: string) => {\n const empty = { offsetLeft: 0, offsetTop: 0, offsetWidth: 0, offsetHeight: 0 }\n const tab = itemById(dom.getElements(ctx), dom.getTriggerId(ctx, id)) ?? empty\n if (ctx.isVertical) {\n return { top: `${tab.offsetTop}px`, height: `${tab.offsetHeight}px` }\n }\n return { left: `${tab.offsetLeft}px`, width: `${tab.offsetWidth}px` }\n },\n getActiveContentEl: (ctx: Ctx) => {\n if (!ctx.value) return\n const id = dom.getContentId(ctx, ctx.value)\n return dom.getDoc(ctx).getElementById(id)\n },\n}\n", "import { StateMachine as S } from \"@zag-js/core\"\nimport { dataAttr, EventKeyMap, getEventKey } from \"@zag-js/dom-utils\"\nimport { normalizeProp, PropTypes, ReactPropTypes } from \"@zag-js/types\"\nimport { isSafari } from \"@zag-js/utils\"\nimport { dom } from \"./tabs.dom\"\nimport { MachineContext, MachineState, TabProps } from \"./tabs.types\"\n\nexport function connect<T extends PropTypes = ReactPropTypes>(\n state: S.State<MachineContext, MachineState>,\n send: (event: S.Event<S.AnyEventObject>) => void,\n normalize = normalizeProp,\n) {\n const messages = state.context.messages\n const isFocused = state.matches(\"focused\")\n\n return {\n value: state.context.value,\n focusedValue: state.context.focusedValue,\n previousValues: Array.from(state.context.previousValues),\n setValue(value: string) {\n send({ type: \"SET_VALUE\", value })\n },\n\n rootProps: normalize.element<T>({\n \"data-part\": \"root\",\n id: dom.getRootId(state.context),\n \"data-orientation\": state.context.orientation,\n \"data-focus\": dataAttr(isFocused),\n dir: state.context.dir,\n }),\n\n triggerGroupProps: normalize.element<T>({\n \"data-part\": \"trigger-group\",\n id: dom.getTriggerGroupId(state.context),\n role: \"tablist\",\n \"data-focus\": dataAttr(isFocused),\n \"aria-orientation\": state.context.orientation,\n \"data-orientation\": state.context.orientation,\n \"aria-label\": messages.tablistLabel,\n onKeyDown(event) {\n const keyMap: EventKeyMap = {\n ArrowDown() {\n send(\"ARROW_DOWN\")\n },\n ArrowUp() {\n send(\"ARROW_UP\")\n },\n ArrowLeft() {\n send(\"ARROW_LEFT\")\n },\n ArrowRight() {\n send(\"ARROW_RIGHT\")\n },\n Home() {\n send(\"HOME\")\n },\n End() {\n send(\"END\")\n },\n Enter() {\n send({ type: \"ENTER\", value: state.context.focusedValue })\n },\n }\n\n let key = getEventKey(event, state.context)\n const exec = keyMap[key]\n\n if (exec) {\n event.preventDefault()\n exec(event)\n }\n },\n }),\n\n getTriggerProps(props: TabProps) {\n const { value, disabled } = props\n const selected = state.context.value === value\n\n return normalize.button<T>({\n \"data-part\": \"trigger\",\n role: \"tab\",\n type: \"button\",\n disabled,\n \"data-orientation\": state.context.orientation,\n \"data-disabled\": dataAttr(disabled),\n \"aria-disabled\": disabled,\n \"data-value\": value,\n \"aria-selected\": selected,\n \"data-selected\": dataAttr(selected),\n \"aria-controls\": dom.getContentId(state.context, value),\n \"data-ownedby\": dom.getTriggerGroupId(state.context),\n id: dom.getTriggerId(state.context, value),\n tabIndex: selected ? 0 : -1,\n onFocus() {\n send({ type: \"TAB_FOCUS\", value })\n },\n onBlur(event) {\n const target = event.relatedTarget as HTMLElement | null\n if (target?.getAttribute(\"role\") !== \"tab\") {\n send({ type: \"TAB_BLUR\" })\n }\n },\n onClick(event) {\n if (disabled) return\n if (isSafari()) {\n event.currentTarget.focus()\n }\n send({ type: \"TAB_CLICK\", value })\n },\n })\n },\n\n contentGroupProps: normalize.element<T>({\n \"data-part\": \"content-group\",\n id: dom.getContentGroupId(state.context),\n \"data-orientation\": state.context.orientation,\n }),\n\n getContentProps({ value }: { value: string }) {\n const selected = state.context.value === value\n return normalize.element<T>({\n \"data-part\": \"content\",\n id: dom.getContentId(state.context, value),\n tabIndex: 0,\n \"aria-labelledby\": dom.getTriggerId(state.context, value),\n role: \"tabpanel\",\n \"data-ownedby\": dom.getTriggerGroupId(state.context),\n hidden: !selected,\n })\n },\n\n getDeleteButtonProps({ value, disabled }: TabProps) {\n return normalize.button<T>({\n \"data-part\": \"delete-button\",\n type: \"button\",\n tabIndex: -1,\n \"aria-label\": messages.deleteLabel?.(value),\n disabled,\n onClick() {\n send({ type: \"DELETE\", value })\n },\n })\n },\n\n indicatorProps: normalize.element<T>({\n id: dom.getIndicatorId(state.context),\n \"data-part\": \"indicator\",\n \"data-orientation\": state.context.orientation,\n style: {\n \"--transition-duration\": \"200ms\",\n \"--transition-property\": \"left, right, top, bottom, width, height\",\n position: \"absolute\",\n willChange: \"var(--transition-property)\",\n transitionProperty: \"var(--transition-property)\",\n transitionDuration: state.context.hasMeasuredRect ? \"var(--transition-duration)\" : \"0ms\",\n transitionTimingFunction: \"var(--transition-timing-function)\",\n ...state.context.indicatorRect,\n },\n }),\n }\n}\n", "import { createMachine, guards, ref } from \"@zag-js/core\"\nimport { getFocusables, nextTick } from \"@zag-js/dom-utils\"\nimport { dom } from \"./tabs.dom\"\nimport { MachineContext, MachineState } from \"./tabs.types\"\n\nconst { not } = guards\n\nexport const machine = createMachine<MachineContext, MachineState>(\n {\n initial: \"unknown\",\n\n context: {\n dir: \"ltr\",\n orientation: \"horizontal\",\n activationMode: \"automatic\",\n value: null,\n focusedValue: null,\n uid: \"\",\n previousValues: [],\n indicatorRect: { left: \"0px\", top: \"0px\", width: \"0px\", height: \"0px\" },\n hasMeasuredRect: false,\n isIndicatorRendered: false,\n loop: true,\n messages: {},\n },\n\n computed: {\n isHorizontal: (ctx) => ctx.orientation === \"horizontal\",\n isVertical: (ctx) => ctx.orientation === \"vertical\",\n },\n\n created: [\"setPrevSelectedTabs\"],\n\n watch: {\n focusedValue: \"invokeOnFocus\",\n value: [\"invokeOnChange\", \"setPrevSelectedTabs\", \"setIndicatorRect\", \"setContentTabIndex\"],\n dir: [\"clearMeasured\", \"setIndicatorRect\"],\n },\n\n on: {\n SET_VALUE: {\n actions: \"setValue\",\n },\n DELETE: {\n actions: \"deleteValue\",\n },\n },\n\n states: {\n unknown: {\n on: {\n SETUP: {\n target: \"idle\",\n actions: [\"setupDocument\", \"checkRenderedElements\", \"setIndicatorRect\", \"setContentTabIndex\"],\n },\n },\n },\n idle: {\n on: {\n TAB_FOCUS: {\n guard: \"selectOnFocus\",\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n },\n },\n focused: {\n on: {\n TAB_CLICK: {\n target: \"focused\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n ARROW_LEFT: {\n guard: \"isHorizontal\",\n actions: \"focusPrevTab\",\n },\n ARROW_RIGHT: {\n guard: \"isHorizontal\",\n actions: \"focusNextTab\",\n },\n ARROW_UP: {\n guard: \"isVertical\",\n actions: \"focusPrevTab\",\n },\n ARROW_DOWN: {\n guard: \"isVertical\",\n actions: \"focusNextTab\",\n },\n HOME: {\n actions: \"focusFirstTab\",\n },\n END: {\n actions: \"focusLastTab\",\n },\n ENTER: {\n guard: not(\"selectOnFocus\"),\n actions: \"setValue\",\n },\n TAB_FOCUS: [\n {\n guard: \"selectOnFocus\",\n actions: [\"setFocusedValue\", \"setValue\"],\n },\n { actions: \"setFocusedValue\" },\n ],\n TAB_BLUR: {\n target: \"idle\",\n actions: \"clearFocusedValue\",\n },\n },\n },\n },\n },\n {\n guards: {\n isVertical: (ctx) => ctx.isVertical,\n isHorizontal: (ctx) => ctx.isHorizontal,\n selectOnFocus: (ctx) => ctx.activationMode === \"automatic\",\n },\n actions: {\n setupDocument(ctx, evt) {\n ctx.uid = evt.id\n if (evt.doc) ctx.doc = ref(evt.doc)\n },\n setFocusedValue(ctx, evt) {\n ctx.focusedValue = evt.value\n },\n clearFocusedValue(ctx) {\n ctx.focusedValue = null\n },\n setValue(ctx, evt) {\n ctx.value = evt.value\n },\n invokeOnDelete(ctx, evt) {\n ctx.onDelete?.({ value: evt.value })\n },\n focusFirstTab(ctx) {\n nextTick(() => dom.getFirstEl(ctx)?.focus())\n },\n focusLastTab(ctx) {\n nextTick(() => dom.getLastEl(ctx)?.focus())\n },\n focusNextTab(ctx) {\n if (!ctx.focusedValue) return\n const next = dom.getNextEl(ctx, ctx.focusedValue)\n nextTick(() => next?.focus())\n },\n focusPrevTab(ctx) {\n if (!ctx.focusedValue) return\n const prev = dom.getPrevEl(ctx, ctx.focusedValue)\n nextTick(() => prev?.focus())\n },\n setIndicatorRect(ctx) {\n nextTick(() => {\n if (!ctx.isIndicatorRendered || !ctx.value) return\n ctx.indicatorRect = dom.getRectById(ctx, ctx.value)\n if (ctx.hasMeasuredRect) return\n nextTick(() => {\n ctx.hasMeasuredRect = true\n })\n })\n },\n checkRenderedElements(ctx) {\n nextTick(() => {\n ctx.isIndicatorRendered = !!dom.getIndicatorEl(ctx)\n })\n },\n clearMeasured(ctx) {\n ctx.hasMeasuredRect = false\n },\n invokeOnChange(ctx) {\n ctx.onChange?.({ value: ctx.value })\n },\n invokeOnFocus(ctx) {\n ctx.onFocus?.({ value: ctx.focusedValue })\n },\n setPrevSelectedTabs(ctx) {\n if (ctx.value != null) {\n const newSelected = Array.from(ctx.previousValues).concat(ctx.value)\n ctx.previousValues = Array.from(new Set(newSelected))\n }\n },\n // if tab panel contains focusable elements, remove the tabindex attribute\n setContentTabIndex(ctx) {\n nextTick(() => {\n const panel = dom.getActiveContentEl(ctx)\n if (!panel) return\n const focusables = getFocusables(panel)\n if (focusables.length > 0) {\n panel.removeAttribute(\"tabindex\")\n } else {\n panel.setAttribute(\"tabindex\", \"0\")\n }\n })\n },\n },\n },\n)\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }