smart-webcomponents-angular
Version:
[](https://jqwidgets.com/license/)
1 lines • 64.7 kB
Source Map (JSON)
{"version":3,"file":"smart-webcomponents-angular-splitter.mjs","sources":["../../splitter/src/smart.element.ts","../../splitter/src/smart.splitter.ts","../../splitter/src/smart.splitteritem.ts","../../splitter/src/smart.splitterbar.ts","../../splitter/src/smart.splitter.module.ts","../../splitter/src/smart-webcomponents-angular-splitter.ts"],"sourcesContent":["\ndeclare global {\n interface Window {\n Smart: any;\n}\n}\n\n\nimport { Directive, ElementRef, Input, Output, EventEmitter } from '@angular/core';\nimport { ElementRenderMode } from './../index';\n\n@Directive()\nexport class BaseElement {\n constructor(ref: ElementRef) {\n const that = this;\n this.nativeElement = ref.nativeElement as any;\n\n that.nativeElement.onAttached = () => {\n that.onAttach.emit(that.nativeElement);\n }\n\n that.nativeElement.onDetached = () => {\n that.onDetach.emit(that.nativeElement);\n }\n }\n\n @Output() onCreate: EventEmitter<any> = new EventEmitter();\n @Output() onReady: EventEmitter<any> = new EventEmitter();\n @Output() onAttach: EventEmitter<any> = new EventEmitter();\n @Output() onDetach: EventEmitter<any> = new EventEmitter();\n\n public nativeElement: any;\n\n public addEventListener(type: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions = false): void {\n this.nativeElement.addEventListener(type, listener, options);\n\t}\n\n\tpublic removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options: boolean | AddEventListenerOptions = false): void {\n\t\tthis.nativeElement.removeEventListener(type, listener, options);\n\t}\n\n\tpublic dispatchEvent(event: Event): boolean {\n\t\treturn this.nativeElement.dispatchEvent(event);\n\t}\n\n\tpublic blur(): void {\n\t\tthis.nativeElement.blur();\n\t}\n\n\tpublic click(): void {\n\t\tthis.nativeElement.click();\n\t}\n\n\tpublic focus(options?: FocusOptions): void {\n\t\tthis.nativeElement.focus(options);\n\t}\n\n/** @description Sets or gets the license. */\n\t@Input()\n\tget license(): string {\n\t\treturn this.nativeElement ? this.nativeElement.license : undefined;\n\t}\n\tset license(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.license = value : undefined;\n\t}\n\t\n/** @description Sets or gets the language. Used in conjunction with the property messages. */\n\t@Input()\n\tget locale(): string {\n\t\treturn this.nativeElement ? this.nativeElement.locale : undefined;\n\t}\n\tset locale(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.locale = value : undefined;\n\t}\n\n\t/** @description Callback used to customize the format of the messages that are returned from the Localization Module. */\n\t@Input()\n\tget localizeFormatFunction(): any {\n\t\treturn this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;\n\t}\n\tset localizeFormatFunction(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;\n\t}\n\n\t/** @description Sets or gets an object specifying strings used in the widget that can be localized. Used in conjunction with the property locale. */\n\t@Input()\n\tget messages(): any {\n\t\treturn this.nativeElement ? this.nativeElement.messages : undefined;\n\t}\n\tset messages(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.messages = value : undefined;\n\t}\n\n\t/** @description Sets or gets the value indicating whether the element is aligned to support locales using right-to-left fonts. */\n\t@Input()\n\tget rightToLeft(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.rightToLeft : undefined;\n\t}\n\tset rightToLeft(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.rightToLeft = value : undefined;\n\t}\n\n\t/** @description Determines the theme. Theme defines the look of the element */\n\t@Input()\n\tget theme(): string {\n\t\treturn this.nativeElement ? this.nativeElement.theme : undefined;\n\t}\n\tset theme(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.theme = value : undefined;\n\t}\n}\n\nlet Smart: any;\nif (typeof window !== \"undefined\") {\n\tSmart = window.Smart;\n}\nexport { Smart };\n\n","import { Splitter } from './../index';\nimport { Animation, SplitterAutoFitMode, Orientation, SplitterResizeMode, ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges, Output, EventEmitter, QueryList, ContentChildren } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { Animation, SplitterAutoFitMode, Orientation, SplitterResizeMode, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { Splitter } from './../index';\n\n\nimport { SplitterItemComponent } from './smart.splitteritem';\n\nimport { SplitterBarComponent } from './smart.splitterbar';\n\n@Directive({\n\texportAs: 'smart-splitter',\tselector: 'smart-splitter, [smart-splitter]'\n})\n\nexport class SplitterComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\n\tconstructor(ref: ElementRef<Splitter>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as Splitter;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: Splitter;\n\t/** @description Creates the component on demand.\n\t * @param properties An optional object of properties, which will be added to the template binded ones.\n\t */\n\tpublic createComponent(properties = {}): any {\n \tthis.nativeElement = <Splitter>document.createElement('smart-splitter');\n\t\tfor (let propertyName in properties) { \n \t\t\tthis.nativeElement[propertyName] = properties[propertyName];\n\t\t}\n\t\treturn this.nativeElement;\n\t}\n\t/** @description Specifies or retrieves the current animation mode. When the property is set to 'none', all animations are disabled, resulting in static display without transition effects. Assigning any other valid value enables the corresponding animation mode. */\n\t@Input()\n\tget animation(): Animation | string {\n\t\treturn this.nativeElement ? this.nativeElement.animation : undefined;\n\t}\n\tset animation(value: Animation | string) {\n\t\tthis.nativeElement ? this.nativeElement.animation = value : undefined;\n\t}\n\n\t/** @description Specifies how items are positioned and resized within the Splitter component.Possible values: end – All items are resized to fit exactly within the available space of the Splitter. When a new item is inserted, the required space is taken from the adjacent (neighboring) item, adjusting their sizes so that the total size remains constant and nothing overflows. proportional – All items expand or contract proportionally to occupy the full size of the Splitter. When a new item is added, the space it needs is proportionally deducted from the existing items, maintaining their relative sizes within the total available space. overflow – Items are not resized to fit the Splitter. Instead, each item retains its natural size, even if the total size exceeds the Splitter’s dimensions. In this case, a scrollbar will appear, allowing users to scroll and view all the content that overflows beyond the visible area. */\n\t@Input()\n\tget autoFitMode(): SplitterAutoFitMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.autoFitMode : undefined;\n\t}\n\tset autoFitMode(value: SplitterAutoFitMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.autoFitMode = value : undefined;\n\t}\n\n\t/** @description Determines whether the element is interactive or inactive. When enabled, users can interact with the element; when disabled, the element is non-interactive and typically appears visually distinct (e.g., grayed out) to indicate its inactive state. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.disabled : undefined;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.disabled = value : undefined;\n\t}\n\n\t/** @description Configures or retrieves the data source for the splitter component. When setting, it specifies the structure and content (such as panels or sections) that will be managed and displayed within the splitter. When getting, it returns the current data source used by the splitter. */\n\t@Input()\n\tget dataSource(): any {\n\t\treturn this.nativeElement ? this.nativeElement.dataSource : undefined;\n\t}\n\tset dataSource(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.dataSource = value : undefined;\n\t}\n\n\t/** @description A getter method that retrieves and returns an array containing all the current Splitter items. This allows you to access the complete list of items managed by the Splitter component. */\n\t@Input()\n\tget items(): any {\n\t\treturn this.nativeElement ? this.nativeElement.items : undefined;\n\t}\n\tset items(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.items = value : undefined;\n\t}\n\n\t/** @description When enabled, this setting ensures that all items within the element maintain their original aspect ratios relative to each other whenever the element is resized. This behavior is preserved regardless of whether the size properties of the items are defined in pixels, percentages, or other units. In other words, resizing the overall element will proportionally scale all its child items, keeping their relative dimensions consistent. */\n\t@Input()\n\tget keepProportionsOnResize(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.keepProportionsOnResize : undefined;\n\t}\n\tset keepProportionsOnResize(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.keepProportionsOnResize = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the unlockKey value used to authorize and enable access to the product's features. When setting, this key unlocks the product for use. When getting, it returns the currently assigned unlockKey. */\n\t@Input()\n\tget unlockKey(): string {\n\t\treturn this.nativeElement ? this.nativeElement.unlockKey : undefined;\n\t}\n\tset unlockKey(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.unlockKey = value : undefined;\n\t}\n\n\t/** @description Specifies the language to be used for displaying messages. This property can be set to change the current language or retrieved to identify the active language. It works in conjunction with the messages property, which contains localized message strings for each supported language. Adjusting this property enables seamless switching between different language options in the application’s user interface. */\n\t@Input()\n\tget locale(): string {\n\t\treturn this.nativeElement ? this.nativeElement.locale : undefined;\n\t}\n\tset locale(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.locale = value : undefined;\n\t}\n\n\t/** @description Callback function associated with the localization module, typically used to handle language changes, translate content, or process localization-related events within the application. */\n\t@Input()\n\tget localizeFormatFunction(): any {\n\t\treturn this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;\n\t}\n\tset localizeFormatFunction(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;\n\t}\n\n\t/** @description Defines an object that maps password strength states to their corresponding string values. Each key in the object represents a specific password strength level (such as \"weak,\" \"medium,\" or \"strong\"), and its value provides the associated descriptive label or message to display to users. This allows for customizable text based on the current password strength state. */\n\t@Input()\n\tget messages(): any {\n\t\treturn this.nativeElement ? this.nativeElement.messages : undefined;\n\t}\n\tset messages(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.messages = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the orientation of the splitter, determining whether it is displayed vertically (dividing the area into left and right sections) or horizontally (dividing the area into top and bottom sections). */\n\t@Input()\n\tget orientation(): Orientation | string {\n\t\treturn this.nativeElement ? this.nativeElement.orientation : undefined;\n\t}\n\tset orientation(value: Orientation | string) {\n\t\tthis.nativeElement ? this.nativeElement.orientation = value : undefined;\n\t}\n\n\t/** @description When the element has the 'readonly' attribute, users can view its value but cannot modify, edit, or otherwise change its contents. However, the element may still be focused and its content can be selected and copied by the user. No direct interaction—such as typing, pasting, or deleting—is allowed. */\n\t@Input()\n\tget readonly(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.readonly : undefined;\n\t}\n\tset readonly(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.readonly = value : undefined;\n\t}\n\n\t/** @description 'Specifies how the splitter handles resizing when a user drags the splitter bar. The available modes are:'- 'None:' Resizing is disabled; splitter bars cannot be moved.- 'Adjacent (default):' Only the two panels immediately adjacent to the splitter bar are resized when the bar is dragged. Other panels remain unchanged.- 'End:' Dragging the splitter bar affects only the first panel (located at the left or top, depending on splitter orientation) and the last panel. All intermediate panels between these two remain unaffected.- 'Proportional:' All panels located in the direction the splitter bar is dragged (for example, all panels to the right if dragging right, or below if dragging down) are resized proportionally. The new sizes are calculated based on the current size ratios of these panels, ensuring they maintain their proportional widths or heights relative to each other after resizing.'Use this property to control which panels are resized and how space is distributed when users interact with the splitter.' */\n\t@Input()\n\tget resizeMode(): SplitterResizeMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.resizeMode : undefined;\n\t}\n\tset resizeMode(value: SplitterResizeMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.resizeMode = value : undefined;\n\t}\n\n\t/** @description Specifies the increment or decrement value by which the element's size changes during a resize operation. This value controls how much the element grows or shrinks with each resizing step, allowing for precise adjustments. */\n\t@Input()\n\tget resizeStep(): number {\n\t\treturn this.nativeElement ? this.nativeElement.resizeStep : undefined;\n\t}\n\tset resizeStep(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.resizeStep = value : undefined;\n\t}\n\n\t/** @description Gets or sets a value that specifies whether the element's alignment should accommodate right-to-left (RTL) languages, such as Arabic or Hebrew. When enabled, the element's content and layout will adjust to support RTL text direction, ensuring proper display for locales that use right-to-left scripts. */\n\t@Input()\n\tget rightToLeft(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.rightToLeft : undefined;\n\t}\n\tset rightToLeft(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.rightToLeft = value : undefined;\n\t}\n\n\t/** @description When this feature is enabled, the resizing operation updates the layout in real-time as the user drags the splitter, providing immediate visual feedback. By default, live resizing is disabled; instead, a highlighted guide bar appears during the drag operation, showing where the splitter will be positioned once the user releases the mouse button. The actual layout is only updated after the drag is complete. */\n\t@Input()\n\tget liveResize(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.liveResize : undefined;\n\t}\n\tset liveResize(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.liveResize = value : undefined;\n\t}\n\n\t/** @description Specifies the theme for the element. The theme determines the overall appearance, including colors, fonts, and styling, to ensure a consistent and visually appealing look. */\n\t@Input()\n\tget theme(): string {\n\t\treturn this.nativeElement ? this.nativeElement.theme : undefined;\n\t}\n\tset theme(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.theme = value : undefined;\n\t}\n\n\t/** @description If set to true, the element will be excluded from keyboard navigation and cannot receive focus via keyboard or mouse interactions. */\n\t@Input()\n\tget unfocusable(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.unfocusable : undefined;\n\t}\n\tset unfocusable(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.unfocusable = value : undefined;\n\t}\n\n\t/** @description This event is triggered when a splitter item is collapsed by the user, either through a UI interaction (such as clicking a collapse button) or programmatically. It allows you to execute custom logic or respond to the change when a particular panel within the splitter component is minimized or hidden.\n\t* @param event. The custom event. \t*/\n\t@Output() onCollapse: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever a splitter item is expanded by the user, either through interaction (such as clicking or dragging) or programmatically. It allows developers to execute custom logic in response to the expansion of a specific splitter item within the UI component.\n\t* @param event. The custom event. \t*/\n\t@Output() onExpand: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when a user initiates the resizing of a splitter component, such as clicking and dragging the divider to adjust the size of adjacent panels. It marks the start of the resizing interaction, allowing developers to perform actions or apply styles in response to the beginning of the splitter's adjustment process.\n\t* @param event. The custom event. \t*/\n\t@Output() onResizeStart: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered after the user completes resizing the splitter, indicating that the resizing action has finished and the new panel sizes have been set.\n\t* @param event. The custom event. \t*/\n\t@Output() onResizeEnd: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Appends a new node to the end of the current list or container, adding it as the last child element. This operation updates the data structure to include the newly added node as the final element in the sequence. \n\t* @param {Node} node. The node to append\n\t*/\n public appendChild(node: Node): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.appendChild(node);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.appendChild(node);\n });\n }\n }\n\n\t/** @description Collapses the specified splitter panel, minimizing its size and hiding its content within the container or layout. \n\t* @param {any} item. number indicating the index of the item or an isntance of JQX.SplitterItem\n\t* @param {boolean} far?. Indicates whether the item should collapse to it's far or near side\n\t*/\n public collapse(item: any, far?: boolean): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.collapse(item, far);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.collapse(item, far);\n });\n }\n }\n\n\t/** @description Attempts to expand the splitter item, provided sufficient space is available. The expansion is only performed if there is enough remaining space in the container to accommodate the item's increased size. \n\t* @param {any} item. number indicating the index of the item or an isntance of JQX.SplitterItem\n\t*/\n public expand(item: any): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.expand(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.expand(item);\n });\n }\n }\n\n\t/** @description Conceals the splitter bar element from view, preventing users from interacting with or resizing the associated panels. \n\t* @param {number} splitterBar. A JQX.SplitterBar instance.\n\t* @returns {number}\n */\n\tpublic async hideBar(splitterBar): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.hideBar(splitterBar);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic hideBarSync(splitterBar): number {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.hideBar(splitterBar);\n }\n return null;\n }\n\n\t/** @description Inserts a new Splitter component into the specified position within the layout, allowing the user to divide and resize adjacent sections of the interface. \n\t* @param {number} index. The index at which a new item will be inserted.\n\t* @param {any} details. An Object or string used as content if the splitter item.\n\t*/\n public insert(index: number, details: any): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.insert(index, details);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.insert(index, details);\n });\n }\n }\n\n\t/** @description Inserts the specified \"smart-splitter-item\" node into the DOM immediately before the reference \"smart-splitter-item\" node, ensuring that the new element appears directly before the reference node within the splitter container. This operation preserves the order of splitter items and updates their layout accordingly. \n\t* @param {Node} newNode. The \"smart-splitter-item\" node to insert.\n\t* @param {Node | null} referenceNode?. The \"smart-splitter-item\" node before which newNode is inserted.\n\t* @returns {Node}\n */\n\tpublic async insertBefore(newNode, referenceNode?): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.insertBefore(newNode, referenceNode);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic insertBeforeSync(newNode, referenceNode?): Node {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.insertBefore(newNode, referenceNode);\n }\n return null;\n }\n\n\t/** @description Prevents a splitter item from being resized by the user, ensuring that its current size remains fixed and unchangeable during layout adjustments. \n\t* @param {number} index. The index of a Splitter Bar or it's instance.\n\t*/\n public lockItem(index: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.lockItem(index);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.lockItem(index);\n });\n }\n }\n\n\t/** @description Prevents the splitter bar from being moved by disabling user drag interactions, effectively locking its position and ensuring that adjacent panes cannot be resized. \n\t* @param {number} index. The index of a Splitter Bar or it's instance.\n\t*/\n public lockBar(index: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.lockBar(index);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.lockBar(index);\n });\n }\n }\n\n\t/** @description Removes a Splitter item from the layout, detaching it from its parent container and updating the interface accordingly. This action permanently deletes the specified Splitter component and any associated layout adjustments. \n\t* @param {number} index. An item to be removed.\n\t*/\n public removeAt(index: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.removeAt(index);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.removeAt(index);\n });\n }\n }\n\n\t/** @description Clears all items currently contained within the Splitter component, effectively resetting it to an empty state. This operation removes every panel, section, or child element inside the Splitter, leaving no content displayed. \n\t*/\n public removeAll(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.removeAll();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.removeAll();\n });\n }\n }\n\n\t/** @description Removes a child node of type \"smart-splitter-item\" from its parent element in the DOM, effectively deleting the specified splitter pane and updating the layout accordingly. \n\t* @param {Node} node. The \"smart-splitter-item\" node to remove.\n\t* @returns {Node}\n */\n\tpublic async removeChild(node): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.removeChild(node);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic removeChildSync(node): Node {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.removeChild(node);\n }\n return null;\n }\n\n\t/** @description Reloads and updates the Splitter component, re-rendering its layout and recalculating its size and position to reflect any recent changes to its content, configuration, or container. \n\t*/\n public refresh(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.refresh();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.refresh();\n });\n }\n }\n\n\t/** @description Reveals a previously hidden splitter bar, allowing users to resize adjacent panes or sections within the interface. \n\t* @param {number} splitterBar. An instance of a splitter bar.\n\t*/\n public showBar(splitterBar: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.showBar(splitterBar);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.showBar(splitterBar);\n });\n }\n }\n\n\t/** @description Enables access to a splitter item that was previously locked, allowing users to interact with or modify the item as intended. This action removes any restrictions, making the splitter fully functional within the application. \n\t* @param {number} item. The index of a Splitter Item or it's instance.\n\t*/\n public unlockItem(item: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.unlockItem(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.unlockItem(item);\n });\n }\n }\n\n\t/** @description Enables user interaction with a previously disabled or locked splitter bar, allowing users to adjust the size of adjacent panes or panels by dragging the splitter. \n\t* @param {number} item. The index of a Splitter Bar or it's instance.\n\t*/\n public unlockBar(item: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.unlockBar(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.unlockBar(item);\n });\n }\n }\n\n\t/** @description Updates the configuration of a specific Splitter item within a Splitter component, allowing changes to its properties such as size, orientation, minimum and maximum limits, or other customizable options. This enables dynamic adjustment of the Splitter item's behavior and appearance within the parent Splitter layout. \n\t* @param {any} item. The index of a JQX.SplitterItem or it's instance.\n\t* @param {any} settings. An object containing the properties of a JQX.SplitterItem.\n\t*/\n public update(item: any, settings: any): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.update(item, settings);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.update(item, settings);\n });\n }\n }\n\n\n\tget isRendered(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.isRendered : false;\n\t}\n\n\tngOnInit() {\n\t}\n\n ngAfterViewInit() {\n const that = this;\n\n that.onCreate.emit(that.nativeElement);\n\n\t\tif (Smart) Smart.Render();\n\n\t\tthis.nativeElement.classList.add('smart-angular');\n\n\t\tif (this.nativeElement.whenRendered) this.nativeElement.whenRendered(() => { that.onReady.emit(that.nativeElement); });\n\t\tthis.listen();\n\t}\n\n\tngOnDestroy() {\n\t\tthis.unlisten();\n\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.nativeElement && this.nativeElement.isRendered) {\n\t\t\tfor (const propName in changes) {\n\t\t\t\tif (changes.hasOwnProperty(propName)) {\n\t\t\t\t\tthis.nativeElement[propName] = changes[propName].currentValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/** @description Add event listeners. */\n\tprivate listen(): void {\n const that = this;\n\t\tthat.eventHandlers['collapseHandler'] = (event: CustomEvent) => { that.onCollapse.emit(event); }\n\t\tthat.nativeElement.addEventListener('collapse', that.eventHandlers['collapseHandler']);\n\n\t\tthat.eventHandlers['expandHandler'] = (event: CustomEvent) => { that.onExpand.emit(event); }\n\t\tthat.nativeElement.addEventListener('expand', that.eventHandlers['expandHandler']);\n\n\t\tthat.eventHandlers['resizeStartHandler'] = (event: CustomEvent) => { that.onResizeStart.emit(event); }\n\t\tthat.nativeElement.addEventListener('resizeStart', that.eventHandlers['resizeStartHandler']);\n\n\t\tthat.eventHandlers['resizeEndHandler'] = (event: CustomEvent) => { that.onResizeEnd.emit(event); }\n\t\tthat.nativeElement.addEventListener('resizeEnd', that.eventHandlers['resizeEndHandler']);\n\n\t}\n\n\t/** @description Remove event listeners. */\n\tprivate unlisten(): void {\n const that = this;\n\t\tif (that.eventHandlers['collapseHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('collapse', that.eventHandlers['collapseHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['expandHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('expand', that.eventHandlers['expandHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['resizeStartHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('resizeStart', that.eventHandlers['resizeStartHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['resizeEndHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('resizeEnd', that.eventHandlers['resizeEndHandler']);\n\t\t}\n\n\t}\n}\n","import { SplitterItem } from './../index';\nimport { ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { SplitterItem } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-splitter-item',\tselector: 'smart-splitter-item, [smart-splitter-item]'\n})\n\nexport class SplitterItemComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<SplitterItem>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as SplitterItem;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: SplitterItem;\n\t/** @description Creates the component on demand.\n\t * @param properties An optional object of properties, which will be added to the template binded ones.\n\t */\n\tpublic createComponent(properties = {}): any {\n \tthis.nativeElement = <SplitterItem>document.createElement('smart-splitter-item');\n\t\tfor (let propertyName in properties) { \n \t\t\tthis.nativeElement[propertyName] = properties[propertyName];\n\t\t}\n\t\treturn this.nativeElement;\n\t}\n\t/** @description Determines whether the element is interactive or not. When enabled, users can interact with the element; when disabled, the element is non-interactive and typically appears visually dimmed or grayed out. */\n\t@Input()\n\tget disabled(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.disabled : undefined;\n\t}\n\tset disabled(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.disabled = value : undefined;\n\t}\n\n\t/** @description Indicates whether the item is currently collapsed ('true') or expanded ('false'). This property controls the visibility of the item's content in collapsible interfaces or components. */\n\t@Input()\n\tget collapsed(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.collapsed : undefined;\n\t}\n\tset collapsed(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.collapsed = value : undefined;\n\t}\n\n\t/** @description Specifies whether the item is collapsible. If set to true, the item can be expanded or collapsed by the user. If set to false, the item remains permanently expanded and cannot be collapsed. */\n\t@Input()\n\tget collapsible(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.collapsible : undefined;\n\t}\n\tset collapsible(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.collapsible = value : undefined;\n\t}\n\n\t/** @description Specifies the elements or components that are displayed within each section (item) of the splitter layout. This property defines what content will appear in each resizable panel managed by the splitter. */\n\t@Input()\n\tget content(): any {\n\t\treturn this.nativeElement ? this.nativeElement.content : undefined;\n\t}\n\tset content(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.content = value : undefined;\n\t}\n\n\t/** @description Specifies whether the item can be resized by the user. If set to true, resizing is enabled; if set to false, the item's size remains fixed. */\n\t@Input()\n\tget locked(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.locked : undefined;\n\t}\n\tset locked(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.locked = value : undefined;\n\t}\n\n\t/** @description Specifies the maximum allowable size for the item. Values exceeding this limit will not be accepted or processed. */\n\t@Input()\n\tget max(): string {\n\t\treturn this.nativeElement ? this.nativeElement.max : undefined;\n\t}\n\tset max(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.max = value : undefined;\n\t}\n\n\t/** @description Specifies the minimum allowed size (in the relevant unit) for the item, preventing it from shrinking below this value during layout or resizing. */\n\t@Input()\n\tget min(): string {\n\t\treturn this.nativeElement ? this.nativeElement.min : undefined;\n\t}\n\tset min(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.min = value : undefined;\n\t}\n\n\t/** @description Specifies the dimensions or overall measurements of the item, such as its width, height, or depth. This property allows you to control how large or small the item appears within its container or layout. */\n\t@Input()\n\tget size(): string {\n\t\treturn this.nativeElement ? this.nativeElement.size : undefined;\n\t}\n\tset size(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.size = value : undefined;\n\t}\n\n\t/** @description Collapses the item, hiding its content or child elements from view. This action reduces the item's visible footprint, typically as part of an expandable/collapsible user interface component such as an accordion or dropdown. \n\t* @param {string} far. If set to true the item will collapse to it's far side ( to the right for vertical splitter and down for horizontal)\n\t*/\n public collapse(far: string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.collapse(far);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.collapse(far);\n });\n }\n }\n\n\t/** @description Expands the item to display its hidden content or details when it is currently in a collapsed (hidden) state. \n\t*/\n public expand(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.expand();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.expand();\n });\n }\n }\n\n\t/** @description Prevents the item from being resized, ensuring its dimensions remain fixed and cannot be altered by the user or through code. \n\t*/\n public lock(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.lock();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.lock();\n });\n }\n }\n\n\t/** @description Unlocks access to an item that was previously restricted or unavailable, allowing full interaction or use of its features. \n\t*/\n public unlock(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.unlock();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.unlock();\n });\n }\n }\n\n\n\tget isRendered(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.isRendered : false;\n\t}\n\n\tngOnInit() {\n\t}\n\n ngAfterViewInit() {\n const that = this;\n\n that.onCreate.emit(that.nativeElement);\n\n\t\tthis.nativeElement.classList.add('smart-angular');\n\n\t\tif (this.nativeElement.whenRendered) this.nativeElement.whenRendered(() => { that.onReady.emit(that.nativeElement); });\n\t}\n\n\tngOnDestroy() {\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.nativeElement && this.nativeElement.isRendered) {\n\t\t\tfor (const propName in changes) {\n\t\t\t\tif (changes.hasOwnProperty(propName)) {\n\t\t\t\t\tthis.nativeElement[propName] = changes[propName].currentValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n","import { SplitterBar } from './../index';\nimport { ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { SplitterBar } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-splitter-bar',\tselector: 'smart-splitter-bar, [smart-splitter-bar]'\n})\n\nexport class SplitterBarComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<SplitterBar>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as SplitterBar;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: SplitterBar;\n\t/** @description Creates the component on demand.\n\t * @param properties An optional object of properties, which will be added to the template binded ones.\n\t */\n\tpublic createComponent(properties = {}): any {\n \tthis.nativeElement = <SplitterBar>document.createElement('smart-splitter-bar');\n\t\tfor (let propertyName in properties) { \n \t\t\tthis.nativeElement[propertyName] = properties[propertyName];\n\t\t}\n\t\treturn this.nativeElement;\n\t}\n\t/** @description Conceals the splitter bar element from view, preventing users from seeing or interacting with it within the user interface. \n\t*/\n public hide(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.hide();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.hide();\n });\n }\n }\n\n\t/** @description Reveals a previously hidden splitter bar, allowing users to resize or adjust the layout between adjacent panels or sections within the user interface. \n\t*/\n public show(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.show();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.show();\n });\n }\n }\n\n\t/** @description Prevents the splitter bar from being moved or adjusted by the user, ensuring it remains fixed in its current position. \n\t*/\n public lock(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.lock();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.lock();\n });\n }\n }\n\n\t/** @description Enables user interaction with the splitter bar, allowing users to drag and resize adjacent panels or sections within the interface. \n\t*/\n public unlock(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.unlock();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.unlock();\n });\n }\n }\n\n\n\tget isRendered(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.isRendered : false;\n\t}\n\n\tngOnInit() {\n\t}\n\n ngAfterViewInit() {\n const that = this;\n\n that.onCreate.emit(that.nativeElement);\n\n\t\tif (Smart) Smart.Render();\n\n\t\tthis.nativeElement.classList.add('smart-angular');\n\n\t\tif (this.nativeElement.whenRendered) this.nativeElement.whenRendered(() => { that.onReady.emit(that.nativeElement); });\n\t}\n\n\tngOnDestroy() {\t}\n\n\tngOnChanges(changes: SimpleChanges) {\n\t\tif (this.nativeElement && this.nativeElement.isRendered) {\n\t\t\tfor (const propName in changes) {\n\t\t\t\tif (changes.hasOwnProperty(propName)) {\n\t\t\t\t\tthis.nativeElement[propName] = changes[propName].currentValue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n}\n","import { NgModule } from '@angular/core';\n\nimport { SplitterComponent } from './smart.splitter';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { SplitterItemComponent } from './smart.splitteritem';\nimport { SplitterBarComponent } from './smart.splitterbar';\n\n@NgModule({\n declarations: [SplitterComponent, SplitterItemComponent, SplitterBarComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\texports: [SplitterComponent, SplitterItemComponent, SplitterBarComponent]\n})\n\nexport class SplitterModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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