primeng
Version:
PrimeNG is an open source UI library for Angular featuring a rich set of 80+ components, a theme designer, various theme alternatives such as Material, Bootstrap, Tailwind, premium templates and professional support. In addition, it integrates with PrimeB
1 lines • 43.2 kB
Source Map (JSON)
{"version":3,"file":"primeng-splitter.mjs","sources":["../../src/splitter/style/splitterstyle.ts","../../src/splitter/splitter.ts","../../src/splitter/primeng-splitter.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nimport { BaseStyle } from 'primeng/base';\n\nconst theme = ({ dt }) => `\n.p-splitter {\n display: flex;\n flex-wrap: nowrap;\n border: 1px solid ${dt('splitter.border.color')};\n background: ${dt('splitter.background')};\n border-radius: ${dt('border.radius.md')};\n color: ${dt('splitter.color')};\n}\n\n.p-splitter-vertical {\n flex-direction: column;\n}\n\n.p-splitter-gutter {\n flex-grow: 0;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n z-index: 1;\n background: ${dt('splitter.gutter.background')};\n}\n\n.p-splitter-gutter-handle {\n border-radius: ${dt('splitter.handle.border.radius')};\n background: ${dt('splitter.handle.background')};\n transition: outline-color ${dt('splitter.transition.duration')}, box-shadow ${dt('splitter.transition.duration')};\n outline-color: transparent;\n}\n\n.p-splitter-gutter-handle:focus-visible {\n box-shadow: ${dt('splitter.handle.focus.ring.shadow')};\n outline: ${dt('splitter.handle.focus.ring.width')} ${dt('splitter.handle.focus.ring.style')} ${dt('splitter.handle.focus.ring.color')};\n outline-offset: ${dt('splitter.handle.focus.ring.offset')};\n}\n\n.p-splitter-horizontal.p-splitter-resizing {\n cursor: col-resize;\n user-select: none;\n}\n\n.p-splitter-vertical.p-splitter-resizing {\n cursor: row-resize;\n user-select: none;\n}\n\n.p-splitter-horizontal > .p-splitter-gutter > .p-splitter-gutter-handle {\n height: ${dt('splitter.handle.size')};\n width: 100%;\n}\n\n.p-splitter-vertical > .p-splitter-gutter > .p-splitter-gutter-handle {\n width: ${dt('splitter.handle.size')};\n height: 100%;\n}\n\n.p-splitter-horizontal > .p-splitter-gutter {\n cursor: col-resize;\n}\n\n.p-splitter-vertical > .p-splitter-gutter {\n cursor: row-resize;\n}\n\n.p-splitterpanel {\n flex-grow: 1;\n overflow: hidden;\n}\n\n.p-splitterpanel-nested {\n display: flex;\n flex-grow: 1;\n justify-content: center;\n}\n\n.p-splitterpanel .p-splitter {\n flex-grow: 1;\n border: 0 none;\n}\n`;\n\nconst classes = {\n root: ({ props }) => ['p-splitter p-component', 'p-splitter-' + props.layout],\n gutter: 'p-splitter-gutter',\n gutterHandle: 'p-splitter-gutter-handle'\n};\n\n/*const inlineStyles = {\n root: ({ props }) => [{ display: 'flex', 'flex-wrap': 'nowrap' }, props.layout === 'vertical' ? { 'flex-direction': 'column' } : '']\n};*/\n\n@Injectable()\nexport class SplitterStyle extends BaseStyle {\n name = 'splitter';\n\n theme = theme;\n\n classes = classes;\n\n //inlineStyles = inlineStyles;\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 gutter element\n */\n gutter = 'p-splitter-gutter',\n /**\n * Class name of the gutter handle element\n */\n gutterHandle = 'p-splitter-gutter-handle'\n}\n\nexport interface SplitterStyle extends BaseStyle {}\n","import { CommonModule, isPlatformBrowser } from '@angular/common';\nimport {\n AfterContentInit,\n ChangeDetectionStrategy,\n Component,\n computed,\n contentChild,\n ContentChildren,\n ElementRef,\n EventEmitter,\n forwardRef,\n inject,\n Input,\n NgModule,\n numberAttribute,\n Output,\n QueryList,\n ViewChild,\n ViewEncapsulation\n} from '@angular/core';\nimport { addClass, getHeight, getOuterHeight, getOuterWidth, getWidth, hasClass, isRTL, removeClass } from '@primeuix/utils';\nimport { PrimeTemplate, SharedModule } from 'primeng/api';\nimport { BaseComponent } from 'primeng/basecomponent';\nimport { Nullable, VoidListener } from 'primeng/ts-helpers';\nimport { SplitterResizeEndEvent, SplitterResizeStartEvent } from './splitter.interface';\nimport { SplitterStyle } from './style/splitterstyle';\n\n@Component({\n selector: 'p-splitter-panel',\n standalone: true,\n imports: [CommonModule],\n template: `<ng-content></ng-content>`,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'p-splitterpanel'\n }\n})\nexport class SplitterPanel extends BaseComponent {\n splitter = contentChild(forwardRef(() => Splitter));\n\n nestedState = computed(() => this.splitter());\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: [CommonModule, SharedModule],\n template: `\n <div\n #container\n [ngClass]=\"containerClass()\"\n [class]=\"styleClass\"\n [ngStyle]=\"style\"\n [style]=\"{ display: 'flex', 'flex-wrap': 'nowrap', 'flex-direction': layout === 'vertical' ? 'column' : '' }\"\n [attr.data-pc-name]=\"'splitter'\"\n [attr.data-p-gutter-resizing]=\"false\"\n [attr.data-pc-section]=\"'root'\"\n >\n <ng-template ngFor let-panel [ngForOf]=\"panels\" let-i=\"index\">\n <div [ngClass]=\"panelContainerClass()\" [class]=\"panelStyleClass\" [ngStyle]=\"panelStyle\" tabindex=\"-1\" [attr.data-pc-name]=\"'splitter'\" [attr.data-pc-section]=\"'root'\">\n <ng-container *ngTemplateOutlet=\"panel\"></ng-container>\n </div>\n <div\n *ngIf=\"i !== panels.length - 1\"\n class=\"p-splitter-gutter\"\n role=\"separator\"\n tabindex=\"-1\"\n (mousedown)=\"onGutterMouseDown($event, i)\"\n (touchstart)=\"onGutterTouchStart($event, i)\"\n (touchmove)=\"onGutterTouchMove($event)\"\n (touchend)=\"onGutterTouchEnd($event)\"\n [attr.data-p-gutter-resizing]=\"false\"\n [attr.data-pc-section]=\"'gutter'\"\n >\n <div\n class=\"p-splitter-gutter-handle\"\n tabindex=\"0\"\n [ngStyle]=\"gutterStyle()\"\n [attr.aria-orientation]=\"layout\"\n [attr.aria-valuenow]=\"prevSize\"\n [attr.data-pc-section]=\"'gutterhandle'\"\n (keyup)=\"onGutterKeyUp($event)\"\n (keydown)=\"onGutterKeyDown($event, i)\"\n ></div>\n </div>\n </ng-template>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n '[class.p-splitterpanel-nested]': 'nested'\n },\n providers: [SplitterStyle]\n})\nexport class Splitter extends BaseComponent implements AfterContentInit {\n /**\n * Style class of the component.\n * @group Props\n */\n @Input() styleClass: string | undefined;\n /**\n * Style class of the panel.\n * @group Props\n */\n @Input() panelStyleClass: string | undefined;\n /**\n * Inline style of the component.\n * @group Props\n */\n @Input() style: { [klass: string]: any } | null | undefined;\n /**\n * Inline style of the panel.\n * @group Props\n */\n @Input() panelStyle: { [klass: string]: any } | null | undefined;\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 @Input() stateStorage: string | undefined = 'session';\n /**\n * Storage identifier of a stateful Splitter.\n * @group Props\n */\n @Input() stateKey: string | undefined | null = null;\n /**\n * Orientation of the panels. Valid values are 'horizontal' and 'vertical'.\n * @group Props\n */\n @Input() layout: string | undefined = 'horizontal';\n /**\n * Size of the divider in pixels.\n * @group Props\n */\n @Input({ transform: numberAttribute }) gutterSize: number = 4;\n /**\n * Step factor to increment/decrement the size of the panels while pressing the arrow keys.\n * @group Props\n */\n @Input({ transform: numberAttribute }) step: number = 5;\n /**\n * Minimum size of the elements relative to 100%.\n * @group Props\n */\n @Input() minSizes: number[] = [];\n /**\n * Size of the elements relative to 100%.\n * @group Props\n */\n @Input() get panelSizes(): number[] {\n return this._panelSizes;\n }\n set panelSizes(val: number[]) {\n this._panelSizes = val;\n\n if (this.el && this.el.nativeElement && this.panels.length > 0) {\n let children = [...this.el.nativeElement.children[0].children].filter((child) => hasClass(child, 'p-splitterpanel'));\n let _panelSizes = [];\n\n this.panels.map((panel, i) => {\n let panelInitialSize = this.panelSizes.length - 1 >= i ? this.panelSizes[i] : null;\n let panelSize = panelInitialSize || 100 / this.panels.length;\n _panelSizes[i] = panelSize;\n children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n });\n }\n }\n /**\n * Callback to invoke when resize ends.\n * @param {SplitterResizeEndEvent} event - Custom panel resize end event\n * @group Emits\n */\n @Output() onResizeEnd: EventEmitter<SplitterResizeEndEvent> = new EventEmitter<SplitterResizeEndEvent>();\n /**\n * Callback to invoke when resize starts.\n * @param {SplitterResizeStartEvent} event - Custom panel resize start event\n * @group Emits\n */\n @Output() onResizeStart: EventEmitter<SplitterResizeStartEvent> = new EventEmitter<SplitterResizeStartEvent>();\n\n @ViewChild('container', { static: false }) containerViewChild: Nullable<ElementRef>;\n\n @ContentChildren(PrimeTemplate) templates!: QueryList<PrimeTemplate>;\n\n @ContentChildren('panel', { descendants: false }) panelChildren!: QueryList<ElementRef>;\n\n nested: boolean = false;\n\n panels: any[] = [];\n\n dragging: boolean = false;\n\n mouseMoveListener: VoidListener;\n\n mouseUpListener: VoidListener;\n\n touchMoveListener: VoidListener;\n\n touchEndListener: VoidListener;\n\n size: Nullable<number>;\n\n gutterElement: Nullable<ElementRef | HTMLElement>;\n\n startPos: Nullable<number>;\n\n prevPanelElement: Nullable<ElementRef | HTMLElement>;\n\n nextPanelElement: Nullable<ElementRef | HTMLElement>;\n\n nextPanelSize: Nullable<number>;\n\n prevPanelSize: Nullable<number>;\n\n _panelSizes: number[] = [];\n\n prevPanelIndex: Nullable<number>;\n\n timer: any;\n\n prevSize: any;\n\n _componentStyle = inject(SplitterStyle);\n\n ngOnInit() {\n super.ngOnInit();\n this.nested = this.isNested();\n }\n\n ngAfterContentInit() {\n if (this.templates && this.templates.toArray().length > 0) {\n this.templates.forEach((item) => {\n switch (item.getType()) {\n case 'panel':\n this.panels.push(item.template);\n break;\n default:\n this.panels.push(item.template);\n break;\n }\n });\n }\n if (this.panelChildren && this.panelChildren.toArray().length > 0) {\n this.panelChildren.forEach((item) => {\n this.panels.push(item);\n });\n }\n }\n\n ngAfterViewInit() {\n super.ngAfterViewInit();\n if (isPlatformBrowser(this.platformId)) {\n if (this.panels && this.panels.length) {\n let initialized = false;\n if (this.isStateful()) {\n initialized = this.restoreState();\n }\n\n if (!initialized) {\n let children = [...this.el.nativeElement.children[0].children].filter((child) => hasClass(child, 'p-splitterpanel'));\n let _panelSizes = [];\n\n this.panels.map((panel, i) => {\n let panelInitialSize = this.panelSizes.length - 1 >= i ? this.panelSizes[i] : null;\n let panelSize = panelInitialSize || 100 / this.panels.length;\n _panelSizes[i] = panelSize;\n children[i].style.flexBasis = 'calc(' + panelSize + '% - ' + (this.panels.length - 1) * (this.gutterSize as number) + 'px)';\n });\n\n this._panelSizes = _panelSizes;\n\n this.prevSize = parseFloat(_panelSizes[0]).toFixed(4);\n }\n }\n }\n }\n\n resizeStart(event: TouchEvent | MouseEvent, index: number, isKeyDown?: boolean) {\n this.gutterElement = (event.currentTarget as HTMLElement) || (event.target as HTMLElement).parentElement;\n this.size = this.horizontal() ? getWidth((this.containerViewChild as ElementRef).nativeElement) : getHeight((this.containerViewChild as ElementRef).nativeElement);\n\n if (!isKeyDown) {\n this.dragging = true;\n this.startPos = this.horizontal() ? (event instanceof MouseEvent ? event.pageX : event.changedTouches[0].pageX) : event instanceof MouseEvent ? event.pageY : event.changedTouches[0].pageY;\n }\n\n this.prevPanelElement = this.gutterElement.previousElementSibling as HTMLElement;\n this.nextPanelElement = this.gutterElement.nextElementSibling as HTMLElement;\n\n if (isKeyDown) {\n this.prevPanelSize = this.horizontal() ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true);\n this.nextPanelSize = this.horizontal() ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true);\n } else {\n this.prevPanelSize = (100 * (this.horizontal() ? getOuterWidth(this.prevPanelElement, true) : getOuterHeight(this.prevPanelElement, true))) / this.size;\n this.nextPanelSize = (100 * (this.horizontal() ? getOuterWidth(this.nextPanelElement, true) : getOuterHeight(this.nextPanelElement, true))) / this.size;\n }\n\n this.prevPanelIndex = index;\n addClass(this.gutterElement, 'p-splitter-gutter-resizing');\n this.gutterElement.setAttribute('data-p-gutter-resizing', 'true');\n addClass((this.containerViewChild as ElementRef).nativeElement, 'p-splitter-resizing');\n this.containerViewChild.nativeElement.setAttribute('data-p-resizing', 'true');\n this.onResizeStart.emit({ originalEvent: event, sizes: this._panelSizes as number[] });\n }\n\n onResize(event: MouseEvent, step?: number, isKeyDown?: boolean) {\n let newPos, newPrevPanelSize, newNextPanelSize;\n\n if (isKeyDown) {\n if (this.horizontal()) {\n newPrevPanelSize = (100 * (this.prevPanelSize + step)) / this.size;\n newNextPanelSize = (100 * (this.nextPanelSize - step)) / this.size;\n } else {\n newPrevPanelSize = (100 * (this.prevPanelSize - step)) / this.size;\n newNextPanelSize = (100 * (this.nextPanelSize + step)) / this.size;\n }\n } else {\n if (this.horizontal()) {\n if (isRTL(this.el.nativeElement)) {\n newPos = ((this.startPos - event.pageX) * 100) / this.size;\n } else {\n newPos = ((event.pageX - this.startPos) * 100) / this.size;\n }\n } else {\n newPos = ((event.pageY - this.startPos) * 100) / this.size;\n }\n\n newPrevPanelSize = (this.prevPanelSize as number) + newPos;\n newNextPanelSize = (this.nextPanelSize as number) - newPos;\n }\n\n this.prevSize = parseFloat(newPrevPanelSize).toFixed(4);\n\n if (this.validateResize(newPrevPanelSize, newNextPanelSize)) {\n (this.prevPanelElement as HTMLElement).style.flexBasis = 'calc(' + newPrevPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n (this.nextPanelElement as HTMLElement).style.flexBasis = 'calc(' + newNextPanelSize + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n this._panelSizes[this.prevPanelIndex as number] = newPrevPanelSize;\n this._panelSizes[(this.prevPanelIndex as number) + 1] = newNextPanelSize;\n }\n }\n\n resizeEnd(event: MouseEvent | TouchEvent) {\n if (this.isStateful()) {\n this.saveState();\n }\n\n this.onResizeEnd.emit({ originalEvent: event, sizes: this._panelSizes });\n removeClass(this.gutterElement as any, 'p-splitter-gutter-resizing');\n removeClass((this.containerViewChild as ElementRef).nativeElement, 'p-splitter-resizing');\n this.clear();\n }\n\n onGutterMouseDown(event: MouseEvent, index: number) {\n this.resizeStart(event, index);\n this.bindMouseListeners();\n }\n\n onGutterTouchStart(event: TouchEvent, index: number) {\n if (event.cancelable) {\n this.resizeStart(event, index);\n this.bindTouchListeners();\n\n event.preventDefault();\n }\n }\n\n onGutterTouchMove(event) {\n this.onResize(event);\n event.preventDefault();\n }\n\n onGutterTouchEnd(event: TouchEvent) {\n this.resizeEnd(event);\n this.unbindTouchListeners();\n\n if (event.cancelable) event.preventDefault();\n }\n\n repeat(event, index, step) {\n this.resizeStart(event, index, true);\n this.onResize(event, step, true);\n }\n\n setTimer(event, index, step) {\n this.clearTimer();\n this.timer = setTimeout(() => {\n this.repeat(event, index, step);\n }, 40);\n }\n\n clearTimer() {\n if (this.timer) {\n clearTimeout(this.timer);\n }\n }\n\n onGutterKeyUp(event) {\n this.clearTimer();\n this.resizeEnd(event);\n }\n\n onGutterKeyDown(event, index) {\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 * -1);\n }\n\n event.preventDefault();\n break;\n }\n\n case 'ArrowUp': {\n if (this.layout === 'vertical') {\n this.setTimer(event, index, this.step);\n }\n\n event.preventDefault();\n break;\n }\n\n default:\n //no op\n break;\n }\n }\n\n validateResize(newPrevPanelSize: number, newNextPanelSize: number) {\n if (this.minSizes.length >= 1 && this.minSizes[0] && this.minSizes[0] > newPrevPanelSize) {\n return false;\n }\n\n if (this.minSizes.length > 1 && this.minSizes[1] && this.minSizes[1] > newNextPanelSize) {\n return false;\n }\n\n return true;\n }\n\n bindMouseListeners() {\n if (!this.mouseMoveListener) {\n this.mouseMoveListener = this.renderer.listen(this.document, 'mousemove', (event) => {\n this.onResize(event);\n });\n }\n\n if (!this.mouseUpListener) {\n this.mouseUpListener = this.renderer.listen(this.document, 'mouseup', (event) => {\n this.resizeEnd(event);\n this.unbindMouseListeners();\n });\n }\n }\n\n bindTouchListeners() {\n if (!this.touchMoveListener) {\n this.touchMoveListener = this.renderer.listen(this.document, 'touchmove', (event) => {\n this.onResize(event.changedTouches[0]);\n });\n }\n\n if (!this.touchEndListener) {\n this.touchEndListener = this.renderer.listen(this.document, 'touchend', (event) => {\n this.resizeEnd(event);\n this.unbindTouchListeners();\n });\n }\n }\n\n unbindMouseListeners() {\n if (this.mouseMoveListener) {\n this.mouseMoveListener();\n this.mouseMoveListener = null;\n }\n\n if (this.mouseUpListener) {\n this.mouseUpListener();\n this.mouseUpListener = null;\n }\n }\n\n unbindTouchListeners() {\n if (this.touchMoveListener) {\n this.touchMoveListener();\n this.touchMoveListener = null;\n }\n\n if (this.touchEndListener) {\n this.touchEndListener();\n this.touchEndListener = null;\n }\n }\n\n clear() {\n this.dragging = false;\n this.size = null;\n this.startPos = null;\n this.prevPanelElement = null;\n this.nextPanelElement = null;\n this.prevPanelSize = null;\n this.nextPanelSize = null;\n this.gutterElement = null;\n this.prevPanelIndex = null;\n }\n\n isNested() {\n if (this.el.nativeElement) {\n let parent = this.el.nativeElement.parentElement;\n while (parent && !hasClass(parent, 'p-splitter')) {\n parent = parent.parentElement;\n }\n\n return parent !== null;\n } else {\n return false;\n }\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 as string, JSON.stringify(this._panelSizes));\n }\n\n restoreState() {\n const storage = this.getStorage();\n const stateString = storage.getItem(this.stateKey as string);\n\n if (stateString) {\n this._panelSizes = JSON.parse(stateString);\n let children = [...(this.containerViewChild as ElementRef).nativeElement.children].filter((child) => hasClass(child, 'p-splitterpanel'));\n children.forEach((child, i) => {\n child.style.flexBasis = 'calc(' + this._panelSizes[i] + '% - ' + (this.panels.length - 1) * this.gutterSize + 'px)';\n });\n\n return true;\n }\n\n return false;\n }\n\n containerClass() {\n return {\n 'p-splitter p-component': true,\n 'p-splitter-horizontal': this.layout === 'horizontal',\n 'p-splitter-vertical': this.layout === 'vertical'\n };\n }\n\n panelContainerClass() {\n return {\n 'p-splitterpanel': true,\n 'p-splitterpanel-nested': true\n };\n }\n\n gutterStyle() {\n if (this.horizontal()) return { width: this.gutterSize + 'px' };\n else return { height: this.gutterSize + 'px' };\n }\n\n horizontal() {\n return this.layout === 'horizontal';\n }\n}\n\n@NgModule({\n imports: [Splitter, SplitterPanel, SharedModule],\n exports: [Splitter, SplitterPanel, SharedModule]\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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"}