@vireo-ai/trellis-ui 0.1.48 → 0.1.49
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/package.json +5 -5
- package/packages/client/src/styles/generated/theme-fonts.css +1 -1
- package/packages/client/src/styles/generated/theme-palette.css +1 -1
- package/packages/client/src/styles/generated/theme-runtime.css +13 -13
- package/packages/client/types/component-api.d.ts +3 -1
- package/packages/client/types/components/data-grid/contract.d.ts +1 -0
- package/packages/client/types/components/data-grid/index.d.ts +28 -4
- package/packages/client/types/components/runtime.d.ts +1 -1
- package/packages/client/types/components/virtualizer/contract.d.ts +1 -29
- package/packages/client/types/components/virtualizer/cursor.d.ts +1 -0
- package/packages/client/types/components/virtualizer/index.d.ts +2 -28
- package/packages/client/types/runtime/cursor-data-source.d.ts +45 -0
- package/packages/client/types/runtime/focus-handoff.d.ts +11 -0
- package/packages/client/types/runtime/virtualizer-schema.d.ts +29 -0
- package/packages/client/types/runtime/virtualizer.d.ts +41 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.css +12 -12
- package/packages/server/trellis_ui/static/trellis_ui/assets/css/trellis.min.css +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/build-metadata.json +306 -289
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/motion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/shortcut.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/capabilities/sortable.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-C8JwDQHB.js → capability-motion-DoZROkFD.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-motion-C8JwDQHB.js.map → capability-motion-DoZROkFD.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BoDF_wQX.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-BoDF_wQX.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Ms02uATJ.js → capability-sortable-DtSghTO8.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{capability-sortable-Ms02uATJ.js.map → capability-sortable-DtSghTO8.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-BOf7dxV2.js → controller-qWtZCkAC.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{controller-BOf7dxV2.js.map → controller-qWtZCkAC.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-D_APohl9.js → core-BgbZXaDN.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{core-D_APohl9.js.map → core-BgbZXaDN.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-1meMFJbq.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DckTWjSU.js → entry.generated-B-wVMxe6.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DckTWjSU.js.map → entry.generated-B-wVMxe6.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BNM7EWpC.js → entry.generated-BYDBzadH.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BNM7EWpC.js.map → entry.generated-BYDBzadH.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DRZyI4u3.js → entry.generated-B_q7LVNv.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DRZyI4u3.js.map → entry.generated-B_q7LVNv.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DcCdeWRk.js → entry.generated-BhtgeSTa.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-DcCdeWRk.js.map → entry.generated-BhtgeSTa.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-6GztwKjx.js → entry.generated-CJuVLJw9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-6GztwKjx.js.map → entry.generated-CJuVLJw9.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry2.generated-jxSblEo7.js → entry.generated-CQGhCt9y.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CQGhCt9y.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-RR5GZAgO.js → entry.generated-CRhvZ0DI.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-RR5GZAgO.js.map → entry.generated-CRhvZ0DI.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C5kjUnFe.js → entry.generated-CkBblBv9.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-C5kjUnFe.js.map → entry.generated-CkBblBv9.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-Bl38ruYD.js → entry.generated-Des-gEaR.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Des-gEaR.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ZcYuKSSI.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-ZcYuKSSI.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BK8q8vxJ.js → entry.generated-u0Ueamvw.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-BK8q8vxJ.js.map → entry.generated-u0Ueamvw.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{entry.generated-CPbvsglm.js → entry2.generated-CPbvsglm.js} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-CPbvsglm.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-Dzq4GSqn.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/focus-handoff-DzEyK-Fp.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-BlyJpJAE.js → motion-BQk-uLaI.js} +2 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{motion-BlyJpJAE.js.map → motion-BQk-uLaI.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-DuGUQhxd.js +4 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/{ui-CfByjNaO.js.map → ui-DuGUQhxd.js.map} +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js +2 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtualizer-CSk2RJEN.js.map +1 -0
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/accordion.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/data-grid.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/date-picker.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/dropdown.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/keybinding.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/modal.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/panels.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/scroll-area.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/select.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/sidebar.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tabs.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/toast.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/tooltip.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/components/virtualizer.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/core.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/index.js.map +1 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/logical-entry-manifest.json +112 -106
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/trellis.min.js +9 -9
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/capability-shortcut-Z-__iteD.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B2rTvkxi.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-B2rTvkxi.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-Bl38ruYD.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C0kdsGqX.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-C0kdsGqX.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-CPbvsglm.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DldFffYN.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry.generated-DldFffYN.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/entry2.generated-jxSblEo7.js.map +0 -1
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/ui-CfByjNaO.js +0 -4
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtual-window-BHdOw3Pi.js +0 -2
- package/packages/server/trellis_ui/static/trellis_ui/assets/js/esm/chunks/virtual-window-BHdOw3Pi.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"entry.generated-BNM7EWpC.js","names":[],"sources":["../../../../../../../../client/src/runtime/composition-breakpoint.ts","../../../../../../../../client/src/components/panels/contract.ts","../../../../../../../../client/src/components/panels/machine.ts","../../../../../../../../client/src/components/panels/styles.ts","../../../../../../../../client/src/components/panels/index.ts","../../../../../../../../client/src/components/panels/entry.generated.ts"],"sourcesContent":["type CompositionBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst compositionBreakpointPixels = (\n reference: HTMLElement,\n breakpoint: CompositionBreakpoint,\n): number => {\n const value = getComputedStyle(reference).getPropertyValue(`--breakpoint-${breakpoint}`);\n const pixels = Number.parseFloat(value);\n return Number.isFinite(pixels) ? pixels : Number.POSITIVE_INFINITY;\n};\n\nexport {compositionBreakpointPixels};\nexport type {CompositionBreakpoint};\n","import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst PANELS_ORIENTATIONS = ['horizontal', 'vertical'] as const;\nconst PANEL_AS_VALUES = ['div', 'section', 'aside', 'main', 'nav'] as const;\nconst PANEL_SIZES = ['1', '2', '3', '4', '5', '6', 'fill'] as const;\nconst PANEL_RESIZE_EDGES = ['none', 'start', 'end'] as const;\nconst PANEL_TOGGLE_ACTIONS = ['toggle', 'expand', 'collapse'] as const;\n\nconst panelsSchema = {\n id: string.default('ui-panels'),\n orientation: oneOf(PANELS_ORIENTATIONS, 'horizontal'),\n persist: bool,\n divider: bool.default(true),\n class: string,\n};\n\nconst panelSchema = {\n id: string,\n as: oneOf(PANEL_AS_VALUES, 'section'),\n size: oneOf(PANEL_SIZES, 'fill'),\n resize: oneOf(PANEL_RESIZE_EDGES, 'none'),\n collapsible: bool,\n defaultCollapsed: bool,\n class: string,\n};\n\nconst panelToggleSchema = {\n target: string,\n action: oneOf(PANEL_TOGGLE_ACTIONS, 'toggle'),\n icon: string.default('menu'),\n label: string.default('Expand'),\n class: string,\n};\n\ntype PanelsOrientation = typeof PANELS_ORIENTATIONS[number];\ntype PanelAs = typeof PANEL_AS_VALUES[number];\ntype PanelSize = typeof PANEL_SIZES[number];\ntype PanelResizeEdge = typeof PANEL_RESIZE_EDGES[number];\ntype PanelToggleAction = typeof PANEL_TOGGLE_ACTIONS[number];\ntype PanelsProps = SchemaToProps<typeof panelsSchema>;\ntype PanelProps = SchemaToProps<typeof panelSchema>;\ntype PanelToggleProps = SchemaToProps<typeof panelToggleSchema>;\n\nexport {\n PANEL_AS_VALUES,\n PANEL_RESIZE_EDGES,\n PANEL_SIZES,\n PANEL_TOGGLE_ACTIONS,\n PANELS_ORIENTATIONS,\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n};\nexport type {\n PanelAs,\n PanelProps,\n PanelResizeEdge,\n PanelSize,\n PanelToggleAction,\n PanelToggleProps,\n PanelsOrientation,\n PanelsProps,\n};\n","import {createMachine, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {PanelsProps} from './contract';\n\ntype PanelsContext = {\n collection: {\n ids: string[];\n collapsibleIds: string[];\n sizableIds: string[];\n resizableIds: string[];\n };\n layout: {\n collapsedIds: string[];\n committedSizes: Record<string, number>;\n };\n authored: {collapsedIds: string[]};\n change: {\n openingIds: string[];\n closingIds: string[];\n };\n resize: {\n activeId: string;\n initialSize: number | null;\n previewSize: number | null;\n };\n sizing: {\n changes: PanelSizingTransitionData[];\n };\n};\n\ntype PanelTransitionData = {panelId: string};\ntype PanelSizingTransitionData = {panelId: string; from: number; to: number; reset?: boolean};\ntype PanelsPersistTransitionData = {\n groupId: string;\n collapsed: string[];\n sizes: Record<string, number>;\n};\n\ntype PanelsMachineEffects = {\n prepareChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n sync(scope: MachineScope<PanelsContext, PanelsProps>): void;\n beginResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n previewResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n commitResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n cancelResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n prepareSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n persist(scope: MachineScope<PanelsContext, PanelsProps>): void;\n};\n\ntype CreatePanelsMachineOptions = {\n props: PanelsProps;\n context: PanelsContext;\n effects: PanelsMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'closing'>);\n\nconst sizingHook = defineHook({\n name: 'sizing',\n state: 'sizing',\n projectEach: (snapshot) => snapshot.context.sizing.changes,\n onDone: 'SIZE_DONE',\n onError: 'SIZE_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelSizingTransitionData, 'sizing'>);\n\nconst persistingHook = defineHook({\n name: 'persisting',\n state: 'persisting',\n project: (snapshot) => ({\n groupId: snapshot.props.id,\n collapsed: [...snapshot.context.layout.collapsedIds],\n sizes: {...snapshot.context.layout.committedSizes},\n }),\n onDone: 'PERSIST_DONE',\n onError: 'PERSIST_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelsPersistTransitionData, 'persisting'>);\n\nconst panelsHooks = [openingHook, closingHook, sizingHook, persistingHook] as const;\n\nconst strings = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst panelId = (event: MachineEventObject): string => typeof event.panelId === 'string' ? event.panelId : '';\nconst finiteSize = (value: unknown): number | null => typeof value === 'number' && Number.isFinite(value) ? value : null;\nconst sizingChanges = (event: MachineEventObject): PanelSizingTransitionData[] => {\n const candidates = Array.isArray(event.changes) ? event.changes : [event];\n return candidates.flatMap((candidate) => {\n if (typeof candidate !== 'object' || candidate === null) return [];\n const change = candidate as Record<string, unknown>;\n const id = typeof change.panelId === 'string' ? change.panelId : '';\n const from = finiteSize(change.from);\n const to = finiteSize(change.to);\n const reset = change.reset === true;\n return id && from !== null && to !== null && (from !== to || reset)\n ? [{panelId: id, from, to, ...(reset ? {reset: true} : {})}]\n : [];\n });\n};\nconst propsFrom = (event: MachineEventObject, fallback: PanelsProps): PanelsProps => (\n typeof event.props === 'object' && event.props !== null ? event.props as PanelsProps : fallback\n);\nconst sameStrings = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\n\nconst requestedCollapsed = (scope: MachineScope<PanelsContext, PanelsProps>): string[] => {\n const id = panelId(scope.event);\n const current = scope.context.layout.collapsedIds;\n switch (scope.event.type) {\n case 'COLLAPSE':\n return scope.context.collection.collapsibleIds.includes(id) && !current.includes(id)\n ? scope.context.collection.ids.filter((item) => current.includes(item) || item === id)\n : current;\n case 'EXPAND':\n return current.filter((item) => item !== id);\n case 'TOGGLE':\n if (!scope.context.collection.collapsibleIds.includes(id)) return current;\n return current.includes(id)\n ? current.filter((item) => item !== id)\n : scope.context.collection.ids.filter((item) => current.includes(item) || item === id);\n default:\n return current;\n }\n};\n\nconst changeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n return scope.context.collection.ids.includes(id)\n && !sameStrings(scope.context.layout.collapsedIds, requestedCollapsed(scope));\n};\n\nconst resizeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n return scope.context.collection.resizableIds.includes(id)\n && !scope.context.layout.collapsedIds.includes(id)\n && finiteSize(scope.event.size) !== null;\n};\n\nconst sizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n scope.context.collection.sizableIds.includes(id)\n && !scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenSizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n scope.context.collection.sizableIds.includes(id)\n && scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenResetAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const ids = strings(scope.event.ids);\n return ids.length > 0 && ids.every((id) => (\n scope.context.collection.sizableIds.includes(id)\n && scope.context.layout.collapsedIds.includes(id)\n && Object.hasOwn(scope.context.layout.committedSizes, id)\n ));\n};\n\nconst applySizing = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n const committedSizes = {...scope.context.layout.committedSizes};\n changes.forEach(({panelId: id, to, reset}) => {\n if (reset) delete committedSizes[id];\n else committedSizes[id] = to;\n });\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes,\n },\n sizing: {changes},\n }};\n};\n\nconst commitHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: {\n ...scope.context.layout.committedSizes,\n ...Object.fromEntries(changes.map(({panelId: id, to}) => [id, to])),\n },\n },\n }};\n};\n\nconst resetHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const committedSizes = {...scope.context.layout.committedSizes};\n strings(scope.event.ids).forEach((id) => delete committedSizes[id]);\n return {context: {\n ...scope.context,\n layout: {...scope.context.layout, committedSizes},\n }};\n};\n\nconst applyChange = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const collapsedIds = requestedCollapsed(scope);\n const previous = scope.context.layout.collapsedIds;\n return {context: {\n ...scope.context,\n layout: {...scope.context.layout, collapsedIds},\n change: {\n openingIds: previous.filter((id) => !collapsedIds.includes(id)),\n closingIds: collapsedIds.filter((id) => !previous.includes(id)),\n },\n }};\n};\n\nconst reconcile = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const ids = strings(scope.event.ids);\n const collapsibleIds = strings(scope.event.collapsibleIds).filter((id) => ids.includes(id));\n const sizableIds = strings(scope.event.sizableIds).filter((id) => ids.includes(id));\n const resizableIds = strings(scope.event.resizableIds).filter((id) => ids.includes(id));\n const authoredCollapsedIds = strings(scope.event.authoredCollapsedIds).filter((id) => collapsibleIds.includes(id));\n const known = new Set(scope.context.collection.ids);\n const collapsedIds = ids.filter((id) => (\n scope.context.layout.collapsedIds.includes(id) || (!known.has(id) && authoredCollapsedIds.includes(id))\n ) && collapsibleIds.includes(id));\n const committedSizes = Object.fromEntries(Object.entries(scope.context.layout.committedSizes).filter(([id]) => (\n ids.includes(id) && sizableIds.includes(id)\n )));\n const activeExists = ids.includes(scope.context.resize.activeId) && resizableIds.includes(scope.context.resize.activeId);\n return {context: {\n ...scope.context,\n collection: {ids, collapsibleIds, sizableIds, resizableIds},\n layout: {collapsedIds, committedSizes},\n authored: {collapsedIds: authoredCollapsedIds},\n resize: activeExists\n ? scope.context.resize\n : {activeId: '', initialSize: null, previewSize: null},\n }};\n};\n\nconst activeRemoved = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const ids = strings(scope.event.ids);\n const resizableIds = strings(scope.event.resizableIds);\n return !ids.includes(scope.context.resize.activeId) || !resizableIds.includes(scope.context.resize.activeId);\n};\n\nconst createPanelsMachine = ({\n props,\n context,\n effects,\n}: CreatePanelsMachineOptions): Machine<PanelsContext, PanelsProps> => createMachine<PanelsContext, PanelsProps>({\n initial: 'stable',\n on: {\n DOM_INVALIDATED: {effects: 'sync'},\n },\n states: {\n stable: {\n tags: ['stable'],\n on: {\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESTORE_HIDDEN_SIZES: {guard: hiddenSizingAllowed, reduce: commitHiddenSizes},\n RESET_HIDDEN_SIZES: {\n target: 'persisting',\n guard: hiddenResetAllowed,\n reduce: resetHiddenSizes,\n effects: ['sync', 'persist'],\n },\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'persisting', effects: ['finishChange', 'persist']},\n CHANGE_ERROR: {target: 'persisting', effects: ['finishChange', 'persist']},\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n sizing: {\n tags: ['sizing', 'transitioning'],\n on: {\n SIZE_DONE: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE_ERROR: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n resizing: {\n tags: ['resizing'],\n on: {\n RESIZE: {guard: 'activeResize', reduce: 'previewResize', effects: 'previewResize'},\n RESIZE_END: {target: 'persisting', guard: 'activeResize', reduce: 'commitResize', effects: ['commitResize', 'persist']},\n RESIZE_CANCEL: {target: 'stable', reduce: 'clearResize', effects: 'cancelResize'},\n PANELS_CHANGED: [\n {target: 'stable', guard: activeRemoved, reduce: reconcile, effects: ['cancelResize', 'sync']},\n {reduce: reconcile, effects: 'sync'},\n ],\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n persisting: {\n tags: ['persisting'],\n on: {\n PERSIST_DONE: 'stable',\n PERSIST_ERROR: 'stable',\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n },\n}, {\n props,\n context,\n reducers: {\n replaceProps: (scope) => ({props: propsFrom(scope.event, scope.props)}),\n startResize: (scope) => {\n const size = finiteSize(scope.event.size);\n return {context: {\n ...scope.context,\n resize: {activeId: panelId(scope.event), initialSize: size, previewSize: size},\n }};\n },\n previewResize: (scope) => ({context: {\n ...scope.context,\n resize: {...scope.context.resize, previewSize: finiteSize(scope.event.size)},\n }}),\n commitResize: (scope) => {\n const id = panelId(scope.event);\n const size = finiteSize(scope.event.size);\n if (size === null) return;\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: {...scope.context.layout.committedSizes, [id]: size},\n },\n resize: {activeId: '', initialSize: null, previewSize: null},\n }};\n },\n clearResize: (scope) => ({context: {\n ...scope.context,\n resize: {activeId: '', initialSize: null, previewSize: null},\n }}),\n },\n guards: {\n activeResize: (scope) => panelId(scope.event) === scope.context.resize.activeId\n && finiteSize(scope.event.size) !== null,\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n sync: effects.sync,\n beginResize: effects.beginResize,\n previewResize: effects.previewResize,\n commitResize: effects.commitResize,\n cancelResize: effects.cancelResize,\n prepareSizing: effects.prepareSizing,\n finishSizing: effects.finishSizing,\n persist: effects.persist,\n },\n});\n\nexport {createPanelsMachine, panelsHooks};\nexport type {\n CreatePanelsMachineOptions,\n PanelsContext,\n PanelsMachineEffects,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelTransitionData,\n};\n","import {defineStyles} from '../../runtime';\n\nconst panelsStyles = defineStyles({definition: {\n component: 'ui.panels',\n parts: {\n root: {\n base: 'relative flex h-full min-h-0 w-full min-w-0',\n variants: {\n orientation: {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n },\n },\n defaults: {orientation: 'horizontal'},\n },\n panel: {\n base: 'relative min-w-0 overflow-hidden',\n variants: {\n orientation: {\n horizontal: 'h-full',\n vertical: 'w-full',\n },\n divider: {\n true: '',\n false: '',\n },\n resize: {\n none: '',\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', divider: true, resize: 'none'},\n },\n expanded: {base: 'h-full min-h-0 w-full min-w-0'},\n collapsed: {base: 'flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden'},\n resizeHandle: {\n base: [\n 'absolute z-20 touch-none border-transparent outline-none',\n 'hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset',\n 'data-resizing:border-intent-neutral-edge-strong',\n ],\n variants: {\n orientation: {\n horizontal: 'inset-y-0 w-panel-resize-handle cursor-col-resize',\n vertical: 'inset-x-0 h-panel-resize-handle cursor-row-resize',\n },\n edge: {\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', edge: 'end'},\n },\n toggle: {base: 'inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset'},\n toggleIcon: {base: 'size-icon-md shrink-0'},\n },\n}});\n\nexport {panelsStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n createResizable,\n decodeProps,\n defineAlpineData,\n focusableElements,\n isRtl,\n mergeBindings,\n observeSemanticChanges,\n resolveStyle,\n type BindingObject,\n type CleanupStack,\n type ResizeDirection,\n type ResizeEvent,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {animateSize, type MotionHandle, type MotionTransitionSubject} from '@client/motion';\nimport {noopHandle} from '@client/motion/animate';\nimport {compositionBreakpointPixels} from '@client/runtime/composition-breakpoint';\nimport {addListener, asBool, dispatch, setPresence} from '@client/utils';\nimport {\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n type PanelProps,\n type PanelResizeEdge,\n type PanelToggleAction,\n type PanelToggleProps,\n type PanelsOrientation,\n type PanelsProps,\n} from './contract';\nimport {\n createPanelsMachine,\n panelsHooks,\n type PanelsContext,\n type PanelsPersistTransitionData,\n type PanelSizingTransitionData,\n type PanelTransitionData,\n} from './machine';\nimport {panelsStyles} from './styles';\n\ntype PanelsTransitionName = (typeof panelsHooks)[number]['name'];\ntype PanelsTransition<TName extends PanelsTransitionName = PanelsTransitionName> = TransitionForHook<\n Extract<(typeof panelsHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype PanelRecord = {\n panel: HTMLElement;\n expanded: HTMLElement;\n collapsed: HTMLElement | null;\n handle: HTMLElement | null;\n props: PanelProps;\n};\n\ntype PanelCollectionState = {\n ids: string[];\n collapsibleIds: string[];\n sizableIds: string[];\n resizableIds: string[];\n authoredCollapsedIds: string[];\n};\n\ntype PanelEventDetail = {\n panelId?: string;\n groupId?: string;\n size?: number;\n action?: PanelToggleAction;\n trigger?: HTMLElement | null;\n __panelsNotification?: boolean;\n};\n\ntype PanelTransitionGeometry = {from: number; to: number};\ntype PanelsResponsiveMode = 'stacked' | 'wide';\ntype PanelMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelTransitionData;\n}>;\ntype PanelSizingMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelSizingTransitionData;\n}>;\n\ntype PanelsController = {\n readonly id: string;\n hasPanel(panelId: string): boolean;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n resize(panelId: string, size: number): void;\n reset(panelId?: string): void;\n syncToggles(): void;\n};\n\n/** Public Alpine API for `ui.panels`. @public */\ninterface UiPanelsApi {\n /** Stable group id used by explicit controls, named events, and persistence. */\n readonly id: string;\n /** Current main axis along which direct panels negotiate space. */\n readonly orientation: 'horizontal' | 'vertical';\n /** Stable ids of panels whose collapsed representation is active. */\n readonly collapsed: readonly string[];\n /** User-committed pixel measures keyed by stable panel id. */\n readonly sizes: Readonly<Record<string, number>>;\n /** Returns whether a named panel is currently collapsed. */\n isCollapsed(id: string): boolean;\n /** Collapses a named collapsible panel. */\n collapse(id: string): void;\n /** Expands a named collapsed panel. */\n expand(id: string): void;\n /** Reverses the collapsed state of a named collapsible panel. */\n toggle(id: string): void;\n /** Moves an expanded bounded panel to a clamped pixel size through the sizing transition. */\n resize(id: string, size: number): void;\n /** Restores one panel or the whole group to its authored layout. */\n reset(id?: string): void;\n}\n\ntype PanelsData = AlpineMachine<PanelsContext, PanelsProps, typeof panelsHooks> & UiPanelsApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n syncToggles(): void;\n hasPanel(panelId: string): boolean;\n transitionPanel(transition: PanelMotionTransition): MotionHandle;\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle;\n};\n\nconst controllers = new Set<PanelsController>();\n\nconst eventDetail = (event: Event): PanelEventDetail => (\n event instanceof CustomEvent && event.detail && typeof event.detail === 'object'\n ? event.detail as PanelEventDetail\n : {}\n);\n\nconst registerDocumentListeners = (() => {\n let registered = false;\n return (): void => {\n if (registered || typeof document === 'undefined') return;\n const route = (action: PanelToggleAction) => (event: Event): void => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.perform(detail.action ?? action, detail.panelId!, detail.trigger);\n });\n };\n document.addEventListener('ui:panel-collapse', route('collapse'));\n document.addEventListener('ui:panel-expand', route('expand'));\n document.addEventListener('ui:panel-toggle', route('toggle'));\n document.addEventListener('ui:panel-size', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId || !Number.isFinite(detail.size)) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.resize(detail.panelId!, detail.size!);\n });\n });\n document.addEventListener('ui:panels-reset', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (detail.panelId && !controller.hasPanel(detail.panelId)) return;\n controller.reset(detail.panelId);\n });\n });\n registered = true;\n };\n})();\n\nconst storageKey = (id: string): string => `trellis-ui:panels:${id}:v1`;\nconst numericRecord = (value: unknown): Record<string, number> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n return Object.fromEntries(Object.entries(value).filter((entry): entry is [string, number] => (\n typeof entry[1] === 'number' && Number.isFinite(entry[1])\n )));\n};\n\nconst UiPanels = (): TrellisAlpineComponent<PanelsData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let disconnectObserver: (() => void) | null = null;\n let resizeObserver: ResizeObserver | null = null;\n let responsiveMode: PanelsResponsiveMode = 'wide';\n let cleanup: CleanupStack = [];\n const deferredTimers = new Set<number>();\n const restoreFrames = new Set<number>();\n const resizeCleanups = new Map<HTMLElement, () => void>();\n const transitionGeometry = new Map<string, PanelTransitionGeometry>();\n const rememberedFocus = new Map<string, HTMLElement>();\n const activeTriggers = new Map<string, HTMLElement>();\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Panels has not been initialized.');\n return rootEl;\n };\n const owns = (element: Element): boolean => element.closest('[data-ui-panels]') === root();\n const records = (): PanelRecord[] => Array.from(root().children).flatMap((child) => {\n if (!(child instanceof HTMLElement) || !child.hasAttribute('data-ui-panel')) return [];\n const expanded = child.querySelector<HTMLElement>(':scope > [data-ui-panel-expanded]');\n if (!expanded || !owns(expanded)) return [];\n return [{\n panel: child,\n expanded,\n collapsed: child.querySelector<HTMLElement>(':scope > [data-ui-panel-collapsed]'),\n handle: child.querySelector<HTMLElement>(':scope > [data-ui-panel-resize-handle]'),\n props: decodeProps({el: child, schema: panelSchema}),\n }];\n });\n const recordFor = (id: string): PanelRecord | null => records().find((record) => record.props.id === id) ?? null;\n const context = (): Readonly<PanelsContext> => bridge.getCommittedSnapshot().context;\n const currentProps = (): Readonly<PanelsProps> => bridge.getCommittedSnapshot().props;\n const isCollapsed = (id: string): boolean => context().layout.collapsedIds.includes(id);\n const isResponsiveStacked = (): boolean => (\n currentProps().orientation === 'horizontal' && responsiveMode === 'stacked'\n );\n const effectiveOrientation = (): PanelsOrientation => (\n isResponsiveStacked() ? 'vertical' : currentProps().orientation\n );\n const renderedOrientation = (): PanelsOrientation => root().dataset.orientation === 'vertical' ? 'vertical' : 'horizontal';\n const mainSize = (element: Element): number => {\n const rect = element.getBoundingClientRect();\n return renderedOrientation() === 'horizontal' ? rect.width : rect.height;\n };\n\n const collectionState = (): PanelCollectionState => {\n const items = records();\n const ids = items.map(({props}) => props.id);\n if (ids.some((id) => !id)) throw new Error('Every Panel requires a stable id.');\n if (new Set(ids).size !== ids.length) throw new Error('Panel ids must be unique within a Panels group.');\n if (items.length > 0 && !items.some(({props}) => props.size === 'fill')) {\n throw new Error('A Panels group requires at least one size=\"fill\" Panel.');\n }\n if (items.some(({props}) => props.size === 'fill' && props.resize !== 'none')) {\n throw new Error('A size=\"fill\" Panel cannot own a resize handle.');\n }\n return {\n ids: items.map(({props}) => props.id).filter(Boolean),\n collapsibleIds: items.filter(({props}) => props.id && props.collapsible).map(({props}) => props.id),\n sizableIds: items.filter(({props}) => props.id && props.size !== 'fill').map(({props}) => props.id),\n resizableIds: items.filter(({props}) => (\n props.id && props.size !== 'fill' && props.resize !== 'none'\n )).map(({props}) => props.id),\n authoredCollapsedIds: items.filter(({props}) => (\n props.id && props.collapsible && props.defaultCollapsed\n )).map(({props}) => props.id),\n };\n };\n\n const cssLength = (token: string): number => {\n const probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;';\n if (renderedOrientation() === 'horizontal') probe.style.width = `var(${token})`;\n else probe.style.height = `var(${token})`;\n root().append(probe);\n const value = mainSize(probe);\n probe.remove();\n return value;\n };\n\n const boundsFor = (record: PanelRecord): {minimum: number; maximum: number} => {\n if (record.props.size === 'fill') return {minimum: 0, maximum: Number.POSITIVE_INFINITY};\n return {\n minimum: cssLength(`--spacing-panel-${record.props.size}-min`),\n maximum: cssLength(`--spacing-panel-${record.props.size}-max`),\n };\n };\n\n const clampPanelSize = (record: PanelRecord, value: number): number => {\n const {minimum, maximum} = boundsFor(record);\n return Math.min(maximum, Math.max(minimum, value));\n };\n\n const initialContext = (): PanelsContext => {\n const collection = collectionState();\n return {\n collection: {\n ids: collection.ids,\n collapsibleIds: collection.collapsibleIds,\n sizableIds: collection.sizableIds,\n resizableIds: collection.resizableIds,\n },\n layout: {collapsedIds: [...collection.authoredCollapsedIds], committedSizes: {}},\n authored: {collapsedIds: collection.authoredCollapsedIds},\n change: {openingIds: [], closingIds: []},\n resize: {activeId: '', initialSize: null, previewSize: null},\n sizing: {changes: []},\n };\n };\n\n const setMainConstraints = (element: HTMLElement, minimum: string, maximum: string): void => {\n if (renderedOrientation() === 'horizontal') {\n element.style.minWidth = minimum;\n element.style.maxWidth = maximum;\n element.style.minHeight = '';\n element.style.maxHeight = '';\n } else {\n element.style.minHeight = minimum;\n element.style.maxHeight = maximum;\n element.style.minWidth = '';\n element.style.maxWidth = '';\n }\n };\n\n const clearGeometry = (element: HTMLElement): void => {\n element.style.flex = '';\n element.style.minWidth = '';\n element.style.maxWidth = '';\n element.style.minHeight = '';\n element.style.maxHeight = '';\n };\n\n const applyGeometry = (record: PanelRecord, transitionSize?: number): void => {\n if (isResponsiveStacked()) {\n clearGeometry(record.panel);\n return;\n }\n if (transitionSize !== undefined) {\n record.panel.style.flex = `0 0 ${transitionSize}px`;\n setMainConstraints(record.panel, '0px', 'none');\n return;\n }\n if (isCollapsed(record.props.id)) {\n if (context().authored.collapsedIds.includes(record.props.id)) {\n clearGeometry(record.panel);\n return;\n }\n const collapsedSize = record.collapsed ? 'var(--spacing-panel-collapsed)' : '0px';\n record.panel.style.flex = `0 0 ${collapsedSize}`;\n setMainConstraints(record.panel, collapsedSize, collapsedSize);\n return;\n }\n if (record.props.size === 'fill') {\n clearGeometry(record.panel);\n return;\n }\n const committed = context().resize.activeId === record.props.id\n ? context().resize.previewSize\n : context().layout.committedSizes[record.props.id];\n if (committed === undefined || committed === null) {\n clearGeometry(record.panel);\n return;\n }\n const basis = `${clampPanelSize(record, committed)}px`;\n record.panel.style.flex = `0 1 ${basis}`;\n setMainConstraints(\n record.panel,\n `var(--spacing-panel-${record.props.size}-min)`,\n `var(--spacing-panel-${record.props.size}-max)`,\n );\n };\n\n const setInert = (element: HTMLElement, inert: boolean): void => {\n element.toggleAttribute('inert', inert);\n element.setAttribute('aria-hidden', inert ? 'true' : 'false');\n };\n\n const syncPanel = (record: PanelRecord): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n const collapsed = isCollapsed(record.props.id);\n const opening = bridge.hasTag('changing') && context().change.openingIds.includes(record.props.id);\n const closing = bridge.hasTag('changing') && context().change.closingIds.includes(record.props.id);\n const finalCollapsed = collapsed && !closing;\n const showExpanded = !finalCollapsed;\n const showCollapsed = collapsed && !closing && !opening && record.collapsed !== null;\n\n record.panel.dataset.state = collapsed ? 'collapsed' : 'expanded';\n record.panel.dataset.orientation = orientation;\n record.panel.dataset.size = record.props.size;\n record.panel.dataset.resize = record.props.resize;\n record.panel.className = resolveStyle({\n part: panelsStyles.parts.panel,\n props: {orientation, divider: props.divider, resize: record.props.resize},\n className: record.props.class,\n });\n setPresence({el: record.panel, attr: 'data-collapsible', present: record.props.collapsible});\n setPresence({el: record.panel, attr: 'data-resizing', present: context().resize.activeId === record.props.id});\n applyGeometry(record);\n\n record.expanded.hidden = !showExpanded;\n setInert(record.expanded, !showExpanded);\n if (record.collapsed) {\n record.collapsed.hidden = !showCollapsed;\n setInert(record.collapsed, !showCollapsed);\n }\n if (record.handle) {\n const disabled = isResponsiveStacked()\n || collapsed\n || record.props.size === 'fill'\n || record.props.resize === 'none';\n record.handle.dataset.orientation = orientation;\n record.handle.dataset.resizeEdge = record.props.resize;\n record.handle.setAttribute('aria-label', `Resize ${record.props.id} panel`);\n record.handle.toggleAttribute('data-resize-disabled', disabled);\n record.handle.hidden = isResponsiveStacked();\n record.handle.className = resolveStyle({\n part: panelsStyles.parts.resizeHandle,\n props: {orientation, edge: record.props.resize},\n className: record.handle.dataset.class ?? '',\n });\n }\n };\n\n const syncDividers = (items: PanelRecord[]): void => {\n items.forEach((record, index) => {\n const next = items[index + 1];\n const interactive = record.props.resize === 'end' || next?.props.resize === 'start';\n setPresence({\n el: record.panel,\n attr: 'data-divider',\n present: currentProps().divider && next !== undefined && !interactive,\n });\n });\n };\n\n const targetForToggle = (toggle: HTMLElement): {record: PanelRecord; controller: PanelsController} | null => {\n const explicit = toggle.dataset.target || '';\n if (!explicit) {\n const panel = toggle.closest<HTMLElement>('[data-ui-panel]');\n const group = panel?.closest<HTMLElement>('[data-ui-panels]');\n const controller = [...controllers].find((item) => item.id === group?.id);\n const record = panel && controller === component ? recordFor(panel.id) : null;\n return record && controller ? {record, controller} : null;\n }\n const groupId = toggle.dataset.groupId || toggle.closest<HTMLElement>('[data-ui-panels]')?.id;\n const candidates = [...controllers].filter((item) => !groupId || item.id === groupId);\n const controller = candidates.find((item) => item.hasPanel(explicit));\n const record = controller === component ? recordFor(explicit) : null;\n return record && controller ? {record, controller} : null;\n };\n\n const syncToggles = (): void => {\n document.querySelectorAll<HTMLElement>('[data-ui-panel-toggle]').forEach((toggle) => {\n const target = targetForToggle(toggle);\n if (!target || target.controller !== component) return;\n const collapsed = isCollapsed(target.record.props.id);\n toggle.dataset.target = target.record.props.id;\n toggle.dataset.groupId = currentProps().id;\n toggle.dataset.state = collapsed ? 'collapsed' : 'expanded';\n toggle.setAttribute('aria-controls', target.record.panel.id);\n toggle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');\n toggle.toggleAttribute('disabled', !target.record.props.collapsible);\n });\n };\n\n const syncAll = (): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n root().dataset.responsiveMode = responsiveMode;\n root().dataset.layoutOrientation = orientation;\n root().style.flexDirection = orientation === 'horizontal' ? 'row' : 'column';\n root().className = resolveStyle({\n part: panelsStyles.parts.root,\n props: {...props, orientation},\n className: props.class,\n });\n setPresence({el: root(), attr: 'data-resizing', present: bridge.hasTag('resizing')});\n setPresence({el: root(), attr: 'data-transitioning', present: bridge.hasTag('transitioning')});\n const items = records();\n items.forEach(syncPanel);\n syncDividers(items);\n syncToggles();\n };\n\n const focusExpanded = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.collapsed?.contains(active))) return;\n const remembered = rememberedFocus.get(record.props.id);\n if (remembered?.isConnected && record.expanded.contains(remembered)) remembered.focus({preventScroll: true});\n else {\n record.expanded.tabIndex = -1;\n record.expanded.focus({preventScroll: true});\n }\n };\n\n const focusCollapsed = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.expanded.contains(active))) return;\n const collapsedTarget = record.collapsed ? focusableElements(record.collapsed)[0] : undefined;\n const external = activeTriggers.get(record.props.id);\n const fallback = external?.isConnected && !record.panel.contains(external) ? external : undefined;\n if (collapsedTarget) collapsedTarget.focus({preventScroll: true});\n else if (fallback) fallback.focus({preventScroll: true});\n else {\n root().tabIndex = -1;\n root().focus({preventScroll: true});\n }\n };\n\n const prepareChange = (): void => {\n const changed = [...context().change.openingIds, ...context().change.closingIds];\n const openingNeedsFocus = new Set(context().change.openingIds.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null\n && record.collapsed !== null\n && active instanceof HTMLElement\n && record.collapsed.contains(active);\n }));\n const from = new Map(changed.flatMap((id) => {\n const record = recordFor(id);\n if (!record) return [];\n if (context().change.closingIds.includes(id)) {\n const active = document.activeElement;\n if (active instanceof HTMLElement && record.expanded.contains(active)) rememberedFocus.set(id, active);\n }\n return [[id, mainSize(record.panel)] as const];\n }));\n syncAll();\n context().change.openingIds.forEach((id) => {\n const record = recordFor(id);\n if (record) focusExpanded(record, openingNeedsFocus.has(id));\n });\n changed.forEach((id) => {\n const record = recordFor(id);\n const start = from.get(id);\n if (!record || start === undefined) return;\n const target = mainSize(record.panel);\n transitionGeometry.set(id, {from: start, to: target});\n applyGeometry(record, start);\n });\n };\n\n const finishChange = (): void => {\n const opening = [...context().change.openingIds];\n const closing = [...context().change.closingIds];\n const closingNeedsFocus = new Set(closing.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null && active instanceof HTMLElement && record.expanded.contains(active);\n }));\n records().forEach((record) => applyGeometry(record));\n syncAll();\n closing.forEach((id) => {\n const record = recordFor(id);\n if (record) focusCollapsed(record, closingNeedsFocus.has(id));\n });\n opening.forEach((panelId) => emitPanelEvent('ui:panel-expand', panelId));\n closing.forEach((panelId) => emitPanelEvent('ui:panel-collapse', panelId));\n [...opening, ...closing].forEach((id) => transitionGeometry.delete(id));\n };\n\n const emitPanelEvent = (name: string, panelId: string, detail: Record<string, unknown> = {}): void => {\n dispatch({el: root(), name, detail: {\n groupId: currentProps().id,\n panelId,\n __panelsNotification: true,\n ...detail,\n }});\n };\n\n const persist = (): void => {\n const layout = context().layout;\n if (currentProps().persist) {\n try {\n localStorage.setItem(storageKey(currentProps().id), JSON.stringify({\n collapsed: layout.collapsedIds,\n sizes: layout.committedSizes,\n }));\n } catch {\n // Persistence is optional; layout state remains committed in memory.\n }\n }\n dispatch({el: root(), name: 'ui:panels-layout-change', detail: {\n groupId: currentProps().id,\n collapsed: [...layout.collapsedIds],\n sizes: {...layout.committedSizes},\n __panelsNotification: true,\n }});\n };\n\n const runWhenStable = (callback: () => void): void => {\n if (!rootEl) return;\n if (bridge.hasTag('stable')) {\n callback();\n return;\n }\n const timer = window.setTimeout(() => {\n deferredTimers.delete(timer);\n runWhenStable(callback);\n }, 16);\n deferredTimers.add(timer);\n };\n\n const reconcileCollapsedState = (\n ids: readonly string[],\n wantsCollapsed: (id: string) => boolean,\n ): void => {\n const next = ids.find((id) => wantsCollapsed(id) !== isCollapsed(id));\n if (!next) return;\n bridge.send({type: wantsCollapsed(next) ? 'COLLAPSE' : 'EXPAND', panelId: next});\n runWhenStable(() => reconcileCollapsedState(ids, wantsCollapsed));\n };\n\n const restorePersistedLayout = (): void => {\n if (!currentProps().persist) return;\n let stored: {collapsed?: unknown; sizes?: unknown};\n try {\n stored = JSON.parse(localStorage.getItem(storageKey(currentProps().id)) ?? 'null') as {\n collapsed?: unknown;\n sizes?: unknown;\n };\n } catch {\n return;\n }\n if (typeof stored !== 'object' || stored === null) return;\n\n const collection = collectionState();\n const desiredCollapsed = new Set(\n (Array.isArray(stored.collapsed) ? stored.collapsed : [])\n .filter((id): id is string => typeof id === 'string' && collection.collapsibleIds.includes(id)),\n );\n const desiredSizes = numericRecord(stored.sizes);\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(collection.collapsibleIds, (id) => desiredCollapsed.has(id));\n };\n\n const restoreSizes = (): void => {\n const changes = collection.sizableIds.flatMap((id): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n const storedSize = desiredSizes[id];\n if (!record || storedSize === undefined) return [];\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, storedSize);\n return Math.abs(from - to) < 0.5 ? [] : [{panelId: id, from, to}];\n });\n if (isResponsiveStacked()) {\n if (changes.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes});\n restoreCollapsedState();\n return;\n }\n const hidden = changes.filter(({panelId: id}) => isCollapsed(id));\n const visible = changes.filter(({panelId: id}) => !isCollapsed(id));\n if (hidden.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes: hidden});\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const opening = collection.collapsibleIds.filter((id) => isCollapsed(id) && !desiredCollapsed.has(id));\n if (opening.length > 0) {\n reconcileCollapsedState(opening, () => false);\n runWhenStable(restoreSizes);\n } else restoreSizes();\n };\n\n const schedulePersistedRestore = (): void => {\n const first = requestAnimationFrame(() => {\n restoreFrames.delete(first);\n const second = requestAnimationFrame(() => {\n restoreFrames.delete(second);\n restorePersistedLayout();\n });\n restoreFrames.add(second);\n });\n restoreFrames.add(first);\n };\n\n const resetLayout = (panelId?: string): void => {\n const collection = collectionState();\n const targetIds = panelId ? collection.ids.filter((id) => id === panelId) : collection.ids;\n if (targetIds.length === 0) return;\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(\n targetIds.filter((id) => collection.collapsibleIds.includes(id)),\n (id) => context().authored.collapsedIds.includes(id),\n );\n };\n\n const sizedIds = targetIds.filter((id) => (\n collection.sizableIds.includes(id) && Object.hasOwn(context().layout.committedSizes, id)\n ));\n if (isResponsiveStacked()) {\n if (sizedIds.length > 0) {\n bridge.send({type: 'RESET_HIDDEN_SIZES', ids: sizedIds});\n runWhenStable(restoreCollapsedState);\n } else restoreCollapsedState();\n return;\n }\n const hiddenIds = sizedIds.filter(isCollapsed);\n if (hiddenIds.length > 0) bridge.send({type: 'RESET_HIDDEN_SIZES', ids: hiddenIds});\n\n const visible = sizedIds.filter((id) => !isCollapsed(id)).flatMap((id): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n if (!record || record.props.size === 'fill') return [];\n return [{\n panelId: id,\n from: mainSize(record.panel),\n to: cssLength(`--spacing-panel-${record.props.size}`),\n reset: true,\n }];\n });\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const prepareSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, from}) => {\n const record = recordFor(id);\n if (record) applyGeometry(record, from);\n });\n };\n\n const finishSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, to}) => {\n const record = recordFor(id);\n if (!record) return;\n applyGeometry(record);\n emitPanelEvent('ui:panel-resize-end', id, {size: to});\n });\n syncAll();\n };\n\n const resizeDirection = (edge: PanelResizeEdge): ResizeDirection => {\n if (effectiveOrientation() === 'vertical') return edge === 'start' ? 'negative' : 'positive';\n const rtl = isRtl({el: root()});\n return edge === 'start' ? rtl ? 'positive' : 'negative' : rtl ? 'negative' : 'positive';\n };\n\n const initializeResizeHandles = (): void => {\n const currentPanels = new Set(records().map(({panel}) => panel));\n resizeCleanups.forEach((dispose, panel) => {\n if (currentPanels.has(panel)) return;\n dispose();\n resizeCleanups.delete(panel);\n });\n records().forEach((record) => {\n if (resizeCleanups.has(record.panel) || !record.handle || record.props.size === 'fill' || record.props.resize === 'none') return;\n const bounds = boundsFor(record);\n const handleSize = cssLength('--spacing-panel-resize-handle');\n const coarseHandleSize = cssLength('--spacing-panel-resize-handle-coarse');\n resizeCleanups.set(record.panel, createResizable({\n element: record.panel,\n handle: record.handle,\n axis: effectiveOrientation() === 'horizontal' ? 'x' : 'y',\n direction: resizeDirection(record.props.resize),\n min: bounds.minimum,\n max: bounds.maximum,\n mode: 'onChange',\n hitArea: handleSize,\n coarseHitArea: coarseHandleSize,\n disabled: () => isResponsiveStacked() || isCollapsed(record.props.id),\n onStart: (event) => bridge.send({type: 'RESIZE_START', panelId: record.props.id, size: resizeValue(event)}),\n onResize: (event) => bridge.send({type: 'RESIZE', panelId: record.props.id, size: resizeValue(event)}),\n onEnd: (event) => bridge.send({type: 'RESIZE_END', panelId: record.props.id, size: resizeValue(event)}),\n }));\n });\n };\n\n const reinitializeResizeHandles = (): void => {\n resizeCleanups.forEach((dispose) => dispose());\n resizeCleanups.clear();\n initializeResizeHandles();\n };\n\n const resizeValue = (event: ResizeEvent): number => effectiveOrientation() === 'horizontal'\n ? event.previewWidth\n : event.previewHeight;\n\n const reconcileResponsiveMode = (width: number): void => {\n const next: PanelsResponsiveMode = currentProps().orientation === 'horizontal'\n && width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n if (next === responsiveMode) return;\n responsiveMode = next;\n syncAll();\n reinitializeResizeHandles();\n };\n\n const bridge = createAlpineMachine({\n schema: panelsSchema,\n hooks: panelsHooks,\n resolveTransitionElement: ({data}) => {\n const panelId = (data as PanelTransitionData | undefined)?.panelId;\n return panelId ? recordFor(panelId)?.panel ?? null : root();\n },\n createMachine: ({props}) => createPanelsMachine({\n props,\n context: initialContext(),\n effects: {\n prepareChange,\n finishChange,\n sync: () => {\n syncAll();\n reinitializeResizeHandles();\n },\n beginResize: () => {\n syncAll();\n },\n previewResize: () => {\n const id = context().resize.activeId;\n const record = recordFor(id);\n if (record) applyGeometry(record);\n const size = context().resize.previewSize;\n if (size !== null) emitPanelEvent('ui:panel-resize', id, {size});\n },\n commitResize: (scope) => {\n syncAll();\n const id = typeof scope.event.panelId === 'string' ? scope.event.panelId : '';\n const size = context().layout.committedSizes[id];\n if (id && size !== undefined) emitPanelEvent('ui:panel-resize-end', id, {size});\n },\n cancelResize: syncAll,\n prepareSizing,\n finishSizing,\n persist,\n },\n }),\n });\n\n const sendPanelsChanged = (): void => {\n const collection = collectionState();\n bridge.send({type: 'PANELS_CHANGED', ...collection});\n initializeResizeHandles();\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionState,\n onChange: sendPanelsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'id', 'data-size', 'data-resize', 'data-collapsible', 'data-default-collapsed',\n ],\n },\n });\n };\n\n let component!: TrellisAlpineComponent<PanelsData>;\n component = {\n ...bridge,\n get id() { return root().id || currentProps().id; },\n get orientation() { return effectiveOrientation(); },\n get collapsed() { return [...context().layout.collapsedIds]; },\n get sizes() { return {...context().layout.committedSizes}; },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.root, props, className: props.class}),\n {'data-ui-panels': ''},\n ]});\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n root().id ||= currentProps().id;\n responsiveMode = currentProps().orientation === 'horizontal'\n && root().getBoundingClientRect().width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n controllers.add(component);\n registerDocumentListeners();\n syncAll();\n initializeResizeHandles();\n resizeObserver = new ResizeObserver((entries) => {\n reconcileResponsiveMode(entries[0]?.contentRect.width ?? root().clientWidth);\n });\n resizeObserver.observe(root());\n setupObserver();\n if (currentProps().persist) schedulePersistedRestore();\n cleanup.push(addListener({target: root(), event: 'keydown', handler: () => syncToggles()}));\n },\n destroy(): void {\n controllers.delete(component);\n disconnectObserver?.();\n disconnectObserver = null;\n resizeObserver?.disconnect();\n resizeObserver = null;\n resizeCleanups.forEach((dispose) => dispose());\n resizeCleanups.clear();\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n deferredTimers.forEach((timer) => window.clearTimeout(timer));\n deferredTimers.clear();\n restoreFrames.forEach((frame) => cancelAnimationFrame(frame));\n restoreFrames.clear();\n bridge.disconnect();\n rootEl = null;\n },\n transitionPanel(transition: PanelMotionTransition): MotionHandle {\n const id = transition.data.panelId;\n const record = recordFor(id);\n const geometry = transitionGeometry.get(id);\n if (!record || !geometry || geometry.from === geometry.to) {\n if (record) applyGeometry(record, geometry?.to);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${geometry.from}px`, `${geometry.to}px`]},\n role: 'layout',\n cleanup: () => applyGeometry(record),\n });\n },\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle {\n const {panelId: id, from, to} = transition.data;\n const record = recordFor(id);\n if (!record || from === to) {\n if (record) applyGeometry(record);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${from}px`, `${to}px`]},\n role: 'layoutQuick',\n cleanup: () => applyGeometry(record),\n });\n },\n hasPanel(id: string): boolean { return recordFor(id) !== null; },\n isCollapsed,\n collapse(id: string): void { bridge.send({type: 'COLLAPSE', panelId: id}); },\n expand(id: string): void { bridge.send({type: 'EXPAND', panelId: id}); },\n toggle(id: string): void { bridge.send({type: 'TOGGLE', panelId: id}); },\n resize(id: string, size: number): void {\n const record = recordFor(id);\n if (\n isResponsiveStacked()\n || !record\n || record.props.size === 'fill'\n || isCollapsed(id)\n || !Number.isFinite(size)\n ) return;\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, size);\n if (Math.abs(from - to) < 0.5) return;\n bridge.send({type: 'SIZE', panelId: id, from, to});\n },\n reset(id?: string): void { resetLayout(id); },\n perform(action: PanelToggleAction, id: string, trigger?: HTMLElement | null): void {\n if (trigger) activeTriggers.set(id, trigger);\n ({collapse: this.collapse, expand: this.expand, toggle: this.toggle})[action](id);\n },\n syncToggles,\n };\n\n return component;\n};\n\nconst UiPanelToggle = (): TrellisAlpineComponent<{\n props: PanelToggleProps;\n readonly root: BindingObject;\n trigger(event?: Event): void;\n}> => {\n let props = {} as PanelToggleProps;\n return {\n get props() { return props; },\n init() { props = decodeProps({el: this.$el, schema: panelToggleSchema}); },\n destroy() {},\n get root() {\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.toggle, props: {}, className: props.class}),\n {\n 'data-ui-panel-toggle': '',\n ':data-target': () => props.target || undefined,\n ':data-action': () => props.action,\n '@click': (event: Event) => this.trigger(event),\n },\n ]});\n },\n trigger(event?: Event) {\n event?.preventDefault();\n const button = this.$el as HTMLElement;\n const closestPanel = button.closest<HTMLElement>('[data-ui-panel]');\n const closestGroup = closestPanel?.closest<HTMLElement>('[data-ui-panels]');\n const target = props.target || closestPanel?.id || '';\n if (!target) return;\n document.dispatchEvent(new CustomEvent('ui:panel-toggle', {detail: {\n panelId: target,\n groupId: closestGroup?.id,\n action: props.action,\n trigger: button,\n }}));\n },\n };\n};\n\nconst registerPanels = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiPanels', UiPanels)(AlpineInstance);\n defineAlpineData('UiPanelToggle', UiPanelToggle)(AlpineInstance);\n};\n\nexport {registerPanels, UiPanels, UiPanelToggle};\nexport type {\n PanelEventDetail,\n PanelsData,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelsTransition,\n UiPanelsApi,\n};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerPanels as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerPanels = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerPanels};\nexport default registerPanels;\nexport * from './index';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"entry.generated-BYDBzadH.js","names":[],"sources":["../../../../../../../../client/src/runtime/composition-breakpoint.ts","../../../../../../../../client/src/components/panels/contract.ts","../../../../../../../../client/src/components/panels/machine.ts","../../../../../../../../client/src/components/panels/styles.ts","../../../../../../../../client/src/components/panels/index.ts","../../../../../../../../client/src/components/panels/entry.generated.ts"],"sourcesContent":["type CompositionBreakpoint = 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nconst compositionBreakpointPixels = (\n reference: HTMLElement,\n breakpoint: CompositionBreakpoint,\n): number => {\n const value = getComputedStyle(reference).getPropertyValue(`--breakpoint-${breakpoint}`);\n const pixels = Number.parseFloat(value);\n return Number.isFinite(pixels) ? pixels : Number.POSITIVE_INFINITY;\n};\n\nexport {compositionBreakpointPixels};\nexport type {CompositionBreakpoint};\n","import {bool, oneOf, string, type SchemaToProps} from '../../runtime';\n\nconst PANELS_ORIENTATIONS = ['horizontal', 'vertical'] as const;\nconst PANEL_AS_VALUES = ['div', 'section', 'aside', 'main', 'nav'] as const;\nconst PANEL_SIZES = ['1', '2', '3', '4', '5', '6', 'fill'] as const;\nconst PANEL_RESIZE_EDGES = ['none', 'start', 'end'] as const;\nconst PANEL_TOGGLE_ACTIONS = ['toggle', 'expand', 'collapse'] as const;\n\nconst panelsSchema = {\n id: string.default('ui-panels'),\n orientation: oneOf(PANELS_ORIENTATIONS, 'horizontal'),\n persist: bool,\n divider: bool.default(true),\n class: string,\n};\n\nconst panelSchema = {\n id: string,\n as: oneOf(PANEL_AS_VALUES, 'section'),\n size: oneOf(PANEL_SIZES, 'fill'),\n resize: oneOf(PANEL_RESIZE_EDGES, 'none'),\n collapsible: bool,\n defaultCollapsed: bool,\n class: string,\n};\n\nconst panelToggleSchema = {\n target: string,\n action: oneOf(PANEL_TOGGLE_ACTIONS, 'toggle'),\n icon: string.default('menu'),\n label: string.default('Expand'),\n class: string,\n};\n\ntype PanelsOrientation = typeof PANELS_ORIENTATIONS[number];\ntype PanelAs = typeof PANEL_AS_VALUES[number];\ntype PanelSize = typeof PANEL_SIZES[number];\ntype PanelResizeEdge = typeof PANEL_RESIZE_EDGES[number];\ntype PanelToggleAction = typeof PANEL_TOGGLE_ACTIONS[number];\ntype PanelsProps = SchemaToProps<typeof panelsSchema>;\ntype PanelProps = SchemaToProps<typeof panelSchema>;\ntype PanelToggleProps = SchemaToProps<typeof panelToggleSchema>;\n\nexport {\n PANEL_AS_VALUES,\n PANEL_RESIZE_EDGES,\n PANEL_SIZES,\n PANEL_TOGGLE_ACTIONS,\n PANELS_ORIENTATIONS,\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n};\nexport type {\n PanelAs,\n PanelProps,\n PanelResizeEdge,\n PanelSize,\n PanelToggleAction,\n PanelToggleProps,\n PanelsOrientation,\n PanelsProps,\n};\n","import {createMachine, type Machine, type MachineEventObject, type MachineScope} from '../../runtime/state-machine';\nimport {defineHook, type TransitionHookDefinition} from '../../runtime/transition-coordinator';\nimport type {PanelsProps} from './contract';\n\ntype PanelsContext = {\n collection: {\n ids: string[];\n collapsibleIds: string[];\n sizableIds: string[];\n resizableIds: string[];\n };\n layout: {\n collapsedIds: string[];\n committedSizes: Record<string, number>;\n };\n authored: {collapsedIds: string[]};\n change: {\n openingIds: string[];\n closingIds: string[];\n };\n resize: {\n activeId: string;\n initialSize: number | null;\n previewSize: number | null;\n };\n sizing: {\n changes: PanelSizingTransitionData[];\n };\n};\n\ntype PanelTransitionData = {panelId: string};\ntype PanelSizingTransitionData = {panelId: string; from: number; to: number; reset?: boolean};\ntype PanelsPersistTransitionData = {\n groupId: string;\n collapsed: string[];\n sizes: Record<string, number>;\n};\n\ntype PanelsMachineEffects = {\n prepareChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishChange(scope: MachineScope<PanelsContext, PanelsProps>): void;\n sync(scope: MachineScope<PanelsContext, PanelsProps>): void;\n beginResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n previewResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n commitResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n cancelResize(scope: MachineScope<PanelsContext, PanelsProps>): void;\n prepareSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n finishSizing(scope: MachineScope<PanelsContext, PanelsProps>): void;\n persist(scope: MachineScope<PanelsContext, PanelsProps>): void;\n};\n\ntype CreatePanelsMachineOptions = {\n props: PanelsProps;\n context: PanelsContext;\n effects: PanelsMachineEffects;\n};\n\nconst openingHook = defineHook({\n name: 'opening',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.openingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'opening'>);\n\nconst closingHook = defineHook({\n name: 'closing',\n state: 'changing',\n projectEach: (snapshot) => snapshot.context.change.closingIds.map((panelId) => ({panelId})),\n onDone: 'CHANGE_DONE',\n onError: 'CHANGE_ERROR',\n sends: {\n expand: (panelId: string) => ({type: 'EXPAND', panelId}),\n collapse: (panelId: string) => ({type: 'COLLAPSE', panelId}),\n toggle: (panelId: string) => ({type: 'TOGGLE', panelId}),\n },\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelTransitionData, 'closing'>);\n\nconst sizingHook = defineHook({\n name: 'sizing',\n state: 'sizing',\n projectEach: (snapshot) => snapshot.context.sizing.changes,\n onDone: 'SIZE_DONE',\n onError: 'SIZE_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelSizingTransitionData, 'sizing'>);\n\nconst persistingHook = defineHook({\n name: 'persisting',\n state: 'persisting',\n project: (snapshot) => ({\n groupId: snapshot.props.id,\n collapsed: [...snapshot.context.layout.collapsedIds],\n sizes: {...snapshot.context.layout.committedSizes},\n }),\n onDone: 'PERSIST_DONE',\n onError: 'PERSIST_ERROR',\n} satisfies TransitionHookDefinition<PanelsContext, PanelsProps, PanelsPersistTransitionData, 'persisting'>);\n\nconst panelsHooks = [openingHook, closingHook, sizingHook, persistingHook] as const;\n\nconst strings = (value: unknown): string[] => Array.isArray(value)\n ? value.filter((item): item is string => typeof item === 'string')\n : [];\nconst panelId = (event: MachineEventObject): string => typeof event.panelId === 'string' ? event.panelId : '';\nconst finiteSize = (value: unknown): number | null => typeof value === 'number' && Number.isFinite(value) ? value : null;\nconst sizingChanges = (event: MachineEventObject): PanelSizingTransitionData[] => {\n const candidates = Array.isArray(event.changes) ? event.changes : [event];\n return candidates.flatMap((candidate) => {\n if (typeof candidate !== 'object' || candidate === null) return [];\n const change = candidate as Record<string, unknown>;\n const id = typeof change.panelId === 'string' ? change.panelId : '';\n const from = finiteSize(change.from);\n const to = finiteSize(change.to);\n const reset = change.reset === true;\n return id && from !== null && to !== null && (from !== to || reset)\n ? [{panelId: id, from, to, ...(reset ? {reset: true} : {})}]\n : [];\n });\n};\nconst propsFrom = (event: MachineEventObject, fallback: PanelsProps): PanelsProps => (\n typeof event.props === 'object' && event.props !== null ? event.props as PanelsProps : fallback\n);\nconst sameStrings = (left: readonly string[], right: readonly string[]): boolean => (\n left.length === right.length && left.every((value, index) => value === right[index])\n);\n\nconst requestedCollapsed = (scope: MachineScope<PanelsContext, PanelsProps>): string[] => {\n const id = panelId(scope.event);\n const current = scope.context.layout.collapsedIds;\n switch (scope.event.type) {\n case 'COLLAPSE':\n return scope.context.collection.collapsibleIds.includes(id) && !current.includes(id)\n ? scope.context.collection.ids.filter((item) => current.includes(item) || item === id)\n : current;\n case 'EXPAND':\n return current.filter((item) => item !== id);\n case 'TOGGLE':\n if (!scope.context.collection.collapsibleIds.includes(id)) return current;\n return current.includes(id)\n ? current.filter((item) => item !== id)\n : scope.context.collection.ids.filter((item) => current.includes(item) || item === id);\n default:\n return current;\n }\n};\n\nconst changeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n return scope.context.collection.ids.includes(id)\n && !sameStrings(scope.context.layout.collapsedIds, requestedCollapsed(scope));\n};\n\nconst resizeAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const id = panelId(scope.event);\n return scope.context.collection.resizableIds.includes(id)\n && !scope.context.layout.collapsedIds.includes(id)\n && finiteSize(scope.event.size) !== null;\n};\n\nconst sizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n scope.context.collection.sizableIds.includes(id)\n && !scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenSizingAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const changes = sizingChanges(scope.event);\n return changes.length > 0 && changes.every(({panelId: id}) => (\n scope.context.collection.sizableIds.includes(id)\n && scope.context.layout.collapsedIds.includes(id)\n ));\n};\n\nconst hiddenResetAllowed = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const ids = strings(scope.event.ids);\n return ids.length > 0 && ids.every((id) => (\n scope.context.collection.sizableIds.includes(id)\n && scope.context.layout.collapsedIds.includes(id)\n && Object.hasOwn(scope.context.layout.committedSizes, id)\n ));\n};\n\nconst applySizing = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n const committedSizes = {...scope.context.layout.committedSizes};\n changes.forEach(({panelId: id, to, reset}) => {\n if (reset) delete committedSizes[id];\n else committedSizes[id] = to;\n });\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes,\n },\n sizing: {changes},\n }};\n};\n\nconst commitHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const changes = sizingChanges(scope.event);\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: {\n ...scope.context.layout.committedSizes,\n ...Object.fromEntries(changes.map(({panelId: id, to}) => [id, to])),\n },\n },\n }};\n};\n\nconst resetHiddenSizes = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const committedSizes = {...scope.context.layout.committedSizes};\n strings(scope.event.ids).forEach((id) => delete committedSizes[id]);\n return {context: {\n ...scope.context,\n layout: {...scope.context.layout, committedSizes},\n }};\n};\n\nconst applyChange = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const collapsedIds = requestedCollapsed(scope);\n const previous = scope.context.layout.collapsedIds;\n return {context: {\n ...scope.context,\n layout: {...scope.context.layout, collapsedIds},\n change: {\n openingIds: previous.filter((id) => !collapsedIds.includes(id)),\n closingIds: collapsedIds.filter((id) => !previous.includes(id)),\n },\n }};\n};\n\nconst reconcile = (scope: MachineScope<PanelsContext, PanelsProps>) => {\n const ids = strings(scope.event.ids);\n const collapsibleIds = strings(scope.event.collapsibleIds).filter((id) => ids.includes(id));\n const sizableIds = strings(scope.event.sizableIds).filter((id) => ids.includes(id));\n const resizableIds = strings(scope.event.resizableIds).filter((id) => ids.includes(id));\n const authoredCollapsedIds = strings(scope.event.authoredCollapsedIds).filter((id) => collapsibleIds.includes(id));\n const known = new Set(scope.context.collection.ids);\n const collapsedIds = ids.filter((id) => (\n scope.context.layout.collapsedIds.includes(id) || (!known.has(id) && authoredCollapsedIds.includes(id))\n ) && collapsibleIds.includes(id));\n const committedSizes = Object.fromEntries(Object.entries(scope.context.layout.committedSizes).filter(([id]) => (\n ids.includes(id) && sizableIds.includes(id)\n )));\n const activeExists = ids.includes(scope.context.resize.activeId) && resizableIds.includes(scope.context.resize.activeId);\n return {context: {\n ...scope.context,\n collection: {ids, collapsibleIds, sizableIds, resizableIds},\n layout: {collapsedIds, committedSizes},\n authored: {collapsedIds: authoredCollapsedIds},\n resize: activeExists\n ? scope.context.resize\n : {activeId: '', initialSize: null, previewSize: null},\n }};\n};\n\nconst activeRemoved = (scope: MachineScope<PanelsContext, PanelsProps>): boolean => {\n const ids = strings(scope.event.ids);\n const resizableIds = strings(scope.event.resizableIds);\n return !ids.includes(scope.context.resize.activeId) || !resizableIds.includes(scope.context.resize.activeId);\n};\n\nconst createPanelsMachine = ({\n props,\n context,\n effects,\n}: CreatePanelsMachineOptions): Machine<PanelsContext, PanelsProps> => createMachine<PanelsContext, PanelsProps>({\n initial: 'stable',\n on: {\n DOM_INVALIDATED: {effects: 'sync'},\n },\n states: {\n stable: {\n tags: ['stable'],\n on: {\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESTORE_HIDDEN_SIZES: {guard: hiddenSizingAllowed, reduce: commitHiddenSizes},\n RESET_HIDDEN_SIZES: {\n target: 'persisting',\n guard: hiddenResetAllowed,\n reduce: resetHiddenSizes,\n effects: ['sync', 'persist'],\n },\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n changing: {\n tags: ['changing', 'transitioning'],\n on: {\n CHANGE_DONE: {target: 'persisting', effects: ['finishChange', 'persist']},\n CHANGE_ERROR: {target: 'persisting', effects: ['finishChange', 'persist']},\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n sizing: {\n tags: ['sizing', 'transitioning'],\n on: {\n SIZE_DONE: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE_ERROR: {target: 'persisting', effects: ['finishSizing', 'persist']},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n RESIZE_START: {target: 'resizing', guard: resizeAllowed, reduce: 'startResize', effects: 'beginResize'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n resizing: {\n tags: ['resizing'],\n on: {\n RESIZE: {guard: 'activeResize', reduce: 'previewResize', effects: 'previewResize'},\n RESIZE_END: {target: 'persisting', guard: 'activeResize', reduce: 'commitResize', effects: ['commitResize', 'persist']},\n RESIZE_CANCEL: {target: 'stable', reduce: 'clearResize', effects: 'cancelResize'},\n PANELS_CHANGED: [\n {target: 'stable', guard: activeRemoved, reduce: reconcile, effects: ['cancelResize', 'sync']},\n {reduce: reconcile, effects: 'sync'},\n ],\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n persisting: {\n tags: ['persisting'],\n on: {\n PERSIST_DONE: 'stable',\n PERSIST_ERROR: 'stable',\n COLLAPSE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n EXPAND: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n TOGGLE: {target: 'changing', guard: changeAllowed, reduce: applyChange, effects: 'prepareChange'},\n SIZE: {target: 'sizing', guard: sizingAllowed, reduce: applySizing, effects: 'prepareSizing'},\n PANELS_CHANGED: {reduce: reconcile, effects: 'sync'},\n PROPS_CHANGED: {reduce: 'replaceProps', effects: 'sync'},\n },\n },\n },\n}, {\n props,\n context,\n reducers: {\n replaceProps: (scope) => ({props: propsFrom(scope.event, scope.props)}),\n startResize: (scope) => {\n const size = finiteSize(scope.event.size);\n return {context: {\n ...scope.context,\n resize: {activeId: panelId(scope.event), initialSize: size, previewSize: size},\n }};\n },\n previewResize: (scope) => ({context: {\n ...scope.context,\n resize: {...scope.context.resize, previewSize: finiteSize(scope.event.size)},\n }}),\n commitResize: (scope) => {\n const id = panelId(scope.event);\n const size = finiteSize(scope.event.size);\n if (size === null) return;\n return {context: {\n ...scope.context,\n layout: {\n ...scope.context.layout,\n committedSizes: {...scope.context.layout.committedSizes, [id]: size},\n },\n resize: {activeId: '', initialSize: null, previewSize: null},\n }};\n },\n clearResize: (scope) => ({context: {\n ...scope.context,\n resize: {activeId: '', initialSize: null, previewSize: null},\n }}),\n },\n guards: {\n activeResize: (scope) => panelId(scope.event) === scope.context.resize.activeId\n && finiteSize(scope.event.size) !== null,\n },\n effects: {\n prepareChange: effects.prepareChange,\n finishChange: effects.finishChange,\n sync: effects.sync,\n beginResize: effects.beginResize,\n previewResize: effects.previewResize,\n commitResize: effects.commitResize,\n cancelResize: effects.cancelResize,\n prepareSizing: effects.prepareSizing,\n finishSizing: effects.finishSizing,\n persist: effects.persist,\n },\n});\n\nexport {createPanelsMachine, panelsHooks};\nexport type {\n CreatePanelsMachineOptions,\n PanelsContext,\n PanelsMachineEffects,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelTransitionData,\n};\n","import {defineStyles} from '../../runtime';\n\nconst panelsStyles = defineStyles({definition: {\n component: 'ui.panels',\n parts: {\n root: {\n base: 'relative flex h-full min-h-0 w-full min-w-0',\n variants: {\n orientation: {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n },\n },\n defaults: {orientation: 'horizontal'},\n },\n panel: {\n base: 'relative min-w-0 overflow-hidden',\n variants: {\n orientation: {\n horizontal: 'h-full',\n vertical: 'w-full',\n },\n divider: {\n true: '',\n false: '',\n },\n resize: {\n none: '',\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', divider: true, resize: 'none'},\n },\n expanded: {base: 'h-full min-h-0 w-full min-w-0'},\n collapsed: {base: 'flex h-full min-h-0 w-full min-w-0 items-center justify-center overflow-hidden'},\n resizeHandle: {\n base: [\n 'absolute z-20 touch-none border-transparent outline-none',\n 'hover:border-intent-neutral-edge-hover focus-visible:ui-focus-ring-inset',\n 'data-resizing:border-intent-neutral-edge-strong',\n ],\n variants: {\n orientation: {\n horizontal: 'inset-y-0 w-panel-resize-handle cursor-col-resize',\n vertical: 'inset-x-0 h-panel-resize-handle cursor-row-resize',\n },\n edge: {\n start: '',\n end: '',\n },\n },\n defaults: {orientation: 'horizontal', edge: 'end'},\n },\n toggle: {base: 'inline-flex size-control-md items-center justify-center outline-none focus-visible:ui-focus-ring-inset'},\n toggleIcon: {base: 'size-icon-md shrink-0'},\n },\n}});\n\nexport {panelsStyles};\n","import type Alpine from 'alpinejs';\n\nimport {\n type AlpineMachine,\n createAlpineMachine,\n createResizable,\n decodeProps,\n defineAlpineData,\n focusableElements,\n isRtl,\n mergeBindings,\n observeSemanticChanges,\n resolveStyle,\n type BindingObject,\n type CleanupStack,\n type ResizeDirection,\n type ResizeEvent,\n type TransitionForHook,\n type TrellisAlpineComponent,\n} from '@client/runtime';\nimport {animateSize, type MotionHandle, type MotionTransitionSubject} from '@client/motion';\nimport {noopHandle} from '@client/motion/animate';\nimport {compositionBreakpointPixels} from '@client/runtime/composition-breakpoint';\nimport {addListener, asBool, dispatch, setPresence} from '@client/utils';\nimport {\n panelSchema,\n panelToggleSchema,\n panelsSchema,\n type PanelProps,\n type PanelResizeEdge,\n type PanelToggleAction,\n type PanelToggleProps,\n type PanelsOrientation,\n type PanelsProps,\n} from './contract';\nimport {\n createPanelsMachine,\n panelsHooks,\n type PanelsContext,\n type PanelsPersistTransitionData,\n type PanelSizingTransitionData,\n type PanelTransitionData,\n} from './machine';\nimport {panelsStyles} from './styles';\n\ntype PanelsTransitionName = (typeof panelsHooks)[number]['name'];\ntype PanelsTransition<TName extends PanelsTransitionName = PanelsTransitionName> = TransitionForHook<\n Extract<(typeof panelsHooks)[number], {name: TName}>,\n HTMLElement\n>;\n\ntype PanelRecord = {\n panel: HTMLElement;\n expanded: HTMLElement;\n collapsed: HTMLElement | null;\n handle: HTMLElement | null;\n props: PanelProps;\n};\n\ntype PanelCollectionState = {\n ids: string[];\n collapsibleIds: string[];\n sizableIds: string[];\n resizableIds: string[];\n authoredCollapsedIds: string[];\n};\n\ntype PanelEventDetail = {\n panelId?: string;\n groupId?: string;\n size?: number;\n action?: PanelToggleAction;\n trigger?: HTMLElement | null;\n __panelsNotification?: boolean;\n};\n\ntype PanelTransitionGeometry = {from: number; to: number};\ntype PanelsResponsiveMode = 'stacked' | 'wide';\ntype PanelMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelTransitionData;\n}>;\ntype PanelSizingMotionTransition = MotionTransitionSubject & Readonly<{\n data: PanelSizingTransitionData;\n}>;\n\ntype PanelsController = {\n readonly id: string;\n hasPanel(panelId: string): boolean;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n resize(panelId: string, size: number): void;\n reset(panelId?: string): void;\n syncToggles(): void;\n};\n\n/** Public Alpine API for `ui.panels`. @public */\ninterface UiPanelsApi {\n /** Stable group id used by explicit controls, named events, and persistence. */\n readonly id: string;\n /** Current main axis along which direct panels negotiate space. */\n readonly orientation: 'horizontal' | 'vertical';\n /** Stable ids of panels whose collapsed representation is active. */\n readonly collapsed: readonly string[];\n /** User-committed pixel measures keyed by stable panel id. */\n readonly sizes: Readonly<Record<string, number>>;\n /** Returns whether a named panel is currently collapsed. */\n isCollapsed(id: string): boolean;\n /** Collapses a named collapsible panel. */\n collapse(id: string): void;\n /** Expands a named collapsed panel. */\n expand(id: string): void;\n /** Reverses the collapsed state of a named collapsible panel. */\n toggle(id: string): void;\n /** Moves an expanded bounded panel to a clamped pixel size through the sizing transition. */\n resize(id: string, size: number): void;\n /** Restores one panel or the whole group to its authored layout. */\n reset(id?: string): void;\n}\n\ntype PanelsData = AlpineMachine<PanelsContext, PanelsProps, typeof panelsHooks> & UiPanelsApi & {\n readonly root: BindingObject;\n init(): void;\n destroy(): void;\n perform(action: PanelToggleAction, panelId: string, trigger?: HTMLElement | null): void;\n syncToggles(): void;\n hasPanel(panelId: string): boolean;\n transitionPanel(transition: PanelMotionTransition): MotionHandle;\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle;\n};\n\nconst controllers = new Set<PanelsController>();\n\nconst eventDetail = (event: Event): PanelEventDetail => (\n event instanceof CustomEvent && event.detail && typeof event.detail === 'object'\n ? event.detail as PanelEventDetail\n : {}\n);\n\nconst registerDocumentListeners = (() => {\n let registered = false;\n return (): void => {\n if (registered || typeof document === 'undefined') return;\n const route = (action: PanelToggleAction) => (event: Event): void => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.perform(detail.action ?? action, detail.panelId!, detail.trigger);\n });\n };\n document.addEventListener('ui:panel-collapse', route('collapse'));\n document.addEventListener('ui:panel-expand', route('expand'));\n document.addEventListener('ui:panel-toggle', route('toggle'));\n document.addEventListener('ui:panel-size', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification || !detail.panelId || !Number.isFinite(detail.size)) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (!controller.hasPanel(detail.panelId!)) return;\n controller.resize(detail.panelId!, detail.size!);\n });\n });\n document.addEventListener('ui:panels-reset', (event) => {\n const detail = eventDetail(event);\n if (detail.__panelsNotification) return;\n controllers.forEach((controller) => {\n if (detail.groupId && detail.groupId !== controller.id) return;\n if (detail.panelId && !controller.hasPanel(detail.panelId)) return;\n controller.reset(detail.panelId);\n });\n });\n registered = true;\n };\n})();\n\nconst storageKey = (id: string): string => `trellis-ui:panels:${id}:v1`;\nconst numericRecord = (value: unknown): Record<string, number> => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) return {};\n return Object.fromEntries(Object.entries(value).filter((entry): entry is [string, number] => (\n typeof entry[1] === 'number' && Number.isFinite(entry[1])\n )));\n};\n\nconst UiPanels = (): TrellisAlpineComponent<PanelsData> => {\n let rootEl: (HTMLElement & Alpine.ElementWithXAttributes) | null = null;\n let disconnectObserver: (() => void) | null = null;\n let resizeObserver: ResizeObserver | null = null;\n let responsiveMode: PanelsResponsiveMode = 'wide';\n let cleanup: CleanupStack = [];\n const deferredTimers = new Set<number>();\n const restoreFrames = new Set<number>();\n const resizeCleanups = new Map<HTMLElement, () => void>();\n const transitionGeometry = new Map<string, PanelTransitionGeometry>();\n const rememberedFocus = new Map<string, HTMLElement>();\n const activeTriggers = new Map<string, HTMLElement>();\n\n const root = (): HTMLElement & Alpine.ElementWithXAttributes => {\n if (!rootEl) throw new Error('Panels has not been initialized.');\n return rootEl;\n };\n const owns = (element: Element): boolean => element.closest('[data-ui-panels]') === root();\n const records = (): PanelRecord[] => Array.from(root().children).flatMap((child) => {\n if (!(child instanceof HTMLElement) || !child.hasAttribute('data-ui-panel')) return [];\n const expanded = child.querySelector<HTMLElement>(':scope > [data-ui-panel-expanded]');\n if (!expanded || !owns(expanded)) return [];\n return [{\n panel: child,\n expanded,\n collapsed: child.querySelector<HTMLElement>(':scope > [data-ui-panel-collapsed]'),\n handle: child.querySelector<HTMLElement>(':scope > [data-ui-panel-resize-handle]'),\n props: decodeProps({el: child, schema: panelSchema}),\n }];\n });\n const recordFor = (id: string): PanelRecord | null => records().find((record) => record.props.id === id) ?? null;\n const context = (): Readonly<PanelsContext> => bridge.getCommittedSnapshot().context;\n const currentProps = (): Readonly<PanelsProps> => bridge.getCommittedSnapshot().props;\n const isCollapsed = (id: string): boolean => context().layout.collapsedIds.includes(id);\n const isResponsiveStacked = (): boolean => (\n currentProps().orientation === 'horizontal' && responsiveMode === 'stacked'\n );\n const effectiveOrientation = (): PanelsOrientation => (\n isResponsiveStacked() ? 'vertical' : currentProps().orientation\n );\n const renderedOrientation = (): PanelsOrientation => root().dataset.orientation === 'vertical' ? 'vertical' : 'horizontal';\n const mainSize = (element: Element): number => {\n const rect = element.getBoundingClientRect();\n return renderedOrientation() === 'horizontal' ? rect.width : rect.height;\n };\n\n const collectionState = (): PanelCollectionState => {\n const items = records();\n const ids = items.map(({props}) => props.id);\n if (ids.some((id) => !id)) throw new Error('Every Panel requires a stable id.');\n if (new Set(ids).size !== ids.length) throw new Error('Panel ids must be unique within a Panels group.');\n if (items.length > 0 && !items.some(({props}) => props.size === 'fill')) {\n throw new Error('A Panels group requires at least one size=\"fill\" Panel.');\n }\n if (items.some(({props}) => props.size === 'fill' && props.resize !== 'none')) {\n throw new Error('A size=\"fill\" Panel cannot own a resize handle.');\n }\n return {\n ids: items.map(({props}) => props.id).filter(Boolean),\n collapsibleIds: items.filter(({props}) => props.id && props.collapsible).map(({props}) => props.id),\n sizableIds: items.filter(({props}) => props.id && props.size !== 'fill').map(({props}) => props.id),\n resizableIds: items.filter(({props}) => (\n props.id && props.size !== 'fill' && props.resize !== 'none'\n )).map(({props}) => props.id),\n authoredCollapsedIds: items.filter(({props}) => (\n props.id && props.collapsible && props.defaultCollapsed\n )).map(({props}) => props.id),\n };\n };\n\n const cssLength = (token: string): number => {\n const probe = document.createElement('div');\n probe.style.cssText = 'position:absolute;visibility:hidden;pointer-events:none;inset:0 auto auto 0;';\n if (renderedOrientation() === 'horizontal') probe.style.width = `var(${token})`;\n else probe.style.height = `var(${token})`;\n root().append(probe);\n const value = mainSize(probe);\n probe.remove();\n return value;\n };\n\n const boundsFor = (record: PanelRecord): {minimum: number; maximum: number} => {\n if (record.props.size === 'fill') return {minimum: 0, maximum: Number.POSITIVE_INFINITY};\n return {\n minimum: cssLength(`--spacing-panel-${record.props.size}-min`),\n maximum: cssLength(`--spacing-panel-${record.props.size}-max`),\n };\n };\n\n const clampPanelSize = (record: PanelRecord, value: number): number => {\n const {minimum, maximum} = boundsFor(record);\n return Math.min(maximum, Math.max(minimum, value));\n };\n\n const initialContext = (): PanelsContext => {\n const collection = collectionState();\n return {\n collection: {\n ids: collection.ids,\n collapsibleIds: collection.collapsibleIds,\n sizableIds: collection.sizableIds,\n resizableIds: collection.resizableIds,\n },\n layout: {collapsedIds: [...collection.authoredCollapsedIds], committedSizes: {}},\n authored: {collapsedIds: collection.authoredCollapsedIds},\n change: {openingIds: [], closingIds: []},\n resize: {activeId: '', initialSize: null, previewSize: null},\n sizing: {changes: []},\n };\n };\n\n const setMainConstraints = (element: HTMLElement, minimum: string, maximum: string): void => {\n if (renderedOrientation() === 'horizontal') {\n element.style.minWidth = minimum;\n element.style.maxWidth = maximum;\n element.style.minHeight = '';\n element.style.maxHeight = '';\n } else {\n element.style.minHeight = minimum;\n element.style.maxHeight = maximum;\n element.style.minWidth = '';\n element.style.maxWidth = '';\n }\n };\n\n const clearGeometry = (element: HTMLElement): void => {\n element.style.flex = '';\n element.style.minWidth = '';\n element.style.maxWidth = '';\n element.style.minHeight = '';\n element.style.maxHeight = '';\n };\n\n const applyGeometry = (record: PanelRecord, transitionSize?: number): void => {\n if (isResponsiveStacked()) {\n clearGeometry(record.panel);\n return;\n }\n if (transitionSize !== undefined) {\n record.panel.style.flex = `0 0 ${transitionSize}px`;\n setMainConstraints(record.panel, '0px', 'none');\n return;\n }\n if (isCollapsed(record.props.id)) {\n if (context().authored.collapsedIds.includes(record.props.id)) {\n clearGeometry(record.panel);\n return;\n }\n const collapsedSize = record.collapsed ? 'var(--spacing-panel-collapsed)' : '0px';\n record.panel.style.flex = `0 0 ${collapsedSize}`;\n setMainConstraints(record.panel, collapsedSize, collapsedSize);\n return;\n }\n if (record.props.size === 'fill') {\n clearGeometry(record.panel);\n return;\n }\n const committed = context().resize.activeId === record.props.id\n ? context().resize.previewSize\n : context().layout.committedSizes[record.props.id];\n if (committed === undefined || committed === null) {\n clearGeometry(record.panel);\n return;\n }\n const basis = `${clampPanelSize(record, committed)}px`;\n record.panel.style.flex = `0 1 ${basis}`;\n setMainConstraints(\n record.panel,\n `var(--spacing-panel-${record.props.size}-min)`,\n `var(--spacing-panel-${record.props.size}-max)`,\n );\n };\n\n const setInert = (element: HTMLElement, inert: boolean): void => {\n element.toggleAttribute('inert', inert);\n element.setAttribute('aria-hidden', inert ? 'true' : 'false');\n };\n\n const syncPanel = (record: PanelRecord): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n const collapsed = isCollapsed(record.props.id);\n const opening = bridge.hasTag('changing') && context().change.openingIds.includes(record.props.id);\n const closing = bridge.hasTag('changing') && context().change.closingIds.includes(record.props.id);\n const finalCollapsed = collapsed && !closing;\n const showExpanded = !finalCollapsed;\n const showCollapsed = collapsed && !closing && !opening && record.collapsed !== null;\n\n record.panel.dataset.state = collapsed ? 'collapsed' : 'expanded';\n record.panel.dataset.orientation = orientation;\n record.panel.dataset.size = record.props.size;\n record.panel.dataset.resize = record.props.resize;\n record.panel.className = resolveStyle({\n part: panelsStyles.parts.panel,\n props: {orientation, divider: props.divider, resize: record.props.resize},\n className: record.props.class,\n });\n setPresence({el: record.panel, attr: 'data-collapsible', present: record.props.collapsible});\n setPresence({el: record.panel, attr: 'data-resizing', present: context().resize.activeId === record.props.id});\n applyGeometry(record);\n\n record.expanded.hidden = !showExpanded;\n setInert(record.expanded, !showExpanded);\n if (record.collapsed) {\n record.collapsed.hidden = !showCollapsed;\n setInert(record.collapsed, !showCollapsed);\n }\n if (record.handle) {\n const disabled = isResponsiveStacked()\n || collapsed\n || record.props.size === 'fill'\n || record.props.resize === 'none';\n record.handle.dataset.orientation = orientation;\n record.handle.dataset.resizeEdge = record.props.resize;\n record.handle.setAttribute('aria-label', `Resize ${record.props.id} panel`);\n record.handle.toggleAttribute('data-resize-disabled', disabled);\n record.handle.hidden = isResponsiveStacked();\n record.handle.className = resolveStyle({\n part: panelsStyles.parts.resizeHandle,\n props: {orientation, edge: record.props.resize},\n className: record.handle.dataset.class ?? '',\n });\n }\n };\n\n const syncDividers = (items: PanelRecord[]): void => {\n items.forEach((record, index) => {\n const next = items[index + 1];\n const interactive = record.props.resize === 'end' || next?.props.resize === 'start';\n setPresence({\n el: record.panel,\n attr: 'data-divider',\n present: currentProps().divider && next !== undefined && !interactive,\n });\n });\n };\n\n const targetForToggle = (toggle: HTMLElement): {record: PanelRecord; controller: PanelsController} | null => {\n const explicit = toggle.dataset.target || '';\n if (!explicit) {\n const panel = toggle.closest<HTMLElement>('[data-ui-panel]');\n const group = panel?.closest<HTMLElement>('[data-ui-panels]');\n const controller = [...controllers].find((item) => item.id === group?.id);\n const record = panel && controller === component ? recordFor(panel.id) : null;\n return record && controller ? {record, controller} : null;\n }\n const groupId = toggle.dataset.groupId || toggle.closest<HTMLElement>('[data-ui-panels]')?.id;\n const candidates = [...controllers].filter((item) => !groupId || item.id === groupId);\n const controller = candidates.find((item) => item.hasPanel(explicit));\n const record = controller === component ? recordFor(explicit) : null;\n return record && controller ? {record, controller} : null;\n };\n\n const syncToggles = (): void => {\n document.querySelectorAll<HTMLElement>('[data-ui-panel-toggle]').forEach((toggle) => {\n const target = targetForToggle(toggle);\n if (!target || target.controller !== component) return;\n const collapsed = isCollapsed(target.record.props.id);\n toggle.dataset.target = target.record.props.id;\n toggle.dataset.groupId = currentProps().id;\n toggle.dataset.state = collapsed ? 'collapsed' : 'expanded';\n toggle.setAttribute('aria-controls', target.record.panel.id);\n toggle.setAttribute('aria-expanded', collapsed ? 'false' : 'true');\n toggle.toggleAttribute('disabled', !target.record.props.collapsible);\n });\n };\n\n const syncAll = (): void => {\n const props = currentProps();\n const orientation = effectiveOrientation();\n root().dataset.responsiveMode = responsiveMode;\n root().dataset.layoutOrientation = orientation;\n root().style.flexDirection = orientation === 'horizontal' ? 'row' : 'column';\n root().className = resolveStyle({\n part: panelsStyles.parts.root,\n props: {...props, orientation},\n className: props.class,\n });\n setPresence({el: root(), attr: 'data-resizing', present: bridge.hasTag('resizing')});\n setPresence({el: root(), attr: 'data-transitioning', present: bridge.hasTag('transitioning')});\n const items = records();\n items.forEach(syncPanel);\n syncDividers(items);\n syncToggles();\n };\n\n const focusExpanded = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.collapsed?.contains(active))) return;\n const remembered = rememberedFocus.get(record.props.id);\n if (remembered?.isConnected && record.expanded.contains(remembered)) remembered.focus({preventScroll: true});\n else {\n record.expanded.tabIndex = -1;\n record.expanded.focus({preventScroll: true});\n }\n };\n\n const focusCollapsed = (record: PanelRecord, force = false): void => {\n const active = document.activeElement;\n if (!force && (!(active instanceof HTMLElement) || !record.expanded.contains(active))) return;\n const collapsedTarget = record.collapsed ? focusableElements(record.collapsed)[0] : undefined;\n const external = activeTriggers.get(record.props.id);\n const fallback = external?.isConnected && !record.panel.contains(external) ? external : undefined;\n if (collapsedTarget) collapsedTarget.focus({preventScroll: true});\n else if (fallback) fallback.focus({preventScroll: true});\n else {\n root().tabIndex = -1;\n root().focus({preventScroll: true});\n }\n };\n\n const prepareChange = (): void => {\n const changed = [...context().change.openingIds, ...context().change.closingIds];\n const openingNeedsFocus = new Set(context().change.openingIds.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null\n && record.collapsed !== null\n && active instanceof HTMLElement\n && record.collapsed.contains(active);\n }));\n const from = new Map(changed.flatMap((id) => {\n const record = recordFor(id);\n if (!record) return [];\n if (context().change.closingIds.includes(id)) {\n const active = document.activeElement;\n if (active instanceof HTMLElement && record.expanded.contains(active)) rememberedFocus.set(id, active);\n }\n return [[id, mainSize(record.panel)] as const];\n }));\n syncAll();\n context().change.openingIds.forEach((id) => {\n const record = recordFor(id);\n if (record) focusExpanded(record, openingNeedsFocus.has(id));\n });\n changed.forEach((id) => {\n const record = recordFor(id);\n const start = from.get(id);\n if (!record || start === undefined) return;\n const target = mainSize(record.panel);\n transitionGeometry.set(id, {from: start, to: target});\n applyGeometry(record, start);\n });\n };\n\n const finishChange = (): void => {\n const opening = [...context().change.openingIds];\n const closing = [...context().change.closingIds];\n const closingNeedsFocus = new Set(closing.filter((id) => {\n const record = recordFor(id);\n const active = document.activeElement;\n return record !== null && active instanceof HTMLElement && record.expanded.contains(active);\n }));\n records().forEach((record) => applyGeometry(record));\n syncAll();\n closing.forEach((id) => {\n const record = recordFor(id);\n if (record) focusCollapsed(record, closingNeedsFocus.has(id));\n });\n opening.forEach((panelId) => emitPanelEvent('ui:panel-expand', panelId));\n closing.forEach((panelId) => emitPanelEvent('ui:panel-collapse', panelId));\n [...opening, ...closing].forEach((id) => transitionGeometry.delete(id));\n };\n\n const emitPanelEvent = (name: string, panelId: string, detail: Record<string, unknown> = {}): void => {\n dispatch({el: root(), name, detail: {\n groupId: currentProps().id,\n panelId,\n __panelsNotification: true,\n ...detail,\n }});\n };\n\n const persist = (): void => {\n const layout = context().layout;\n if (currentProps().persist) {\n try {\n localStorage.setItem(storageKey(currentProps().id), JSON.stringify({\n collapsed: layout.collapsedIds,\n sizes: layout.committedSizes,\n }));\n } catch {\n // Persistence is optional; layout state remains committed in memory.\n }\n }\n dispatch({el: root(), name: 'ui:panels-layout-change', detail: {\n groupId: currentProps().id,\n collapsed: [...layout.collapsedIds],\n sizes: {...layout.committedSizes},\n __panelsNotification: true,\n }});\n };\n\n const runWhenStable = (callback: () => void): void => {\n if (!rootEl) return;\n if (bridge.hasTag('stable')) {\n callback();\n return;\n }\n const timer = window.setTimeout(() => {\n deferredTimers.delete(timer);\n runWhenStable(callback);\n }, 16);\n deferredTimers.add(timer);\n };\n\n const reconcileCollapsedState = (\n ids: readonly string[],\n wantsCollapsed: (id: string) => boolean,\n ): void => {\n const next = ids.find((id) => wantsCollapsed(id) !== isCollapsed(id));\n if (!next) return;\n bridge.send({type: wantsCollapsed(next) ? 'COLLAPSE' : 'EXPAND', panelId: next});\n runWhenStable(() => reconcileCollapsedState(ids, wantsCollapsed));\n };\n\n const restorePersistedLayout = (): void => {\n if (!currentProps().persist) return;\n let stored: {collapsed?: unknown; sizes?: unknown};\n try {\n stored = JSON.parse(localStorage.getItem(storageKey(currentProps().id)) ?? 'null') as {\n collapsed?: unknown;\n sizes?: unknown;\n };\n } catch {\n return;\n }\n if (typeof stored !== 'object' || stored === null) return;\n\n const collection = collectionState();\n const desiredCollapsed = new Set(\n (Array.isArray(stored.collapsed) ? stored.collapsed : [])\n .filter((id): id is string => typeof id === 'string' && collection.collapsibleIds.includes(id)),\n );\n const desiredSizes = numericRecord(stored.sizes);\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(collection.collapsibleIds, (id) => desiredCollapsed.has(id));\n };\n\n const restoreSizes = (): void => {\n const changes = collection.sizableIds.flatMap((id): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n const storedSize = desiredSizes[id];\n if (!record || storedSize === undefined) return [];\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, storedSize);\n return Math.abs(from - to) < 0.5 ? [] : [{panelId: id, from, to}];\n });\n if (isResponsiveStacked()) {\n if (changes.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes});\n restoreCollapsedState();\n return;\n }\n const hidden = changes.filter(({panelId: id}) => isCollapsed(id));\n const visible = changes.filter(({panelId: id}) => !isCollapsed(id));\n if (hidden.length > 0) bridge.send({type: 'RESTORE_HIDDEN_SIZES', changes: hidden});\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const opening = collection.collapsibleIds.filter((id) => isCollapsed(id) && !desiredCollapsed.has(id));\n if (opening.length > 0) {\n reconcileCollapsedState(opening, () => false);\n runWhenStable(restoreSizes);\n } else restoreSizes();\n };\n\n const schedulePersistedRestore = (): void => {\n const first = requestAnimationFrame(() => {\n restoreFrames.delete(first);\n const second = requestAnimationFrame(() => {\n restoreFrames.delete(second);\n restorePersistedLayout();\n });\n restoreFrames.add(second);\n });\n restoreFrames.add(first);\n };\n\n const resetLayout = (panelId?: string): void => {\n const collection = collectionState();\n const targetIds = panelId ? collection.ids.filter((id) => id === panelId) : collection.ids;\n if (targetIds.length === 0) return;\n\n const restoreCollapsedState = (): void => {\n reconcileCollapsedState(\n targetIds.filter((id) => collection.collapsibleIds.includes(id)),\n (id) => context().authored.collapsedIds.includes(id),\n );\n };\n\n const sizedIds = targetIds.filter((id) => (\n collection.sizableIds.includes(id) && Object.hasOwn(context().layout.committedSizes, id)\n ));\n if (isResponsiveStacked()) {\n if (sizedIds.length > 0) {\n bridge.send({type: 'RESET_HIDDEN_SIZES', ids: sizedIds});\n runWhenStable(restoreCollapsedState);\n } else restoreCollapsedState();\n return;\n }\n const hiddenIds = sizedIds.filter(isCollapsed);\n if (hiddenIds.length > 0) bridge.send({type: 'RESET_HIDDEN_SIZES', ids: hiddenIds});\n\n const visible = sizedIds.filter((id) => !isCollapsed(id)).flatMap((id): PanelSizingTransitionData[] => {\n const record = recordFor(id);\n if (!record || record.props.size === 'fill') return [];\n return [{\n panelId: id,\n from: mainSize(record.panel),\n to: cssLength(`--spacing-panel-${record.props.size}`),\n reset: true,\n }];\n });\n if (visible.length > 0) {\n bridge.send({type: 'SIZE', changes: visible});\n runWhenStable(restoreCollapsedState);\n return;\n }\n restoreCollapsedState();\n };\n\n const prepareSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, from}) => {\n const record = recordFor(id);\n if (record) applyGeometry(record, from);\n });\n };\n\n const finishSizing = (): void => {\n context().sizing.changes.forEach(({panelId: id, to}) => {\n const record = recordFor(id);\n if (!record) return;\n applyGeometry(record);\n emitPanelEvent('ui:panel-resize-end', id, {size: to});\n });\n syncAll();\n };\n\n const resizeDirection = (edge: PanelResizeEdge): ResizeDirection => {\n if (effectiveOrientation() === 'vertical') return edge === 'start' ? 'negative' : 'positive';\n const rtl = isRtl({el: root()});\n return edge === 'start' ? rtl ? 'positive' : 'negative' : rtl ? 'negative' : 'positive';\n };\n\n const initializeResizeHandles = (): void => {\n const currentPanels = new Set(records().map(({panel}) => panel));\n resizeCleanups.forEach((dispose, panel) => {\n if (currentPanels.has(panel)) return;\n dispose();\n resizeCleanups.delete(panel);\n });\n records().forEach((record) => {\n if (resizeCleanups.has(record.panel) || !record.handle || record.props.size === 'fill' || record.props.resize === 'none') return;\n const bounds = boundsFor(record);\n const handleSize = cssLength('--spacing-panel-resize-handle');\n const coarseHandleSize = cssLength('--spacing-panel-resize-handle-coarse');\n resizeCleanups.set(record.panel, createResizable({\n element: record.panel,\n handle: record.handle,\n axis: effectiveOrientation() === 'horizontal' ? 'x' : 'y',\n direction: resizeDirection(record.props.resize),\n min: bounds.minimum,\n max: bounds.maximum,\n mode: 'onChange',\n hitArea: handleSize,\n coarseHitArea: coarseHandleSize,\n disabled: () => isResponsiveStacked() || isCollapsed(record.props.id),\n onStart: (event) => bridge.send({type: 'RESIZE_START', panelId: record.props.id, size: resizeValue(event)}),\n onResize: (event) => bridge.send({type: 'RESIZE', panelId: record.props.id, size: resizeValue(event)}),\n onEnd: (event) => bridge.send({type: 'RESIZE_END', panelId: record.props.id, size: resizeValue(event)}),\n }));\n });\n };\n\n const reinitializeResizeHandles = (): void => {\n resizeCleanups.forEach((dispose) => dispose());\n resizeCleanups.clear();\n initializeResizeHandles();\n };\n\n const resizeValue = (event: ResizeEvent): number => effectiveOrientation() === 'horizontal'\n ? event.previewWidth\n : event.previewHeight;\n\n const reconcileResponsiveMode = (width: number): void => {\n const next: PanelsResponsiveMode = currentProps().orientation === 'horizontal'\n && width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n if (next === responsiveMode) return;\n responsiveMode = next;\n syncAll();\n reinitializeResizeHandles();\n };\n\n const bridge = createAlpineMachine({\n schema: panelsSchema,\n hooks: panelsHooks,\n resolveTransitionElement: ({data}) => {\n const panelId = (data as PanelTransitionData | undefined)?.panelId;\n return panelId ? recordFor(panelId)?.panel ?? null : root();\n },\n createMachine: ({props}) => createPanelsMachine({\n props,\n context: initialContext(),\n effects: {\n prepareChange,\n finishChange,\n sync: () => {\n syncAll();\n reinitializeResizeHandles();\n },\n beginResize: () => {\n syncAll();\n },\n previewResize: () => {\n const id = context().resize.activeId;\n const record = recordFor(id);\n if (record) applyGeometry(record);\n const size = context().resize.previewSize;\n if (size !== null) emitPanelEvent('ui:panel-resize', id, {size});\n },\n commitResize: (scope) => {\n syncAll();\n const id = typeof scope.event.panelId === 'string' ? scope.event.panelId : '';\n const size = context().layout.committedSizes[id];\n if (id && size !== undefined) emitPanelEvent('ui:panel-resize-end', id, {size});\n },\n cancelResize: syncAll,\n prepareSizing,\n finishSizing,\n persist,\n },\n }),\n });\n\n const sendPanelsChanged = (): void => {\n const collection = collectionState();\n bridge.send({type: 'PANELS_CHANGED', ...collection});\n initializeResizeHandles();\n };\n\n const setupObserver = (): void => {\n disconnectObserver = observeSemanticChanges({\n targets: root(),\n read: collectionState,\n onChange: sendPanelsChanged,\n observer: {\n childList: true,\n subtree: true,\n attributes: true,\n attributeFilter: [\n 'id', 'data-size', 'data-resize', 'data-collapsible', 'data-default-collapsed',\n ],\n },\n });\n };\n\n let component!: TrellisAlpineComponent<PanelsData>;\n component = {\n ...bridge,\n get id() { return root().id || currentProps().id; },\n get orientation() { return effectiveOrientation(); },\n get collapsed() { return [...context().layout.collapsedIds]; },\n get sizes() { return {...context().layout.committedSizes}; },\n get root(): BindingObject {\n const props = this.snapshot.current?.props ?? currentProps();\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.root, props, className: props.class}),\n {'data-ui-panels': ''},\n ]});\n },\n init(): void {\n rootEl = this.$el;\n bridge.connect(this.$el, this.snapshot);\n root().id ||= currentProps().id;\n responsiveMode = currentProps().orientation === 'horizontal'\n && root().getBoundingClientRect().width < compositionBreakpointPixels(root(), 'sm')\n ? 'stacked'\n : 'wide';\n controllers.add(component);\n registerDocumentListeners();\n syncAll();\n initializeResizeHandles();\n resizeObserver = new ResizeObserver((entries) => {\n reconcileResponsiveMode(entries[0]?.contentRect.width ?? root().clientWidth);\n });\n resizeObserver.observe(root());\n setupObserver();\n if (currentProps().persist) schedulePersistedRestore();\n cleanup.push(addListener({target: root(), event: 'keydown', handler: () => syncToggles()}));\n },\n destroy(): void {\n controllers.delete(component);\n disconnectObserver?.();\n disconnectObserver = null;\n resizeObserver?.disconnect();\n resizeObserver = null;\n resizeCleanups.forEach((dispose) => dispose());\n resizeCleanups.clear();\n cleanup.forEach((dispose) => dispose());\n cleanup = [];\n deferredTimers.forEach((timer) => window.clearTimeout(timer));\n deferredTimers.clear();\n restoreFrames.forEach((frame) => cancelAnimationFrame(frame));\n restoreFrames.clear();\n bridge.disconnect();\n rootEl = null;\n },\n transitionPanel(transition: PanelMotionTransition): MotionHandle {\n const id = transition.data.panelId;\n const record = recordFor(id);\n const geometry = transitionGeometry.get(id);\n if (!record || !geometry || geometry.from === geometry.to) {\n if (record) applyGeometry(record, geometry?.to);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${geometry.from}px`, `${geometry.to}px`]},\n role: 'layout',\n cleanup: () => applyGeometry(record),\n });\n },\n transitionPanelSize(transition: PanelSizingMotionTransition): MotionHandle {\n const {panelId: id, from, to} = transition.data;\n const record = recordFor(id);\n if (!record || from === to) {\n if (record) applyGeometry(record);\n return noopHandle();\n }\n return animateSize(transition, {\n target: record.panel,\n keyframes: {flexBasis: [`${from}px`, `${to}px`]},\n role: 'layoutQuick',\n cleanup: () => applyGeometry(record),\n });\n },\n hasPanel(id: string): boolean { return recordFor(id) !== null; },\n isCollapsed,\n collapse(id: string): void { bridge.send({type: 'COLLAPSE', panelId: id}); },\n expand(id: string): void { bridge.send({type: 'EXPAND', panelId: id}); },\n toggle(id: string): void { bridge.send({type: 'TOGGLE', panelId: id}); },\n resize(id: string, size: number): void {\n const record = recordFor(id);\n if (\n isResponsiveStacked()\n || !record\n || record.props.size === 'fill'\n || isCollapsed(id)\n || !Number.isFinite(size)\n ) return;\n const from = mainSize(record.panel);\n const to = clampPanelSize(record, size);\n if (Math.abs(from - to) < 0.5) return;\n bridge.send({type: 'SIZE', panelId: id, from, to});\n },\n reset(id?: string): void { resetLayout(id); },\n perform(action: PanelToggleAction, id: string, trigger?: HTMLElement | null): void {\n if (trigger) activeTriggers.set(id, trigger);\n ({collapse: this.collapse, expand: this.expand, toggle: this.toggle})[action](id);\n },\n syncToggles,\n };\n\n return component;\n};\n\nconst UiPanelToggle = (): TrellisAlpineComponent<{\n props: PanelToggleProps;\n readonly root: BindingObject;\n trigger(event?: Event): void;\n}> => {\n let props = {} as PanelToggleProps;\n return {\n get props() { return props; },\n init() { props = decodeProps({el: this.$el, schema: panelToggleSchema}); },\n destroy() {},\n get root() {\n return mergeBindings({inputs: [\n resolveStyle({part: panelsStyles.parts.toggle, props: {}, className: props.class}),\n {\n 'data-ui-panel-toggle': '',\n ':data-target': () => props.target || undefined,\n ':data-action': () => props.action,\n '@click': (event: Event) => this.trigger(event),\n },\n ]});\n },\n trigger(event?: Event) {\n event?.preventDefault();\n const button = this.$el as HTMLElement;\n const closestPanel = button.closest<HTMLElement>('[data-ui-panel]');\n const closestGroup = closestPanel?.closest<HTMLElement>('[data-ui-panels]');\n const target = props.target || closestPanel?.id || '';\n if (!target) return;\n document.dispatchEvent(new CustomEvent('ui:panel-toggle', {detail: {\n panelId: target,\n groupId: closestGroup?.id,\n action: props.action,\n trigger: button,\n }}));\n },\n };\n};\n\nconst registerPanels = (AlpineInstance: Alpine.Alpine): void => {\n defineAlpineData('UiPanels', UiPanels)(AlpineInstance);\n defineAlpineData('UiPanelToggle', UiPanelToggle)(AlpineInstance);\n};\n\nexport {registerPanels, UiPanels, UiPanelToggle};\nexport type {\n PanelEventDetail,\n PanelsData,\n PanelsPersistTransitionData,\n PanelSizingTransitionData,\n PanelsTransition,\n UiPanelsApi,\n};\n","// Generated by scripts/generate_component_entries.mjs from packages/client/component-entries.json.\n// Do not edit by hand.\nimport type {Alpine as AlpineType} from 'alpinejs';\nimport {registerMotionCapability} from '../../capabilities/motion';\nimport {registerResizableCapability} from '../../capabilities/resizable';\nimport {registerPanels as registerComponent} from './index';\n\nconst registered = new WeakSet<AlpineType>();\n\nconst registerPanels = (AlpineInstance: AlpineType): void => {\n if (registered.has(AlpineInstance)) return;\n registered.add(AlpineInstance);\n registerMotionCapability(AlpineInstance);\n registerResizableCapability(AlpineInstance);\n registerComponent(AlpineInstance);\n};\n\nexport {registerPanels};\nexport default registerPanels;\nexport * from './index';\n"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{d as e,n as t}from"./motion-BlyJpJAE.js";import{t as n}from"./capability-motion-C8JwDQHB.js";import{f as r,l as i,n as a}from"./codecs-Cb1ns_47.js";import{i as o,n as s,r as c,s as l}from"./dom-qAeVl7dc.js";import{i as u,t as d}from"./alpine-machine-BS13dbK4.js";import{t as f}from"./alpine-data-CytyCyfk.js";import{t as ee}from"./collection-navigation-CfTZUJrL.js";import{t as p}from"./machine-Dqut4h89.js";import{n as m,t as h}from"./props-change-2xfsIAEN.js";import{t as g}from"./semantic-observer-BUswpsNx.js";import{A as _,P as v}from"./common-Dfj6NCjU.js";var y=[`manual`,`automatic`],b=v;[...b];var x=[`auto`,..._],S={id:r.default(`ui-tabs`),animate:a,defaultValue:r,value:r,activation:i(y,`manual`),orientation:i(b,`horizontal`),gap:i(x,`auto`),loop:a.default(!0),panels:r,class:r},C=[u({name:`switching`,state:`switching`,project:e=>e.context.change,onDone:`SWITCH_DONE`,onError:`SWITCH_ERROR`,sends:{select:e=>({type:`SELECT`,value:e})}})],w=e=>typeof e==`string`?e:``,T=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],E=e=>!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`)),D=e=>m(e.event)?.props??e.props,O=e=>e.event.type===`ITEMS_CHANGED`?{values:T(e.event.values),disabledValues:T(e.event.disabledValues),panelIds:E(e.event.panelIds)}:e.context.collection,k=(e,t)=>e&&t.values.includes(e)&&!t.disabledValues.includes(e)?e:t.values.find(e=>!t.disabledValues.includes(e))??``,A=e=>{let t=O(e);if(e.event.type===`SELECT`){let n=w(e.event.value);return n&&t.values.includes(n)&&!t.disabledValues.includes(n)?n:e.context.selection.value}return e.event.type===`PROPS_CHANGED`&&h(e.event,`value`)?k(D(e).value,t):k(e.context.selection.value,t)},j=e=>e.context.selection.value!==A(e),M=(e,t)=>({target:e,guard:j,reduce:`applySwitch`,effects:t}),te=({props:e,context:t,effects:n})=>p({initial:`stable`,on:{DOM_INVALIDATED:{effects:`syncDom`}},states:{stable:{tags:[`stable`],on:{SELECT:M(`switching`,`prepareSwitch`),PROPS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}},switching:{tags:[`switching`,`transitioning`],on:{SWITCH_DONE:{target:`stable`,effects:`finishSwitch`},SWITCH_ERROR:{target:`stable`,effects:`finishSwitch`},SELECT:M(`switching`,`prepareSwitch`),PROPS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applySwitch:e=>{let t=O(e),n=A(e);return{props:D(e),context:{...e.context,selection:{value:n},change:{previousValue:e.context.selection.value,value:n,panelId:t.panelIds[n]??``},collection:t}}},reconcile:e=>({props:D(e),context:{...e.context,collection:O(e),selection:{value:A(e)}}})},effects:{prepareSwitch:n.prepareSwitch,finishSwitch:n.finishSwitch,syncDom:n.syncDom,syncProps:n.syncProps,syncItems:n.syncItems}}),ne=`ui-tabs`,N=e=>e?`active`:`inactive`,P=e=>e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)||`tab`,F=(e,t)=>`${e}-tab-${P(t)}`,I=(e,t)=>`${e}-panel-${P(t)}`,L=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,R=e=>Array.from(new Set(e)),z=()=>{let n=null,r=null,i=null,a=null,u=null,f,p=null,m=()=>{if(!n)throw Error(`Tabs has not been initialized.`);return n},h=()=>m().id||m().dataset.id||m().dataset.owner||ne,_=e=>e.closest(`[data-ui-tabs]`)===m(),v=e=>s({value:e}),y=()=>Array.from(m().querySelectorAll(`[data-ui-tabs-list]`)).find(_)??null,b=e=>{let t=(e??y())?.dataset.variant;return t===`subtle`||t===`segmented`||t===`pills`?t:`line`},x=e=>(e??y())?.dataset.size===`sm`?`sm`:`md`,w=e=>{let t=(e??y())?.dataset.orientation;return t===`vertical`||t===`horizontal`?t:M().orientation},T=()=>{let e=h(),t=t=>t.dataset.uiTabsOwner===e||t.dataset.owner===e,n=Array.from(m().querySelectorAll(`[data-ui-tabs-panel]`)).filter(_),r=M().panels;if(r){let e=document.querySelector(r);e&&n.push(...Array.from(e.querySelectorAll(`[data-ui-tabs-panel]`)).filter(t))}return n.push(...Array.from(document.querySelectorAll(`[data-ui-tabs-panel][data-ui-tabs-owner="${CSS.escape(e)}"]`)).filter(t)),R(n)},E=e=>T().find(t=>t.dataset.value===e)??null,D=()=>Array.from(m().querySelectorAll(`[data-ui-tabs-tab]`)).filter(_).map((e,t)=>L(e)?(e.dataset.value||=`tab-${t+1}`,{tab:e,value:e.dataset.value,disabled:v(e.dataset.disabled)||e.hasAttribute(`disabled`),panel:E(e.dataset.value)}):null).filter(e=>e!==null),O=e=>D().find(t=>t.value===e)??null,k=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-tabs-tab]`);return t&&_(t)?D().find(e=>e.tab===t)??null:null},A=()=>{let e=D();return{values:e.map(e=>e.value),disabledValues:e.filter(e=>e.disabled).map(e=>e.value),panelIds:Object.fromEntries(e.map(e=>[e.value,e.panel?.id||I(e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||h(),e.value)]))}},j=e=>{let t=A(),n=D().find(e=>v(e.tab.dataset.selected)||e.tab.getAttribute(`aria-selected`)===`true`),r=T().find(e=>v(e.dataset.selected)),i=e.value||e.defaultValue||n?.value||r?.dataset.value||``,a=i&&t.values.includes(i)&&!t.disabledValues.includes(i)?i:t.values.find(e=>!t.disabledValues.includes(e))??``;return{selection:{value:a},change:{previousValue:``,value:a,panelId:t.panelIds[a]??``},collection:t}},M=()=>p??J.getCommittedSnapshot().props,P=()=>J.getCommittedSnapshot().context,z=()=>P().selection.value,B=()=>{let e=D();return e.find(e=>document.activeElement===e.tab||e.tab.dataset.active===`true`)?.tab??e.find(e=>e.value===z())?.tab??null},V=e=>e.querySelector(`:scope > [data-ui-tabs-indicator]`),H=e=>{if(!(e instanceof HTMLElement))return null;let t=e.closest(`[data-ui-tabs-list]`),n=t?V(t):null;if(!t||!n)return null;n.hidden=!1;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.dataset.orientation===`vertical`,o=t.dataset.variant===`line`,s=o&&a?2:i.width,c=o&&!a?2:i.height,l=o?Number.parseFloat(getComputedStyle(t).getPropertyValue(`--border-width-edge-separator`))||1:0,u=o&&a?r.left-(s-l)/2:i.left,d=o&&!a?r.bottom-(c+l)/2:i.top;return{indicator:n,styles:{height:c,left:u-r.left,top:d-r.top,width:s}}},U=e=>{e.indicator.style.height=`${e.styles.height}px`,e.indicator.style.left=`${e.styles.left}px`,e.indicator.style.top=`${e.styles.top}px`,e.indicator.style.width=`${e.styles.width}px`},W=e=>{let t=V(e);if(!t)return;let n=D().find(t=>t.value===z()&&t.tab.closest(`[data-ui-tabs-list]`)===e);if(!n){t.hidden=!0,e.dataset.uiTabsReady=``;return}let r=H(n.tab);r&&U(r),e.dataset.uiTabsReady=``},G=()=>{let e=M();!m().id&&e.id&&(m().id=e.id),m().dataset.orientation=e.orientation,m().dataset.activation=e.activation,m().dataset.value=z(),l({el:m(),attr:`data-animate`,present:e.animate})},re=e=>{let t=w(e);e.setAttribute(`role`,`tablist`),e.dataset.orientation=t,t===`vertical`?e.setAttribute(`aria-orientation`,`vertical`):e.removeAttribute(`aria-orientation`)},ie=e=>{let t=e.value===z(),n=e.tab.closest(`[data-ui-tabs-list]`),r=w(n),i=b(n),a=x(n),o=e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||h(),s=e.tab.querySelector(`[data-ui-tabs-tab-selected-icon]`),c=N(t),u=B();e.tab.id||=F(o,e.value),e.tab.dataset.state=c,e.tab.dataset.orientation=r,e.tab.dataset.variant=i,e.tab.dataset.size=a,e.tab.setAttribute(`role`,`tab`),e.tab.setAttribute(`aria-selected`,t?`true`:`false`),e.tab.setAttribute(`aria-controls`,e.panel?.id||I(o,e.value)),e.tab.tabIndex=e.tab===u?0:-1,l({el:e.tab,attr:`data-selected`,present:t}),s&&(s.style.visibility=t?`visible`:`hidden`),l({el:e.tab,attr:`data-disabled`,present:e.disabled}),e.disabled?(e.tab.setAttribute(`aria-disabled`,`true`),e.tab.tabIndex=-1):e.tab.removeAttribute(`aria-disabled`),e.tab instanceof HTMLButtonElement&&(e.tab.disabled=e.disabled)},ae=e=>{let t=e.dataset.value||``,n=t===z(),r=e.dataset.uiTabsOwner||e.dataset.owner||h(),i=I(r,t);t&&!e.id&&(e.id=i),t&&!e.hasAttribute(`data-ui-key`)&&e.setAttribute(`data-ui-key`,e.id||i),e.dataset.state=N(n),e.dataset.orientation=M().orientation,e.setAttribute(`role`,`tabpanel`),e.setAttribute(`aria-labelledby`,F(r,t)),e.hasAttribute(`tabindex`)||(e.tabIndex=0),e.hidden=!n,l({el:e,attr:`data-selected`,present:n})},K=({indicator:e=!1}={})=>{G();let t=y();t&&re(t),D().forEach(ie),T().forEach(ae),e&&t&&W(t)},oe=()=>{c({el:m(),name:`ui:change`,detail:{value:z()}})},se=(e,t)=>{c({el:e,name:`ui:tabs:activate`,detail:{value:t,panelId:E(t)?.id??``}})},q=()=>{K({indicator:!0}),Z(),Q()},J=d({schema:S,hooks:C,resolveTransitionElement:({data:e})=>O(e.value)?.tab??null,createMachine:({props:e})=>{p=e;let t=j(e);return p=null,te({props:e,context:t,effects:{prepareSwitch:({event:e})=>{K(),e.type===`SELECT`&&oe()},finishSwitch:()=>K(),syncDom:q,syncProps:q,syncItems:()=>{K({indicator:!0}),Q()}}})}}),Y=()=>{if(!r)throw Error(`Tabs navigation has not been initialized.`);return r},X=(e,{tab:t,motion:n=!0}={})=>{let r=z();J.send({type:`SELECT`,value:e,motion:n}),z()!==r&&t&&se(t,z())},ce=e=>{let t=k(e.target);if(!t)return;if(t.disabled){e.preventDefault();return}let n=!(e instanceof MouseEvent)||e.detail>0;X(t.value,{tab:t.tab,motion:n})},le=e=>{u=k(e.target)?.tab??null,window.clearTimeout(f),f=window.setTimeout(()=>{u=null,f=void 0})},ue=e=>{let t=k(e.target);!t||e.target!==t.tab||t.disabled||(Y().activateItem({el:t.tab}),M().activation===`automatic`&&u!==t.tab?X(t.value,{tab:t.tab,motion:!1}):K())},de=e=>{let t=k(e.target);if(!t||e.target!==t.tab)return;if(e.key===` `&&t.tab instanceof HTMLAnchorElement){e.preventDefault(),X(t.value,{tab:t.tab,motion:!1});return}let n=w(t.tab.closest(`[data-ui-tabs-list]`));if(e.key===`Home`){e.preventDefault(),Y().focusFirst();return}if(e.key===`End`){e.preventDefault(),Y().focusLast();return}if(n===`vertical`){e.key===`ArrowDown`?(e.preventDefault(),Y().focusNext()):e.key===`ArrowUp`&&(e.preventDefault(),Y().focusPrevious());return}e.key===`ArrowRight`?(e.preventDefault(),o({el:m()})?Y().focusPrevious():Y().focusNext()):e.key===`ArrowLeft`&&(e.preventDefault(),o({el:m()})?Y().focusNext():Y().focusPrevious())},fe=()=>{let e=A();J.send({type:`ITEMS_CHANGED`,...e})},Z=()=>{i?.();let e=[m()],t=M().panels;if(t){let n=document.querySelector(t);n&&e.push(n)}i=g({targets:R(e),read:A,onChange:fe,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-disabled`,`disabled`,`data-ui-tabs-owner`,`data-owner`,`data-variant`,`data-size`,`data-orientation`,`data-gap`,`id`]}})},Q=()=>{if(a?.disconnect(),typeof ResizeObserver>`u`)return;a=new ResizeObserver(()=>{if(!n)return;let e=y();e&&W(e)});let e=y();e&&a.observe(e),D().forEach(e=>a?.observe(e.tab))},$;return $={...J,get value(){return this.snapshot.current?.context.selection.value??``},init(){n=this.$el,J.connect(this.$el,this.snapshot),r=ee({root:m,itemSelector:`[data-ui-tabs-tab]`,isDisabled:e=>!_(e)||v(e.dataset.disabled)||e.hasAttribute(`disabled`),loop:()=>M().loop}),K({indicator:!0}),Z(),Q()},destroy(){i?.(),i=null,a?.disconnect(),a=null,window.clearTimeout(f),u=null,f=void 0,J.disconnect(),r=null,n=null},transitionIndicator(n){if(!(n.el instanceof Element))return Promise.resolve();let r=H(n.el);return r?!n.props.animate||n.event.motion===!1?(U(r),e()):t(n,{target:r.indicator,update:()=>U(r),role:`layoutSpring`,transition:{bounce:0}}):Promise.resolve()},get root(){return{"data-ui-tabs":``,":data-orientation":()=>M().orientation,":data-activation":()=>M().activation,":data-animate":()=>M().animate?``:void 0,"@pointerdown":le,"@click":ce,"@focusin":ue,"@keydown":e=>{e instanceof KeyboardEvent&&de(e)}}},select(e){X(e)},isActive(e){return this.snapshot.current?.context.selection.value===e}},$},B=f(`UiTabs`,z),V=new WeakSet,H=e=>{V.has(e)||(V.add(e),n(e),B(e))};export{z as n,H as t};
|
|
2
|
-
//# sourceMappingURL=entry.generated-
|
|
1
|
+
import{d as e,n as t}from"./motion-BQk-uLaI.js";import{t as n}from"./capability-motion-DoZROkFD.js";import{f as r,l as i,n as a}from"./codecs-Cb1ns_47.js";import{i as o,n as s,r as c,s as l}from"./dom-qAeVl7dc.js";import{i as u,t as d}from"./alpine-machine-BS13dbK4.js";import{t as f}from"./alpine-data-CytyCyfk.js";import{t as ee}from"./collection-navigation-CfTZUJrL.js";import{t as p}from"./machine-Dqut4h89.js";import{n as m,t as h}from"./props-change-2xfsIAEN.js";import{t as g}from"./semantic-observer-BUswpsNx.js";import{A as _,P as v}from"./common-Dfj6NCjU.js";var y=[`manual`,`automatic`],b=v;[...b];var x=[`auto`,..._],S={id:r.default(`ui-tabs`),animate:a,defaultValue:r,value:r,activation:i(y,`manual`),orientation:i(b,`horizontal`),gap:i(x,`auto`),loop:a.default(!0),panels:r,class:r},C=[u({name:`switching`,state:`switching`,project:e=>e.context.change,onDone:`SWITCH_DONE`,onError:`SWITCH_ERROR`,sends:{select:e=>({type:`SELECT`,value:e})}})],w=e=>typeof e==`string`?e:``,T=e=>Array.isArray(e)?e.filter(e=>typeof e==`string`):[],E=e=>!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[1]==`string`)),D=e=>m(e.event)?.props??e.props,O=e=>e.event.type===`ITEMS_CHANGED`?{values:T(e.event.values),disabledValues:T(e.event.disabledValues),panelIds:E(e.event.panelIds)}:e.context.collection,k=(e,t)=>e&&t.values.includes(e)&&!t.disabledValues.includes(e)?e:t.values.find(e=>!t.disabledValues.includes(e))??``,A=e=>{let t=O(e);if(e.event.type===`SELECT`){let n=w(e.event.value);return n&&t.values.includes(n)&&!t.disabledValues.includes(n)?n:e.context.selection.value}return e.event.type===`PROPS_CHANGED`&&h(e.event,`value`)?k(D(e).value,t):k(e.context.selection.value,t)},j=e=>e.context.selection.value!==A(e),M=(e,t)=>({target:e,guard:j,reduce:`applySwitch`,effects:t}),te=({props:e,context:t,effects:n})=>p({initial:`stable`,on:{DOM_INVALIDATED:{effects:`syncDom`}},states:{stable:{tags:[`stable`],on:{SELECT:M(`switching`,`prepareSwitch`),PROPS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}},switching:{tags:[`switching`,`transitioning`],on:{SWITCH_DONE:{target:`stable`,effects:`finishSwitch`},SWITCH_ERROR:{target:`stable`,effects:`finishSwitch`},SELECT:M(`switching`,`prepareSwitch`),PROPS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncProps`}],ITEMS_CHANGED:[M(`switching`,`prepareSwitch`),{reduce:`reconcile`,effects:`syncItems`}]}}}},{context:t,props:e,reducers:{applySwitch:e=>{let t=O(e),n=A(e);return{props:D(e),context:{...e.context,selection:{value:n},change:{previousValue:e.context.selection.value,value:n,panelId:t.panelIds[n]??``},collection:t}}},reconcile:e=>({props:D(e),context:{...e.context,collection:O(e),selection:{value:A(e)}}})},effects:{prepareSwitch:n.prepareSwitch,finishSwitch:n.finishSwitch,syncDom:n.syncDom,syncProps:n.syncProps,syncItems:n.syncItems}}),ne=`ui-tabs`,N=e=>e?`active`:`inactive`,P=e=>e.trim().toLowerCase().replace(/[^a-z0-9_-]+/g,`-`).replace(/^-+|-+$/g,``)||`tab`,F=(e,t)=>`${e}-tab-${P(t)}`,I=(e,t)=>`${e}-panel-${P(t)}`,L=e=>e instanceof HTMLButtonElement||e instanceof HTMLAnchorElement,R=e=>Array.from(new Set(e)),z=()=>{let n=null,r=null,i=null,a=null,u=null,f,p=null,m=()=>{if(!n)throw Error(`Tabs has not been initialized.`);return n},h=()=>m().id||m().dataset.id||m().dataset.owner||ne,_=e=>e.closest(`[data-ui-tabs]`)===m(),v=e=>s({value:e}),y=()=>Array.from(m().querySelectorAll(`[data-ui-tabs-list]`)).find(_)??null,b=e=>{let t=(e??y())?.dataset.variant;return t===`subtle`||t===`segmented`||t===`pills`?t:`line`},x=e=>(e??y())?.dataset.size===`sm`?`sm`:`md`,w=e=>{let t=(e??y())?.dataset.orientation;return t===`vertical`||t===`horizontal`?t:M().orientation},T=()=>{let e=h(),t=t=>t.dataset.uiTabsOwner===e||t.dataset.owner===e,n=Array.from(m().querySelectorAll(`[data-ui-tabs-panel]`)).filter(_),r=M().panels;if(r){let e=document.querySelector(r);e&&n.push(...Array.from(e.querySelectorAll(`[data-ui-tabs-panel]`)).filter(t))}return n.push(...Array.from(document.querySelectorAll(`[data-ui-tabs-panel][data-ui-tabs-owner="${CSS.escape(e)}"]`)).filter(t)),R(n)},E=e=>T().find(t=>t.dataset.value===e)??null,D=()=>Array.from(m().querySelectorAll(`[data-ui-tabs-tab]`)).filter(_).map((e,t)=>L(e)?(e.dataset.value||=`tab-${t+1}`,{tab:e,value:e.dataset.value,disabled:v(e.dataset.disabled)||e.hasAttribute(`disabled`),panel:E(e.dataset.value)}):null).filter(e=>e!==null),O=e=>D().find(t=>t.value===e)??null,k=e=>{if(!(e instanceof Element))return null;let t=e.closest(`[data-ui-tabs-tab]`);return t&&_(t)?D().find(e=>e.tab===t)??null:null},A=()=>{let e=D();return{values:e.map(e=>e.value),disabledValues:e.filter(e=>e.disabled).map(e=>e.value),panelIds:Object.fromEntries(e.map(e=>[e.value,e.panel?.id||I(e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||h(),e.value)]))}},j=e=>{let t=A(),n=D().find(e=>v(e.tab.dataset.selected)||e.tab.getAttribute(`aria-selected`)===`true`),r=T().find(e=>v(e.dataset.selected)),i=e.value||e.defaultValue||n?.value||r?.dataset.value||``,a=i&&t.values.includes(i)&&!t.disabledValues.includes(i)?i:t.values.find(e=>!t.disabledValues.includes(e))??``;return{selection:{value:a},change:{previousValue:``,value:a,panelId:t.panelIds[a]??``},collection:t}},M=()=>p??J.getCommittedSnapshot().props,P=()=>J.getCommittedSnapshot().context,z=()=>P().selection.value,B=()=>{let e=D();return e.find(e=>document.activeElement===e.tab||e.tab.dataset.active===`true`)?.tab??e.find(e=>e.value===z())?.tab??null},V=e=>e.querySelector(`:scope > [data-ui-tabs-indicator]`),H=e=>{if(!(e instanceof HTMLElement))return null;let t=e.closest(`[data-ui-tabs-list]`),n=t?V(t):null;if(!t||!n)return null;n.hidden=!1;let r=t.getBoundingClientRect(),i=e.getBoundingClientRect(),a=t.dataset.orientation===`vertical`,o=t.dataset.variant===`line`,s=o&&a?2:i.width,c=o&&!a?2:i.height,l=o?Number.parseFloat(getComputedStyle(t).getPropertyValue(`--border-width-edge-separator`))||1:0,u=o&&a?r.left-(s-l)/2:i.left,d=o&&!a?r.bottom-(c+l)/2:i.top;return{indicator:n,styles:{height:c,left:u-r.left,top:d-r.top,width:s}}},U=e=>{e.indicator.style.height=`${e.styles.height}px`,e.indicator.style.left=`${e.styles.left}px`,e.indicator.style.top=`${e.styles.top}px`,e.indicator.style.width=`${e.styles.width}px`},W=e=>{let t=V(e);if(!t)return;let n=D().find(t=>t.value===z()&&t.tab.closest(`[data-ui-tabs-list]`)===e);if(!n){t.hidden=!0,e.dataset.uiTabsReady=``;return}let r=H(n.tab);r&&U(r),e.dataset.uiTabsReady=``},G=()=>{let e=M();!m().id&&e.id&&(m().id=e.id),m().dataset.orientation=e.orientation,m().dataset.activation=e.activation,m().dataset.value=z(),l({el:m(),attr:`data-animate`,present:e.animate})},re=e=>{let t=w(e);e.setAttribute(`role`,`tablist`),e.dataset.orientation=t,t===`vertical`?e.setAttribute(`aria-orientation`,`vertical`):e.removeAttribute(`aria-orientation`)},ie=e=>{let t=e.value===z(),n=e.tab.closest(`[data-ui-tabs-list]`),r=w(n),i=b(n),a=x(n),o=e.tab.dataset.uiTabsOwner||e.tab.dataset.owner||h(),s=e.tab.querySelector(`[data-ui-tabs-tab-selected-icon]`),c=N(t),u=B();e.tab.id||=F(o,e.value),e.tab.dataset.state=c,e.tab.dataset.orientation=r,e.tab.dataset.variant=i,e.tab.dataset.size=a,e.tab.setAttribute(`role`,`tab`),e.tab.setAttribute(`aria-selected`,t?`true`:`false`),e.tab.setAttribute(`aria-controls`,e.panel?.id||I(o,e.value)),e.tab.tabIndex=e.tab===u?0:-1,l({el:e.tab,attr:`data-selected`,present:t}),s&&(s.style.visibility=t?`visible`:`hidden`),l({el:e.tab,attr:`data-disabled`,present:e.disabled}),e.disabled?(e.tab.setAttribute(`aria-disabled`,`true`),e.tab.tabIndex=-1):e.tab.removeAttribute(`aria-disabled`),e.tab instanceof HTMLButtonElement&&(e.tab.disabled=e.disabled)},ae=e=>{let t=e.dataset.value||``,n=t===z(),r=e.dataset.uiTabsOwner||e.dataset.owner||h(),i=I(r,t);t&&!e.id&&(e.id=i),t&&!e.hasAttribute(`data-ui-key`)&&e.setAttribute(`data-ui-key`,e.id||i),e.dataset.state=N(n),e.dataset.orientation=M().orientation,e.setAttribute(`role`,`tabpanel`),e.setAttribute(`aria-labelledby`,F(r,t)),e.hasAttribute(`tabindex`)||(e.tabIndex=0),e.hidden=!n,l({el:e,attr:`data-selected`,present:n})},K=({indicator:e=!1}={})=>{G();let t=y();t&&re(t),D().forEach(ie),T().forEach(ae),e&&t&&W(t)},oe=()=>{c({el:m(),name:`ui:change`,detail:{value:z()}})},se=(e,t)=>{c({el:e,name:`ui:tabs:activate`,detail:{value:t,panelId:E(t)?.id??``}})},q=()=>{K({indicator:!0}),Z(),Q()},J=d({schema:S,hooks:C,resolveTransitionElement:({data:e})=>O(e.value)?.tab??null,createMachine:({props:e})=>{p=e;let t=j(e);return p=null,te({props:e,context:t,effects:{prepareSwitch:({event:e})=>{K(),e.type===`SELECT`&&oe()},finishSwitch:()=>K(),syncDom:q,syncProps:q,syncItems:()=>{K({indicator:!0}),Q()}}})}}),Y=()=>{if(!r)throw Error(`Tabs navigation has not been initialized.`);return r},X=(e,{tab:t,motion:n=!0}={})=>{let r=z();J.send({type:`SELECT`,value:e,motion:n}),z()!==r&&t&&se(t,z())},ce=e=>{let t=k(e.target);if(!t)return;if(t.disabled){e.preventDefault();return}let n=!(e instanceof MouseEvent)||e.detail>0;X(t.value,{tab:t.tab,motion:n})},le=e=>{u=k(e.target)?.tab??null,window.clearTimeout(f),f=window.setTimeout(()=>{u=null,f=void 0})},ue=e=>{let t=k(e.target);!t||e.target!==t.tab||t.disabled||(Y().activateItem({el:t.tab}),M().activation===`automatic`&&u!==t.tab?X(t.value,{tab:t.tab,motion:!1}):K())},de=e=>{let t=k(e.target);if(!t||e.target!==t.tab)return;if(e.key===` `&&t.tab instanceof HTMLAnchorElement){e.preventDefault(),X(t.value,{tab:t.tab,motion:!1});return}let n=w(t.tab.closest(`[data-ui-tabs-list]`));if(e.key===`Home`){e.preventDefault(),Y().focusFirst();return}if(e.key===`End`){e.preventDefault(),Y().focusLast();return}if(n===`vertical`){e.key===`ArrowDown`?(e.preventDefault(),Y().focusNext()):e.key===`ArrowUp`&&(e.preventDefault(),Y().focusPrevious());return}e.key===`ArrowRight`?(e.preventDefault(),o({el:m()})?Y().focusPrevious():Y().focusNext()):e.key===`ArrowLeft`&&(e.preventDefault(),o({el:m()})?Y().focusNext():Y().focusPrevious())},fe=()=>{let e=A();J.send({type:`ITEMS_CHANGED`,...e})},Z=()=>{i?.();let e=[m()],t=M().panels;if(t){let n=document.querySelector(t);n&&e.push(n)}i=g({targets:R(e),read:A,onChange:fe,observer:{childList:!0,subtree:!0,attributes:!0,attributeFilter:[`data-value`,`data-disabled`,`disabled`,`data-ui-tabs-owner`,`data-owner`,`data-variant`,`data-size`,`data-orientation`,`data-gap`,`id`]}})},Q=()=>{if(a?.disconnect(),typeof ResizeObserver>`u`)return;a=new ResizeObserver(()=>{if(!n)return;let e=y();e&&W(e)});let e=y();e&&a.observe(e),D().forEach(e=>a?.observe(e.tab))},$;return $={...J,get value(){return this.snapshot.current?.context.selection.value??``},init(){n=this.$el,J.connect(this.$el,this.snapshot),r=ee({root:m,itemSelector:`[data-ui-tabs-tab]`,isDisabled:e=>!_(e)||v(e.dataset.disabled)||e.hasAttribute(`disabled`),loop:()=>M().loop}),K({indicator:!0}),Z(),Q()},destroy(){i?.(),i=null,a?.disconnect(),a=null,window.clearTimeout(f),u=null,f=void 0,J.disconnect(),r=null,n=null},transitionIndicator(n){if(!(n.el instanceof Element))return Promise.resolve();let r=H(n.el);return r?!n.props.animate||n.event.motion===!1?(U(r),e()):t(n,{target:r.indicator,update:()=>U(r),role:`layoutSpring`,transition:{bounce:0}}):Promise.resolve()},get root(){return{"data-ui-tabs":``,":data-orientation":()=>M().orientation,":data-activation":()=>M().activation,":data-animate":()=>M().animate?``:void 0,"@pointerdown":le,"@click":ce,"@focusin":ue,"@keydown":e=>{e instanceof KeyboardEvent&&de(e)}}},select(e){X(e)},isActive(e){return this.snapshot.current?.context.selection.value===e}},$},B=f(`UiTabs`,z),V=new WeakSet,H=e=>{V.has(e)||(V.add(e),n(e),B(e))};export{z as n,H as t};
|
|
2
|
+
//# sourceMappingURL=entry.generated-B_q7LVNv.js.map
|