primeng
Version:
PrimeNG is a premium UI library for Angular featuring a rich set of 90+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeBlock,
1 lines • 57.5 kB
Source Map (JSON)
{"version":3,"file":"primeng-splitter.mjs","sources":["../../src/splitter/style/splitterstyle.ts","../../src/splitter/splitterpanel.ts","../../src/splitter/splitter.ts","../../src/splitter/primeng-splitter.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { style } from '@primeuix/styles/splitter';\nimport { BaseStyle } from 'primeng/base';\n\nconst classes = {\n root: ({ instance }) => ['p-splitter p-component', 'p-splitter-' + instance.layout()],\n panel: 'p-splitter-panel',\n gutter: 'p-splitter-gutter',\n gutterHandle: 'p-splitter-gutter-handle'\n};\n\n@Injectable()\nexport class SplitterStyle extends BaseStyle {\n name = 'splitter';\n\n style = style;\n\n classes = classes;\n}\n\n/**\n *\n * Splitter is utilized to separate and resize panels.\n *\n * [Live Demo](https://www.primeng.org/splitter/)\n *\n * @module splitterstyle\n *\n */\nexport enum SplitterClasses {\n /**\n * Class name of the root element\n */\n root = 'p-splitter',\n /**\n * Class name of the panel element\n */\n panel = 'p-splitter-panel',\n /**\n * Class name of the gutter element\n */\n gutter = 'p-splitter-gutter',\n /**\n * Class name of the handle element\n */\n gutterHandle = 'p-splitter-gutter-handle'\n}\n\nexport interface SplitterStyle extends BaseStyle {}\n","import { booleanAttribute, ChangeDetectionStrategy, Component, inject, input, numberAttribute, TemplateRef, viewChild, ViewEncapsulation } from '@angular/core';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind } from 'primeng/bind';\nimport type { SplitterPanelPassThrough } from 'primeng/types/splitter';\nimport { SplitterStyle } from './style/splitterstyle';\n\n/**\n * SplitterPanel is a helper component for Splitter, used to define a single resizable panel\n * together with its size constraints (min/max size, collapsible behavior).\n * @group Components\n */\n@Component({\n selector: 'p-splitterpanel, p-splitter-panel',\n standalone: true,\n template: `\n <ng-template #content>\n <ng-content></ng-content>\n </ng-template>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n hostDirectives: [Bind],\n providers: [SplitterStyle, { provide: PARENT_INSTANCE, useExisting: SplitterPanel }]\n})\nexport class SplitterPanel extends BaseComponent<SplitterPanelPassThrough> {\n componentName = 'SplitterPanel';\n\n bindDirectiveInstance = inject(Bind, { self: true });\n\n /**\n * Initial size of the panel relative to 100%.\n * @group Props\n */\n size = input<number | undefined>(undefined, { transform: (value: unknown) => (value == null ? undefined : numberAttribute(value)) });\n\n /**\n * Minimum size of the panel relative to 100%.\n * @defaultValue 0\n * @group Props\n */\n minSize = input(0, { transform: numberAttribute });\n\n /**\n * Maximum size of the panel relative to 100%.\n * @defaultValue 100\n * @group Props\n */\n maxSize = input(100, { transform: numberAttribute });\n\n /**\n * When enabled, the panel can collapse below its `minSize` down to `collapsedSize`.\n * @defaultValue false\n * @group Props\n */\n collapsible = input(false, { transform: booleanAttribute });\n\n /**\n * Size of the panel when collapsed, relative to 100%.\n * @defaultValue 0\n * @group Props\n */\n collapsedSize = input(0, { transform: numberAttribute });\n\n /**\n * @ignore\n * Content of the panel, stamped by the parent Splitter into the panel wrapper.\n */\n contentTemplate = viewChild<TemplateRef<any>>('content');\n\n /**\n * @ignore\n * `class`/`style` set directly on the `<p-splitterpanel>` element are forwarded by the parent\n * Splitter onto the panel it renders, so authors can style the panel inline as expected.\n */\n get hostClass(): string {\n return this.el.nativeElement.className;\n }\n\n get hostStyle(): string | null {\n return this.el.nativeElement.getAttribute('style');\n }\n\n _componentStyle = inject(SplitterStyle);\n\n onAfterViewChecked(): void {\n this.bindDirectiveInstance.setAttrs(this.ptm('root'));\n }\n}\n","import { isPlatformBrowser, NgTemplateOutlet } from '@angular/common';\nimport { booleanAttribute, ChangeDetectionStrategy, Component, computed, contentChildren, effect, ElementRef, inject, input, NgModule, numberAttribute, output, signal, TemplateRef, untracked, ViewEncapsulation } from '@angular/core';\nimport { isRTL } from '@primeuix/utils';\nimport { SharedModule } from 'primeng/api';\nimport { BaseComponent, PARENT_INSTANCE } from 'primeng/basecomponent';\nimport { Bind, BindModule } from 'primeng/bind';\nimport { Nullable, VoidListener } from 'primeng/ts-helpers';\nimport type { CSSProperties } from 'primeng/types/shared';\nimport type { SplitterCollapseEvent, SplitterLayout, SplitterPassThrough, SplitterResizeEndEvent, SplitterResizeEvent, SplitterResizeStartEvent, SplitterStateStorage } from 'primeng/types/splitter';\nimport { SplitterPanel } from './splitterpanel';\nimport { SplitterStyle } from './style/splitterstyle';\n\n/**\n * Runtime configuration of a panel, resolved either from a SplitterPanel component or from the\n * array-based inputs (minSizes/panelSizes) for backward compatibility.\n */\ninterface SplitterPanelMeta {\n minSize: number;\n maxSize: number;\n collapsible: boolean;\n collapsedSize: number;\n size: number | undefined;\n}\n\ninterface SplitterPanelInfo extends SplitterPanelMeta {\n index: number;\n collapsed: boolean;\n}\n\n/**\n * Splitter is utilized to separate and resize panels.\n * @group Components\n */\n@Component({\n selector: 'p-splitter',\n standalone: true,\n imports: [NgTemplateOutlet, SharedModule, BindModule],\n template: `\n @for (panel of panels(); track $index; let i = $index) {\n <div\n [pBind]=\"ptm('panel')\"\n [class]=\"panelClass()[i]\"\n [style]=\"panelInlineStyle()[i]\"\n [style.flex]=\"panelFlex()[i]\"\n [style.overflow]=\"'hidden'\"\n [style.min-width]=\"layout() === 'horizontal' ? '0' : null\"\n [style.min-height]=\"layout() === 'vertical' ? '0' : null\"\n tabindex=\"-1\"\n [attr.data-index]=\"i\"\n [attr.data-collapsed]=\"collapsed()[i] ? '' : null\"\n [attr.data-resizing]=\"isResizing() && resizingIndex() === i ? '' : null\"\n >\n <ng-container *ngTemplateOutlet=\"panel\"></ng-container>\n </div>\n @if (i !== panels().length - 1) {\n <div\n [pBind]=\"ptm('gutter')\"\n [class]=\"cx('gutter')\"\n role=\"separator\"\n [attr.tabindex]=\"disabled() ? -1 : 0\"\n [attr.aria-orientation]=\"layout()\"\n [attr.aria-valuenow]=\"prevSize\"\n [attr.aria-valuemin]=\"round(panelMetas()[i]?.minSize)\"\n [attr.aria-valuemax]=\"round(100 - (panelMetas()[i + 1]?.minSize ?? 0))\"\n [attr.aria-disabled]=\"disabled() || null\"\n [attr.data-orientation]=\"layout()\"\n [attr.data-resizing]=\"isResizing() && resizingIndex() === i ? '' : null\"\n [attr.data-disabled]=\"disabled() ? '' : null\"\n [style]=\"gutterInlineStyle()\"\n (pointerdown)=\"onGutterPointerDown($event, i)\"\n (keyup)=\"onGutterKeyUp($event)\"\n (keydown)=\"onGutterKeyDown($event, i)\"\n >\n <div [pBind]=\"ptm('gutterHandle')\" [class]=\"cx('gutterHandle')\" [attr.data-orientation]=\"layout()\" [attr.data-resizing]=\"isResizing() && resizingIndex() === i ? '' : null\"></div>\n </div>\n }\n }\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class]': 'rootClass()',\n '[attr.data-orientation]': 'layout()',\n '[attr.data-resizing]': 'dataResizing()',\n '[attr.data-disabled]': \"disabled() ? '' : null\",\n '[attr.data-p]': 'dataP()'\n },\n providers: [SplitterStyle, { provide: PARENT_INSTANCE, useExisting: Splitter }],\n hostDirectives: [Bind]\n})\nexport class Splitter extends BaseComponent<SplitterPassThrough> {\n componentName = 'Splitter';\n\n bindDirectiveInstance = inject(Bind, { self: true });\n\n /**\n * Style class of the component.\n * @group Props\n */\n styleClass = input<string>();\n\n /**\n * Style class of the panel.\n * @group Props\n */\n panelStyleClass = input<string>();\n\n /**\n * Inline style of the panel.\n * @group Props\n */\n panelStyle = input<CSSProperties>();\n\n /**\n * Defines where a stateful splitter keeps its state, valid values are 'session' for sessionStorage and 'local' for localStorage.\n * @group Props\n */\n stateStorage = input<SplitterStateStorage>('session');\n\n /**\n * Storage identifier of a stateful Splitter.\n * @group Props\n */\n stateKey = input<string | null>(null);\n\n /**\n * Orientation of the panels. Valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n layout = input<SplitterLayout>('horizontal');\n\n /**\n * Size of the divider in pixels.\n * @group Props\n */\n gutterSize = input(1, { transform: numberAttribute });\n\n /**\n * Step factor to increment/decrement the size of the panels while pressing the arrow keys.\n * @group Props\n */\n step = input(5, { transform: numberAttribute });\n\n /**\n * Minimum size of the elements relative to 100%. Used when panels are defined via `#panel` templates;\n * when SplitterPanel components are used, the per-panel `minSize` input takes precedence.\n * @group Props\n */\n minSizes = input<number[]>([]);\n\n /**\n * Size of the elements relative to 100%. Used when panels are defined via `#panel` templates;\n * when SplitterPanel components are used, the per-panel `size` input takes precedence.\n * @group Props\n */\n panelSizes = input<number[]>([]);\n\n /**\n * When present, it disables the component and prevents resizing.\n * @defaultValue false\n * @group Props\n */\n disabled = input(false, { transform: booleanAttribute });\n\n /**\n * Callback to invoke when resize ends.\n * @param {SplitterResizeEndEvent} event - Custom panel resize end event\n * @group Emits\n */\n onResizeEnd = output<SplitterResizeEndEvent>();\n\n /**\n * Callback to invoke when resize starts.\n * @param {SplitterResizeStartEvent} event - Custom panel resize start event\n * @group Emits\n */\n onResizeStart = output<SplitterResizeStartEvent>();\n\n /**\n * Callback to invoke continuously while a gutter is being dragged.\n * @param {SplitterResizeEvent} event - Custom panel resize event\n * @group Emits\n */\n onResize = output<SplitterResizeEvent>();\n\n /**\n * Callback to invoke when a collapsible panel collapses or expands.\n * @param {SplitterCollapseEvent} event - Custom collapse event\n * @group Emits\n */\n onCollapse = output<SplitterCollapseEvent>();\n\n /**\n * Panels declared via SplitterPanel components.\n * @ignore\n */\n panelComponents = contentChildren(SplitterPanel);\n\n /**\n * Panels declared via `<ng-template #panel>` (backward compatible API).\n * @ignore\n */\n panelChildren = contentChildren<TemplateRef<void>>('panel');\n\n /**\n * Resolved panel content templates, sourced from SplitterPanel components when present,\n * otherwise from `#panel` templates.\n */\n panels = computed<TemplateRef<any>[]>(() => {\n const components = this.panelComponents();\n\n if (components && components.length) {\n const templates = components.map((panel) => panel.contentTemplate());\n return templates.every((template): template is TemplateRef<any> => !!template) ? (templates as TemplateRef<any>[]) : [];\n }\n\n return [...this.panelChildren()];\n });\n\n /**\n * Resolved per-panel configuration (min/max/collapsible/collapsedSize/size).\n */\n panelMetas = computed<SplitterPanelMeta[]>(() => {\n const components = this.panelComponents();\n\n if (components && components.length) {\n return components.map((panel) => ({\n minSize: panel.minSize() ?? 0,\n maxSize: panel.maxSize() ?? 100,\n collapsible: panel.collapsible() ?? false,\n collapsedSize: panel.collapsedSize() ?? 0,\n size: panel.size()\n }));\n }\n\n const count = this.panelChildren().length;\n const minSizes = this.minSizes();\n const panelSizes = this.panelSizes();\n\n return Array.from({ length: count }, (_, i) => ({\n minSize: minSizes[i] ?? 0,\n maxSize: 100,\n collapsible: false,\n collapsedSize: 0,\n size: panelSizes[i]\n }));\n });\n\n /**\n * Value-based signature of the panel configuration. Lets the (re)initialization effect ignore\n * array-literal input bindings that change identity but not value on every parent change detection.\n */\n panelSignature = computed(() => {\n const metaSig = this.panelMetas()\n .map((meta) => `${meta.size ?? ''}:${meta.minSize}:${meta.maxSize}:${meta.collapsible}:${meta.collapsedSize}`)\n .join(',');\n\n return `${metaSig}#${this.panelSizes().join(',')}`;\n });\n\n /**\n * Class for each panel wrapper: the base panel class plus the splitter-level `panelStyleClass`\n * and the `class` set directly on the matching SplitterPanel.\n */\n panelClass = computed(() => {\n const components = this.panelComponents();\n const base = this.cn(this.cx('panel'), this.panelStyleClass());\n\n return this.panels().map((_, i) => this.cn(base, components[i]?.hostClass));\n });\n\n /**\n * Inline style for each panel wrapper: the `style` set directly on the matching SplitterPanel,\n * falling back to the splitter-level `panelStyle`.\n */\n panelInlineStyle = computed(() => {\n const components = this.panelComponents();\n const fallback = this.panelStyle();\n\n return this.panels().map((_, i) => components[i]?.hostStyle ?? fallback);\n });\n\n dragging: boolean = false;\n\n isResizing = signal(false);\n\n resizingIndex = signal<number | null>(null);\n\n collapsed = signal<boolean[]>([]);\n\n /**\n * Flex values applied to each panel wrapper, e.g. `35 1 0px`. Bound declaratively so panel sizing\n * never depends on imperative DOM timing.\n */\n panelFlex = signal<string[]>([]);\n\n dataResizing = computed(() => (this.isResizing() ? '' : null));\n\n pointerMoveListener: VoidListener;\n\n pointerUpListener: VoidListener;\n\n size: Nullable<number>;\n\n gutterElement: Nullable<ElementRef | HTMLElement>;\n\n startPos: Nullable<number>;\n\n _panelSizes: number[] = [];\n\n panelRegistry: SplitterPanelInfo[] = [];\n\n initialSizes: number[] = [];\n\n initialCollapsed: boolean[] = [];\n\n reportedCollapsed: boolean[] = [];\n\n initialTotal: number = 100;\n\n prevPanelIndex: Nullable<number>;\n\n timer: ReturnType<typeof setTimeout> | undefined;\n\n prevSize: string | undefined;\n\n _componentStyle = inject(SplitterStyle);\n\n rootClass = computed(() => this.cn(this.cx('root'), this.styleClass()));\n\n constructor() {\n super();\n effect(() => {\n // Re-initialize whenever the set of panels or their (value-based) size configuration changes.\n const panels = this.panels();\n this.panelSignature();\n\n if (!isPlatformBrowser(this.platformId) || panels.length === 0) {\n return;\n }\n\n // Never clobber sizes mid-drag; the resizing flag is read untracked so ending a drag\n // does not by itself re-trigger initialization.\n if (untracked(() => this.isResizing())) {\n return;\n }\n\n this.initializePanels();\n });\n }\n\n onAfterViewChecked(): void {\n this.bindDirectiveInstance.setAttrs(this.ptms(['host', 'root']));\n }\n\n buildPanelRegistry() {\n const metas = this.panelMetas();\n const prev = this.panelRegistry ?? [];\n\n this.panelRegistry = metas.map((meta, i) => ({\n index: i,\n minSize: meta.minSize ?? 0,\n maxSize: meta.maxSize ?? 100,\n collapsible: meta.collapsible ?? false,\n collapsedSize: meta.collapsedSize ?? 0,\n size: meta.size,\n collapsed: prev[i]?.collapsed ?? false\n }));\n }\n\n initializePanels() {\n const panels = this.panels();\n\n if (!panels.length) {\n return;\n }\n\n this.buildPanelRegistry();\n\n let initialized = false;\n\n if (this.isStateful()) {\n initialized = this.restoreState();\n }\n\n if (!initialized) {\n const _panelSizes: number[] = [];\n const inputPanelSizes = this.panelSizes();\n\n panels.forEach((_, i) => {\n const meta = this.panelRegistry[i];\n // Splitter-level `panelSizes` takes precedence, then the panel's own `size`, then an equal split.\n _panelSizes[i] = inputPanelSizes[i] ?? meta?.size ?? 100 / panels.length;\n });\n\n this.panelRegistry.forEach((info, i) => {\n if (info?.collapsible) {\n info.collapsed = _panelSizes[i] <= (info.collapsedSize ?? 0);\n }\n });\n\n this._panelSizes = _panelSizes;\n this.prevSize = parseFloat(String(_panelSizes[0])).toFixed(4);\n }\n\n this.syncCollapsedState();\n this.updateFlex();\n }\n\n updateFlex() {\n this.panelFlex.set(this._panelSizes.map((panelSize) => panelSize + ' 1 0px'));\n }\n\n syncCollapsedState() {\n this.collapsed.set(this.panelRegistry.map((info) => info.collapsed));\n }\n\n getPanelMinSize(index: number): number {\n return this.panelRegistry?.[index]?.minSize ?? 0;\n }\n\n getPanelMaxSize(index: number): number {\n return this.panelRegistry?.[index]?.maxSize ?? 100;\n }\n\n resizeStart(event: PointerEvent | KeyboardEvent, index: number, isKeyDown?: boolean) {\n const currentTarget = (event.currentTarget as HTMLElement) || (event.target as HTMLElement);\n\n if (currentTarget) {\n this.gutterElement = currentTarget;\n }\n\n const panelElements = (this.el as ElementRef).nativeElement.querySelectorAll(':scope > [data-index]');\n let totalPanelPx = 0;\n\n for (const el of panelElements) {\n const rect = el.getBoundingClientRect();\n totalPanelPx += this.horizontal() ? rect.width : rect.height;\n }\n\n this.size = totalPanelPx;\n\n if (!isKeyDown) {\n const pointerEvent = event as PointerEvent;\n\n this.dragging = true;\n this.startPos = this.horizontal() ? pointerEvent.pageX : pointerEvent.pageY;\n this.isResizing.set(true);\n this.resizingIndex.set(index);\n }\n\n this.initialSizes = [...this._panelSizes];\n this.initialCollapsed = this.panelRegistry.map((info) => info.collapsed);\n this.reportedCollapsed = this.panelRegistry.map((info) => info.collapsed);\n this.initialTotal = this.initialSizes.reduce((a, b) => a + b, 0) || 100;\n this.prevPanelIndex = index;\n\n if (!isKeyDown) {\n this.onResizeStart.emit({ originalEvent: event, sizes: [...this._panelSizes] });\n }\n }\n\n onResizeMove(event: PointerEvent | KeyboardEvent, step?: number, isKeyDown?: boolean) {\n if (this.size === null || this.prevPanelIndex === null || this.initialSizes.length === 0) {\n return;\n }\n\n const gutterIdx = this.prevPanelIndex!;\n const total = this.initialTotal;\n let delta: number;\n\n if (isKeyDown) {\n delta = (total * (step ?? 0)) / this.size!;\n } else {\n const pointerEvent = event as PointerEvent;\n const pos = this.horizontal() ? pointerEvent.pageX : pointerEvent.pageY;\n\n if (this.horizontal() && isRTL(this.el.nativeElement)) {\n delta = (((this.startPos ?? 0) - pos) * total) / this.size!;\n } else {\n delta = ((pos - (this.startPos ?? 0)) * total) / this.size!;\n }\n }\n\n const newSizes = [...this.initialSizes];\n\n this.panelRegistry.forEach((info, i) => {\n if (this.initialCollapsed[i] !== undefined) {\n info.collapsed = this.initialCollapsed[i];\n }\n });\n\n if (delta > 0) {\n this.distribute(newSizes, gutterIdx, delta, isKeyDown, 'forward');\n } else if (delta < 0) {\n this.distribute(newSizes, gutterIdx + 1, -delta, isKeyDown, 'backward');\n }\n\n this.panelRegistry.forEach((info, i) => {\n if (info.collapsed !== this.reportedCollapsed[i]) {\n this.reportedCollapsed[i] = info.collapsed;\n this.onCollapse.emit({ index: i, collapsed: info.collapsed, sizes: [...newSizes] });\n }\n });\n\n this._panelSizes = newSizes;\n this.prevSize = newSizes[gutterIdx].toFixed(4);\n\n this.updateFlex();\n this.syncCollapsedState();\n this.onResize.emit({ originalEvent: event, sizes: [...newSizes] });\n }\n\n distribute(newSizes: number[], growIdx: number, requested: number, isKeyDown: boolean | undefined, direction: 'forward' | 'backward') {\n const growInfo = this.panelRegistry[growIdx];\n const max = this.getPanelMaxSize(growIdx);\n let toGrow = Math.min(requested, Math.max(0, max - newSizes[growIdx]));\n\n if (growInfo?.collapsible && growInfo.collapsed) {\n // Re-open symmetrically: any outward drag/step pops a collapsed panel back to (at least) its minimum size.\n const gapSize = this.getPanelMinSize(growIdx) - growInfo.collapsedSize;\n\n toGrow = Math.max(toGrow, gapSize);\n toGrow = Math.min(toGrow, Math.max(0, max - newSizes[growIdx]));\n }\n\n let shrunk = 0;\n const range = direction === 'forward' ? this.range(growIdx + 1, newSizes.length, 1) : this.range(growIdx - 1, -1, -1);\n\n for (const i of range) {\n if (shrunk >= toGrow) break;\n\n const info = this.panelRegistry[i];\n const min = this.getPanelMinSize(i);\n\n if (info?.collapsed) continue;\n\n const effectiveMin = info?.collapsible ? (info.collapsedSize ?? 0) : min;\n const available = Math.max(0, newSizes[i] - effectiveMin);\n const amount = Math.min(toGrow - shrunk, available);\n const rawSize = newSizes[i] - amount;\n\n const validated = this.validatePanelSize(rawSize, info, min, isKeyDown);\n const actualShrunk = newSizes[i] - validated.size;\n\n newSizes[i] = validated.size;\n shrunk += actualShrunk;\n\n if (info) info.collapsed = validated.collapsed;\n }\n\n newSizes[growIdx] += shrunk;\n\n if (growInfo?.collapsible && growInfo.collapsed && newSizes[growIdx] >= this.getPanelMinSize(growIdx)) {\n growInfo.collapsed = false;\n }\n }\n\n validatePanelSize(rawSize: number, info: SplitterPanelInfo | undefined, min: number, isKeyDown: boolean | undefined): { size: number; collapsed: boolean } {\n if (!info?.collapsible) {\n return { size: Math.max(rawSize, min), collapsed: false };\n }\n\n const collapsedSize = info.collapsedSize ?? 0;\n\n if (rawSize >= min) {\n return { size: rawSize, collapsed: false };\n }\n\n // The panel stops shrinking at its minimum size; the moment the user keeps dragging (or\n // stepping) past that minimum, a collapsible panel snaps to its collapsed state.\n return { size: collapsedSize, collapsed: true };\n }\n\n range(start: number, end: number, step: number): number[] {\n const out: number[] = [];\n\n for (let i = start; step > 0 ? i < end : i > end; i += step) out.push(i);\n\n return out;\n }\n\n resizeEnd(event: PointerEvent | KeyboardEvent) {\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.onResizeEnd.emit({ originalEvent: event, sizes: [...this._panelSizes] });\n this.isResizing.set(false);\n this.resizingIndex.set(null);\n this.updateFlex();\n this.clear();\n }\n\n onGutterPointerDown(event: PointerEvent, index: number) {\n if (this.disabled()) {\n return;\n }\n\n this.resizeStart(event, index);\n this.bindPointerListeners();\n }\n\n repeat(event: KeyboardEvent, index: number, step: number) {\n this.resizeStart(event, index, true);\n this.onResizeMove(event, step, true);\n }\n\n setTimer(event: KeyboardEvent, index: number, step: number) {\n if (!this.timer) {\n this.onResizeStart.emit({ originalEvent: event, sizes: [...this._panelSizes] });\n this.repeat(event, index, step);\n this.timer = setInterval(() => {\n this.repeat(event, index, step);\n }, 40);\n }\n }\n\n clearTimer() {\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n onGutterKeyUp(event: KeyboardEvent) {\n if (!this.timer) return;\n this.clearTimer();\n this.resizeEnd(event);\n }\n\n onGutterKeyDown(event: KeyboardEvent, index: number) {\n if (this.disabled()) {\n return;\n }\n\n switch (event.code) {\n case 'ArrowLeft': {\n if (this.layout() === 'horizontal') {\n this.setTimer(event, index, this.step() * -1);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowRight': {\n if (this.layout() === 'horizontal') {\n this.setTimer(event, index, this.step());\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowDown': {\n if (this.layout() === 'vertical') {\n this.setTimer(event, index, this.step());\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowUp': {\n if (this.layout() === 'vertical') {\n this.setTimer(event, index, this.step() * -1);\n }\n\n event.preventDefault();\n break;\n }\n\n default:\n //no op\n break;\n }\n }\n\n bindPointerListeners() {\n if (!this.pointerMoveListener) {\n this.pointerMoveListener = this.renderer.listen(this.document, 'pointermove', (event: PointerEvent) => {\n this.onResizeMove(event);\n });\n }\n\n if (!this.pointerUpListener) {\n this.pointerUpListener = this.renderer.listen(this.document, 'pointerup', (event: PointerEvent) => {\n this.resizeEnd(event);\n this.unbindPointerListeners();\n });\n }\n }\n\n unbindPointerListeners() {\n if (this.pointerMoveListener) {\n this.pointerMoveListener();\n this.pointerMoveListener = null;\n }\n\n if (this.pointerUpListener) {\n this.pointerUpListener();\n this.pointerUpListener = null;\n }\n }\n\n clear() {\n this.dragging = false;\n this.size = null;\n this.startPos = null;\n this.initialSizes = [];\n this.initialCollapsed = [];\n this.reportedCollapsed = [];\n this.initialTotal = 100;\n this.gutterElement = null;\n this.prevPanelIndex = null;\n }\n\n isStateful() {\n return this.stateKey() != null;\n }\n\n getStorage() {\n if (isPlatformBrowser(this.platformId)) {\n switch (this.stateStorage()) {\n case 'local':\n return this.document.defaultView?.localStorage;\n\n case 'session':\n return this.document.defaultView?.sessionStorage;\n\n default:\n throw new Error(this.stateStorage() + ' is not a valid value for the state storage, supported values are \"local\" and \"session\".');\n }\n } else {\n throw new Error('Storage is not a available by default on the server.');\n }\n }\n\n saveState() {\n this.getStorage()?.setItem(this.stateKey()!, JSON.stringify(this._panelSizes));\n }\n\n restoreState() {\n const storage = this.getStorage();\n const stateString = storage?.getItem(this.stateKey()!);\n\n if (stateString) {\n this._panelSizes = JSON.parse(stateString);\n\n this.panelRegistry.forEach((info, i) => {\n if (info?.collapsible) {\n info.collapsed = this._panelSizes[i] <= (info.collapsedSize ?? 0);\n }\n });\n\n this.prevSize = parseFloat(String(this._panelSizes[0])).toFixed(4);\n\n return true;\n }\n\n return false;\n }\n\n /**\n * Resets the panel sizes using the stored state (for a stateful Splitter), the configured\n * sizes, or the default equal distribution.\n */\n resetState() {\n this.initializePanels();\n }\n\n gutterInlineStyle() {\n return {\n 'touch-action': 'none',\n 'user-select': 'none',\n ...(this.horizontal() ? { width: this.gutterSize() + 'px' } : { height: this.gutterSize() + 'px' })\n };\n }\n\n horizontal() {\n return this.layout() === 'horizontal';\n }\n\n round(value: number | undefined): number {\n return Math.round(value ?? 0);\n }\n\n onDestroy() {\n this.unbindPointerListeners();\n this.clearTimer();\n }\n\n dataP = computed(() => {\n return this.cn({\n [this.layout()!]: this.layout(),\n resizing: this.isResizing(),\n disabled: this.disabled()\n });\n });\n}\n\n@NgModule({\n imports: [Splitter, SplitterPanel, SharedModule, BindModule],\n exports: [Splitter, SplitterPanel, SharedModule, BindModule]\n})\nexport class SplitterModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":[],"mappings":"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