UNPKG

smart-webcomponents-angular

Version:

[![Price](https://img.shields.io/badge/price-COMMERCIAL-0098f7.svg)](https://jqwidgets.com/license/)

1 lines 70.8 kB
{"version":3,"file":"smart-webcomponents-angular-multisplitbutton.mjs","sources":["../../multisplitbutton/src/smart.element.ts","../../multisplitbutton/src/smart.multisplitbutton.ts","../../multisplitbutton/src/smart.listitem.ts","../../multisplitbutton/src/smart.listitemsgroup.ts","../../multisplitbutton/src/smart.multisplitbutton.module.ts","../../multisplitbutton/src/smart-webcomponents-angular-multisplitbutton.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 { MultiSplitButton } from './../index';\nimport { Animation, DropDownButtonPosition, DropDownOpenMode, DropDownPosition, FilterMode, SearchMode, VerticalAlignment, MultiSplitButtonSelectionMode, 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, DropDownButtonPosition, DropDownOpenMode, DropDownPosition, FilterMode, SearchMode, VerticalAlignment, MultiSplitButtonSelectionMode, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { MultiSplitButton } from './../index';\n\n\nimport { ListItemComponent } from './smart.listitem';\n\nimport { ListItemsGroupComponent } from './smart.listitemsgroup';\n\n@Directive({\n\texportAs: 'smart-multi-split-button',\tselector: 'smart-multi-split-button, [smart-multi-split-button]'\n})\n\nexport class MultiSplitButtonComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\n\tconstructor(ref: ElementRef<MultiSplitButton>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as MultiSplitButton;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: MultiSplitButton;\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 = <MultiSplitButton>document.createElement('smart-multi-split-button');\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 Sets or retrieves the current animation mode for the component. When the property is set to 'none', all animations are disabled. For other supported values, the animation mode will determine how visual transitions are rendered. */\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 the data source that provides the information required to generate the element’s permanently visible buttons. This property defines where and how the button data is retrieved, ensuring the buttons remain constantly displayed on the element. */\n\t@Input()\n\tget buttonsDataSource(): string[] {\n\t\treturn this.nativeElement ? this.nativeElement.buttonsDataSource : undefined;\n\t}\n\tset buttonsDataSource(value: string[]) {\n\t\tthis.nativeElement ? this.nativeElement.buttonsDataSource = value : undefined;\n\t}\n\n\t/** @description Specifies the data source from which the multi-split button's dropdown menu retrieves and displays its list of options. This setting defines what content appears in the dropdown and enables dynamic or static population of menu items. */\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 Controls whether the jqxMultiSplitButton component is active or inactive. When enabled, users can interact with the jqxMultiSplitButton; when disabled, the component becomes non-interactive and appears visually inactive. */\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 Controls the visibility of the loading indicator, showing it when active and hiding it when not needed. This allows users to receive visual feedback during content loading or processing operations. */\n\t@Input()\n\tget displayLoadingIndicator(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.displayLoadingIndicator : undefined;\n\t}\n\tset displayLoadingIndicator(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.displayLoadingIndicator = value : undefined;\n\t}\n\n\t/** @description Defines or retrieves the displayMember property, which determines the name of the object property to display in the UI. When binding a data collection using the dataSource property, displayMember specifies which property of each data object should be shown to the user. For example, if dataSource is an array of user objects, setting displayMember to \"name\" will display the value of the \"name\" property for each user in the collection. */\n\t@Input()\n\tget displayMember(): string {\n\t\treturn this.nativeElement ? this.nativeElement.displayMember : undefined;\n\t}\n\tset displayMember(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.displayMember = value : undefined;\n\t}\n\n\t/** @description Specifies the parent container element for the button’s dropdown list (popup). Accepts a CSS selector, an element ID, or the literal value 'body' as the target container. Use this option when a CSS property from an ancestor element is affecting the visibility or display of the dropdown list. By setting the parent container, you can control where the dropdown is rendered in the DOM, helping to resolve issues with overflow, clipping, or z-index caused by parent elements. */\n\t@Input()\n\tget dropDownAppendTo(): string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownAppendTo : undefined;\n\t}\n\tset dropDownAppendTo(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownAppendTo = value : undefined;\n\t}\n\n\t/** @description Specifies the location where the dropdown button will be displayed relative to its parent element. Possible values may include options such as \"left,\" \"right,\" \"top,\" or \"bottom,\" allowing you to control the alignment and placement of the dropdown button within the user interface. */\n\t@Input()\n\tget dropDownButtonPosition(): DropDownButtonPosition | string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownButtonPosition : undefined;\n\t}\n\tset dropDownButtonPosition(value: DropDownButtonPosition | string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownButtonPosition = value : undefined;\n\t}\n\n\t/** @description Specifies the behavior of the element's drop-down functionality. - In 'none' mode, the drop-down will never open, regardless of any user interaction. - In 'dropDownButton' mode, the drop-down opens only when the dedicated drop-down button on the element is clicked; clicking other parts of the element will have no effect. - In 'auto' mode, the drop-down opens when any area of the element's top section is clicked, not just the button—providing a more flexible and user-friendly experience. */\n\t@Input()\n\tget dropDownOpenMode(): DropDownOpenMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownOpenMode : undefined;\n\t}\n\tset dropDownOpenMode(value: DropDownOpenMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownOpenMode = value : undefined;\n\t}\n\n\t/** @description When this property is enabled, opening the element’s dropdown will render a transparent overlay layer between the dropdown menu and the rest of the page content. This overlay visually separates the dropdown from the background and can help intercept clicks outside the dropdown to close it or prevent interaction with other elements while the dropdown is open. */\n\t@Input()\n\tget dropDownOverlay(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownOverlay : undefined;\n\t}\n\tset dropDownOverlay(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownOverlay = value : undefined;\n\t}\n\n\t/** @description Specifies the vertical placement of the drop-down list relative to its trigger element. When set to 'auto', the component dynamically chooses whether to display the drop-down above or below the trigger based on available space within the viewport, ensuring that the list remains fully visible without overflow. */\n\t@Input()\n\tget dropDownPosition(): DropDownPosition | string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownPosition : undefined;\n\t}\n\tset dropDownPosition(value: DropDownPosition | string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownPosition = value : undefined;\n\t}\n\n\t/** @description Specifies whether the filtering feature is currently active. When set to true, filtering is enabled and data will be filtered according to the specified criteria; when false, all data is shown without applying any filters. */\n\t@Input()\n\tget filterable(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.filterable : undefined;\n\t}\n\tset filterable(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.filterable = value : undefined;\n\t}\n\n\t/** @description Specifies the filtering behavior applied to the dropdown list when users type or search. This property controls how the available options are filtered and displayed, such as matching items that contain, start with, or exactly match the user's input. */\n\t@Input()\n\tget filterMode(): FilterMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.filterMode : undefined;\n\t}\n\tset filterMode(value: FilterMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.filterMode = value : undefined;\n\t}\n\n\t/** @description Specifies the placeholder text that appears inside the dropdown list's filter input field, providing guidance or example input to help users understand what they can type to filter the list options. */\n\t@Input()\n\tget filterInputPlaceholder(): string {\n\t\treturn this.nativeElement ? this.nativeElement.filterInputPlaceholder : undefined;\n\t}\n\tset filterInputPlaceholder(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.filterInputPlaceholder = value : undefined;\n\t}\n\n\t/** @description When enabled, this setting organizes items into groups based on the first letter of each item's value. Note: This option cannot be used if your dataSource is already grouped, as it only applies to flat (ungrouped) collections. */\n\t@Input()\n\tget grouped(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.grouped : undefined;\n\t}\n\tset grouped(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.grouped = value : undefined;\n\t}\n\n\t/** @description Gets or sets the groupMember property. If groupMember is not explicitly set, it defaults to using the value of the source object's group property. */\n\t@Input()\n\tget groupMember(): string {\n\t\treturn this.nativeElement ? this.nativeElement.groupMember : undefined;\n\t}\n\tset groupMember(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.groupMember = value : undefined;\n\t}\n\n\t/** @description Enhances or retrieves the value of the incrementalSearchDelay property. This property defines the time interval, in milliseconds, that must pass after the user stops typing before the previous search string is cleared. The countdown begins as soon as the user ceases typing, ensuring that only periods of inactivity longer than the specified delay will reset the search input. */\n\t@Input()\n\tget incrementalSearchDelay(): number {\n\t\treturn this.nativeElement ? this.nativeElement.incrementalSearchDelay : undefined;\n\t}\n\tset incrementalSearchDelay(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.incrementalSearchDelay = value : undefined;\n\t}\n\n\t/** @description Gets or sets the current mode for incremental search, which determines how search input is processed as the user types. */\n\t@Input()\n\tget incrementalSearchMode(): SearchMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.incrementalSearchMode : undefined;\n\t}\n\tset incrementalSearchMode(value: SearchMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.incrementalSearchMode = value : undefined;\n\t}\n\n\t/** @description Specifies the vertical dimension (height) of each item, in pixels or another defined unit. This property controls how tall each item appears within the component, affecting layout and spacing. */\n\t@Input()\n\tget itemHeight(): number | null {\n\t\treturn this.nativeElement ? this.nativeElement.itemHeight : undefined;\n\t}\n\tset itemHeight(value: number | null) {\n\t\tthis.nativeElement ? this.nativeElement.itemHeight = value : undefined;\n\t}\n\n\t/** @description The 'itemTemplate' property is a string that specifies the 'id' attribute of an 'HTMLTemplateElement' present in the DOM. This property is used to reference the corresponding template when generating list items, allowing the application to clone and insert the template’s content for each item in the list dynamically. By using an 'HTMLTemplateElement', you can define the structure and layout of individual list items in a reusable, maintainable way. */\n\t@Input()\n\tget itemTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.itemTemplate : undefined;\n\t}\n\tset itemTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.itemTemplate = value : undefined;\n\t}\n\n\t/** @description Specifies the text to be shown alongside the loading indicator when the loader is visible and positioned at either the top or bottom of the component. This text provides context or feedback to users during loading states. */\n\t@Input()\n\tget loadingIndicatorPlaceholder(): string {\n\t\treturn this.nativeElement ? this.nativeElement.loadingIndicatorPlaceholder : undefined;\n\t}\n\tset loadingIndicatorPlaceholder(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.loadingIndicatorPlaceholder = value : undefined;\n\t}\n\n\t/** @description Specifies the on-screen location where the loading indicator will be displayed (e.g., top, bottom, center, or custom coordinates). */\n\t@Input()\n\tget loadingIndicatorPosition(): VerticalAlignment | string {\n\t\treturn this.nativeElement ? this.nativeElement.loadingIndicatorPosition : undefined;\n\t}\n\tset loadingIndicatorPosition(value: VerticalAlignment | string) {\n\t\tthis.nativeElement ? this.nativeElement.loadingIndicatorPosition = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the unlockKey property, a unique key required to unlock access to the product’s features or content. Use this to programmatically provide or verify the unlock key during authentication or activation processes. */\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 or retrieves the current language code (e.g., \"en\", \"fr\", \"es\") for localization. This property works together with messages, ensuring the appropriate language-specific messages are displayed or retrieved based on the selected language. */\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 used in the localization module, typically invoked to handle language changes, translate content, or manage locale-specific operations during application runtime. */\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 or retrieves an object containing customizable strings and messages displayed by the widget, enabling support for localization and internationalization. This property works together with the language setting to provide appropriate translations based on the user's selected language. Use this object to specify translations for all widget text elements. */\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 Specifies whether the popup is currently visible (open) or hidden (closed) on the screen. This property controls the display state of the popup component. */\n\t@Input()\n\tget opened(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.opened : undefined;\n\t}\n\tset opened(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.opened = value : undefined;\n\t}\n\n\t/** @description Prevents users from interacting with the element, disabling all input events such as clicks, typing, or form submissions. The element remains visible, but users cannot select, activate, or modify it in any way. */\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 Gets or sets the selected indexes of items within the button's dropdown menu. This property allows you to programmatically retrieve or update which items in the dropdown are currently selected. */\n\t@Input()\n\tget selectedIndexes(): number[] {\n\t\treturn this.nativeElement ? this.nativeElement.selectedIndexes : undefined;\n\t}\n\tset selectedIndexes(value: number[]) {\n\t\tthis.nativeElement ? this.nativeElement.selectedIndexes = value : undefined;\n\t}\n\n\t/** @description Gets or sets the selected values in the button's drop-down menu. This property allows you to retrieve the currently selected options or specify which options should be selected within the drop-down associated with the button. */\n\t@Input()\n\tget selectedValues(): string[] {\n\t\treturn this.nativeElement ? this.nativeElement.selectedValues : undefined;\n\t}\n\tset selectedValues(value: string[]) {\n\t\tthis.nativeElement ? this.nativeElement.selectedValues = value : undefined;\n\t}\n\n\t/** @description Specifies the maximum number of items a user is allowed to select. If set to 1, only single selection is permitted; higher values enable multiple selections up to the defined limit. */\n\t@Input()\n\tget selectionMode(): MultiSplitButtonSelectionMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.selectionMode : undefined;\n\t}\n\tset selectionMode(value: MultiSplitButtonSelectionMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.selectionMode = value : undefined;\n\t}\n\n\t/** @description Specifies whether the items displayed in the dropdown menu are automatically sorted in alphabetical order. If enabled, all dropdown items will appear in alphabetical sequence; if disabled, items will retain their original order as provided. */\n\t@Input()\n\tget sorted(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.sorted : undefined;\n\t}\n\tset sorted(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.sorted = value : undefined;\n\t}\n\n\t/** @description Specifies the theme to be applied, which controls the overall appearance and styling of the element, including colors, fonts, backgrounds, and other visual properties. This setting allows for consistent visual presentation across the application or component. */\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 When set to true, this property prevents the element from receiving keyboard focus, making it inaccessible via keyboard navigation (such as the Tab key). */\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 Specifies the property of the item object that holds its unique value. This property is used to retrieve or assign the item's value, which is typically leveraged for data binding, form submission, or identifying items within a collection. The value is stored in the specified key of the item object. */\n\t@Input()\n\tget valueMember(): string {\n\t\treturn this.nativeElement ? this.nativeElement.valueMember : undefined;\n\t}\n\tset valueMember(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.valueMember = value : undefined;\n\t}\n\n\t/** @description Specifies whether virtualization is enabled for the button’s drop-down list. When set to true, virtualization improves performance by only rendering items visible in the viewport, which is useful for large datasets. When set to false, all items are rendered regardless of visibility. */\n\t@Input()\n\tget virtualized(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.virtualized : undefined;\n\t}\n\tset virtualized(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.virtualized = value : undefined;\n\t}\n\n\t/** @description This event is triggered whenever the user clicks on the action button, allowing you to execute custom functionality in response to the user's interaction.\n\t* @param event. The custom event. \t*/\n\t@Output() onButtonClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event fires whenever the user modifies the current selection, such as when they highlight different text or select a new item from a list. It is triggered immediately after the selection change occurs, allowing developers to respond dynamically to user selection actions.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\taddedItems, \tdisabled, \tindex, \tlabel, \tremovedItems, \tselected, \tvalue)\n\t* addedItems - An array of List items that have been selected.\n\t* disabled - A flag indicating whether or not the item that caused the change event is disabled.\n\t* index - The index of the List item that triggered the event.\n\t* label - The label of the List item that triggered the event.\n\t* removedItems - An array of List items that have been unselected before the event was fired.\n\t* selected - The selected state of the List item that triggered the event. If an item was selected the value will be true and vice versa.\n\t* value - The value of the List item that triggered the event.\n\t*/\n\t@Output() onChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the drop-down list associated with the button is closed, either by user interaction or programmatically. It allows you to perform actions or execute logic after the drop-down menu has been dismissed.\n\t* @param event. The custom event. \t*/\n\t@Output() onClose: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the dropdown list associated with the button begins to close, either due to user interaction or programmatic actions. It allows you to execute custom logic just before the dropdown is fully closed.\n\t* @param event. The custom event. \t*/\n\t@Output() onClosing: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever a user clicks on an individual item, allowing you to execute custom logic in response to item selection. The event provides details about the clicked item, such as its identifier or associated data, which can be used for further processing or navigation.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\tdisabled, \tindex, \tlabel, \tselected, \tvalue)\n\t* disabled - Indicates whether the List item that was clicked is disabled or not.\n\t* index - Indicates the index of the List item that was clicked.\n\t* label - The label of the List item that was clicked.\n\t* selected - Indicates whether the List item that was clicked is selected or not.\n\t* value - The value of the List item that was clicked.\n\t*/\n\t@Output() onItemClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever the drop-down list of the button is opened, either by a user action such as clicking or by programmatic interaction. It allows you to perform custom actions or update the UI in response to the drop-down list becoming visible.\n\t* @param event. The custom event. \t*/\n\t@Output() onOpen: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered just before the button's dropdown list becomes visible, allowing you to perform actions or modify the dropdown content as it is about to open.\n\t* @param event. The custom event. \t*/\n\t@Output() onOpening: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the user reaches the bottom of the drop-down list by scrolling, indicating that all available list items have been viewed. This can be used to implement features such as lazy loading or dynamic data fetching when additional items need to be loaded into the drop-down.\n\t* @param event. The custom event. \t*/\n\t@Output() onScrollBottomReached: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the user scrolls to the very top (the first item) of the drop-down list. It can be used to detect when the user has reached the beginning of the list, for actions such as loading more items or updating the UI accordingly.\n\t* @param event. The custom event. \t*/\n\t@Output() onScrollTopReached: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Closes the dropdown list associated with the button, hiding its options from view. \n\t*/\n public close(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.close();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.close();\n });\n }\n }\n\n\t/** @description Returns an instance of the item that appears in the element’s dropdown menu. This instance represents the selected item from the dropdown list, allowing access to its properties and methods. \n\t* @param {string} value. The value of an item from the drop down list or a button.\n\t* @returns {HTMLElement}\n */\n\tpublic async getItem(value): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.getItem(value);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic getItemSync(value): HTMLElement {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.getItem(value);\n }\n return null;\n }\n\n\t/** @description Returns an array containing all items currently present in the dropdown list of the split button component. Each array element represents an individual dropdown item, allowing you to access or manipulate the complete set of options available in the split button's dropdown. \n\t* @returns {any[]}\n */\n\tpublic async items(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.items();\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic itemsSync(): any[] {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.items();\n }\n return null;\n }\n\n\t/** @description Inserts a new item into the dropdown list at the specified index, shifting existing items as needed. The new item will appear at the given position within the list, and subsequent items will be moved down to accommodate it. \n\t* @param {number} position. The position where the item must be inserted.\n\t* @param {any} value. The value of the new item.\n\t*/\n public insert(position: number, value: any): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.insert(position, value);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.insert(position, value);\n });\n }\n }\n\n\t/** @description Displays the drop-down list associated with the splitButton control, allowing users to view and select available options. \n\t*/\n public open(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.open();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.open();\n });\n }\n }\n\n\t/** @description Removes an item located at the specified index from the drop-down list, updating the list to exclude the removed item and adjusting the positions of subsequent items accordingly. \n\t* @param {number} position. The position of the removed item.\n\t*/\n public removeAt(position: number): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.removeAt(position);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.removeAt(position);\n });\n }\n }\n\n\t/** @description Updates a specific item within the drop-down list by modifying its properties or replacing its value with new data. This operation allows you to dynamically change the content displayed for a selected option in the drop-down menu. \n\t* @param {number} position. The position where the item must be updated.\n\t* @param {any} value. The value of the updated item.\n\t*/\n public update(position: number, value: any): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.update(position, value);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.update(position, value);\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['buttonClickHandler'] = (event: CustomEvent) => { that.onButtonClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('buttonClick', that.eventHandlers['buttonClickHandler']);\n\n\t\tthat.eventHandlers['changeHandler'] = (event: CustomEvent) => { that.onChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('change', that.eventHandlers['changeHandler']);\n\n\t\tthat.eventHandlers['closeHandler'] = (event: CustomEvent) => { that.onClose.emit(event); }\n\t\tthat.nativeElement.addEventListener('close', that.eventHandlers['closeHandler']);\n\n\t\tthat.eventHandlers['closingHandler'] = (event: CustomEvent) => { that.onClosing.emit(event); }\n\t\tthat.nativeElement.addEventListener('closing', that.eventHandlers['closingHandler']);\n\n\t\tthat.eventHandlers['itemClickHandler'] = (event: CustomEvent) => { that.onItemClick.emit(event); }\n\t\tthat.nativeElement.addEventListener('itemClick', that.eventHandlers['itemClickHandler']);\n\n\t\tthat.eventHandlers['openHandler'] = (event: CustomEvent) => { that.onOpen.emit(event); }\n\t\tthat.nativeElement.addEventListener('open', that.eventHandlers['openHandler']);\n\n\t\tthat.eventHandlers['openingHandler'] = (event: CustomEvent) => { that.onOpening.emit(event); }\n\t\tthat.nativeElement.addEventListener('opening', that.eventHandlers['openingHandler']);\n\n\t\tthat.eventHandlers['scrollBottomReachedHandler'] = (event: CustomEvent) => { that.onScrollBottomReached.emit(event); }\n\t\tthat.nativeElement.addEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\n\t\tthat.eventHandlers['scrollTopReachedHandler'] = (event: CustomEvent) => { that.onScrollTopReached.emit(event); }\n\t\tthat.nativeElement.addEventListener('scrollTopReached', that.eventHandlers['scrollTopReachedHandler']);\n\n\t}\n\n\t/** @description Remove event listeners. */\n\tprivate unlisten(): void {\n const that = this;\n\t\tif (that.eventHandlers['buttonClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('buttonClick', that.eventHandlers['buttonClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['changeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('change', that.eventHandlers['changeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['closeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('close', that.eventHandlers['closeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['closingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('closing', that.eventHandlers['closingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['itemClickHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('itemClick', that.eventHandlers['itemClickHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['openHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('open', that.eventHandlers['openHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['openingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('opening', that.eventHandlers['openingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['scrollBottomReachedHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['scrollTopReachedHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('scrollTopReached', that.eventHandlers['scrollTopReachedHandler']);\n\t\t}\n\n\t}\n}\n","import { ListItem } from './../index';\nimport { ListItemDisplayMode, ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { ListItemDisplayMode, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { ListItem } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-list-item',\tselector: 'smart-list-item, [smart-list-item]'\n})\n\nexport class ListItemComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<ListItem>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as ListItem;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: ListItem;\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 = <ListItem>document.createElement('smart-list-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 */\n\t@Input()\n\tget alternationIndex(): number {\n\t\treturn this.nativeElement ? this.nativeElement.alternationIndex : undefined;\n\t}\n\tset alternationIndex(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.alternationIndex = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget color(): string {\n\t\treturn this.nativeElement ? this.nativeElement.color : undefined;\n\t}\n\tset color(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.color = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget displayMode(): ListItemDisplayMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.displayMode : undefined;\n\t}\n\tset displayMode(value: ListItemDisplayMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.displayMode = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget grouped(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.grouped : undefined;\n\t}\n\tset grouped(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.grouped = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget selected(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.selected : undefined;\n\t}\n\tset selected(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.selected = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget value(): string {\n\t\treturn this.nativeElement ? this.nativeElement.value : undefined;\n\t}\n\tset value(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.value = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget label(): string {\n\t\treturn this.nativeElement ? this.nativeElement.label : undefined;\n\t}\n\tset label(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.label = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget details(): string {\n\t\treturn this.nativeElement ? this.nativeElement.details : undefined;\n\t}\n\tset details(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.details = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget group(): string {\n\t\treturn this.nativeElement ? this.nativeElement.group : undefined;\n\t}\n\tset group(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.group = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget hidden(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.hidden : undefined;\n\t}\n\tset hidden(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.hidden = value : undefined;\n\t}\n\n\t/** @description */\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\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 { ListItemsGroup } 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 { ListItemsGroup } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-list-items-group',\tselector: 'smart-list-items-group, [smart-list-items-group]'\n})\n\nexport class ListItemsGroupComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<ListItemsGroup>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as ListItemsGroup;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: ListItemsGroup;\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 = <ListItemsGroup>document.createElement('smart-list-items-group');\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 */\n\t@Input()\n\tget label(): string {\n\t\treturn this.nativeElement ? this.nativeElement.label : undefined;\n\t}\n\tset label(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.label = value : undefined;\n\t}\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 { NgModule } from '@angular/core';\n\nimport { MultiSplitButtonComponent } from './smart.multisplitbutton';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { ListItemComponent } from './smart.listitem';\nimport { ListItemsGroupComponent } from './smart.listitemsgroup';\n\n@NgModule({\n declarations: [MultiSplitButtonComponent, ListItemComponent, ListItemsGroupComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\texports: [MultiSplitButtonComponent, ListItemComponent, ListItemsGroupComponent]\n})\n\nexport class MultiSplitButtonModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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