smart-webcomponents-angular
Version:
[](https://jqwidgets.com/license/)
1 lines • 70.8 kB
Source Map (JSON)
{"version":3,"file":"smart-webcomponents-angular-listmenu.mjs","sources":["../../listmenu/src/smart.element.ts","../../listmenu/src/smart.listmenu.ts","../../listmenu/src/smart.menuitem.ts","../../listmenu/src/smart.menuitemsgroup.ts","../../listmenu/src/smart.listmenu.module.ts","../../listmenu/src/smart-webcomponents-angular-listmenu.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 { ListMenu } from './../index';\nimport { Animation, MenuCheckMode, MenuDropDownPosition, FilterMode, VerticalAlignment, Overflow, ListMenuScrollMode, 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, MenuCheckMode, MenuDropDownPosition, FilterMode, VerticalAlignment, Overflow, ListMenuScrollMode, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { ListMenu } from './../index';\n\n\nimport { MenuItemComponent } from './smart.menuitem';\n\nimport { MenuItemsGroupComponent } from './smart.menuitemsgroup';\n\n@Directive({\n\texportAs: 'smart-list-menu',\tselector: 'smart-list-menu, [smart-list-menu]'\n})\n\nexport class ListMenuComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\n\tconstructor(ref: ElementRef<ListMenu>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as ListMenu;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: ListMenu;\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 = <ListMenu>document.createElement('smart-list-menu');\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 set to 'none', all animations are completely disabled; otherwise, the selected animation mode is enabled. Use this property to control whether animations play or are suppressed within the component. */\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 Controls whether the element automatically receives keyboard focus when a user hovers the mouse pointer over it. If enabled, the element will become the active focus target on hover, allowing for keyboard interactions without requiring a click. If disabled, hovering does not change the focus state. */\n\t@Input()\n\tget autoFocusOnMouseenter(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.autoFocusOnMouseenter : undefined;\n\t}\n\tset autoFocusOnMouseenter(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.autoFocusOnMouseenter = value : undefined;\n\t}\n\n\t/** @description Enables top-level items within the ListMenu to support checkable states, allowing users to select or deselect these menu items with a checkbox or similar indicator. This feature provides enhanced interactivity by letting users clearly mark individual ListMenu options as checked or unchecked. */\n\t@Input()\n\tget checkable(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.checkable : undefined;\n\t}\n\tset checkable(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.checkable = value : undefined;\n\t}\n\n\t/** @description Controls whether checkboxes and radio buttons can appear in the top-level groups of the ListMenu. This property applies exclusively to the ListMenu component itself, and does not affect subitems within smart-menu-item or smart-menu-items-group elements. For related functionality, refer to the checkable property. */\n\t@Input()\n\tget checkboxes(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.checkboxes : undefined;\n\t}\n\tset checkboxes(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.checkboxes = value : undefined;\n\t}\n\n\t/** @description Configures the selection behavior (check mode) for top-level ListMenu items (groups). This determines whether menu items can be selected individually, allow multiple selections, or behave like radio buttons, affecting how users interact with the menu. */\n\t@Input()\n\tget checkMode(): MenuCheckMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.checkMode : undefined;\n\t}\n\tset checkMode(value: MenuCheckMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.checkMode = value : undefined;\n\t}\n\n\t/** @description Specifies the data source to be displayed in the ListMenu component. The data source must be an array of objects, where each object represents a menu item with the following properties: label: string – The text displayed for the menu item. value: any – The unique value or identifier associated with the menu item. shortcut: string (optional) – A keyboard shortcut or hint displayed alongside the menu item. items: array (optional) – An array of submenu item objects, each following the same structure, allowing for the creation of nested or hierarchical menus. This structure enables the ListMenu to render both simple and multi-level menus, providing flexibility in how menu options and their shortcuts are presented to users. */\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 Determines whether the element is interactive or not. When enabled, users can interact with the element. When disabled, the element becomes 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 Controls the visibility of the loading indicator. By default, the loading indicator is hidden; setting this option to true will display the indicator, while setting it to false will hide it. */\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 Specifies which field in the data source should be used as the label for each item. This determines the text that will be displayed to represent the item in the user interface. */\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 a custom outer container to which the minimized dropdown will be appended. By default, the dropdown is appended to the ListMenu container. You can set this property to either an HTML element or a string representing the ID of an HTML element. */\n\t@Input()\n\tget dropDownAppendTo(): string | HTMLElement {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownAppendTo : undefined;\n\t}\n\tset dropDownAppendTo(value: string | HTMLElement) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownAppendTo = value : undefined;\n\t}\n\n\t/** @description If this property is enabled, opening the element's minimized dropdown will display a transparent overlay that covers the area between the dropdown and the rest of the page content. This overlay visually separates the dropdown from other elements on the page and can also intercept clicks to prevent interactions with content outside the dropdown until it is closed. */\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 or retrieves the direction in which the ListMenu's minimized dropdown expands when opened, such as upward or downward. This property determines the alignment and positioning of the dropdown relative to the ListMenu component. */\n\t@Input()\n\tget dropDownPosition(): MenuDropDownPosition | string {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownPosition : undefined;\n\t}\n\tset dropDownPosition(value: MenuDropDownPosition | string) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownPosition = value : undefined;\n\t}\n\n\t/** @description Controls whether users can scroll through menu items that overflow the visible area by using the mouse wheel. When enabled, using the mouse wheel will navigate vertically through menu items not currently visible within the menu’s viewport. When disabled, mouse wheel scrolling will have no effect on overflowing menu content. */\n\t@Input()\n\tget enableMouseWheelAction(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.enableMouseWheelAction : undefined;\n\t}\n\tset enableMouseWheelAction(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.enableMouseWheelAction = value : undefined;\n\t}\n\n\t/** @description Controls the activation of menu item filtering functionality. When enabled, a filter input field appears at the top of the menu component, allowing users to search and display only the menu items that match the entered query. Note that filtering is limited to items currently rendered or visible in the menu's current view; items not present in the view will not be affected by the filter. */\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 placeholder text displayed inside the filter input field, guiding users on the expected input or action. */\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 Specifies which property of the MenuItem will be used as the filtering criterion. By default, the filtering is performed using the label property of each MenuItem. You can change this setting to use other properties instead, such as value if you want to filter based on the MenuItem's value property, or textContent if you prefer to filter using the text content within the MenuItem. Additionally, you may specify any other property name to customize the filtering behavior according to your application's requirements. */\n\t@Input()\n\tget filterMember(): string {\n\t\treturn this.nativeElement ? this.nativeElement.filterMember : undefined;\n\t}\n\tset filterMember(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.filterMember = value : undefined;\n\t}\n\n\t/** @description Specifies the method used to filter or process data, such as selecting items based on certain criteria, applying search terms, or excluding specific values. This setting controls how data is displayed or retrieved according to the selected filtering mode. */\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 If enabled, the items will be organized into groups based on the first letter of each item's name. Within each group, the items will be sorted alphabetically. */\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 Specifies the name of the field within the data source that contains the collection of subitems associated with each item group. This field is used to retrieve and bind the subitems for display or processing within the application. */\n\t@Input()\n\tget itemsMember(): string {\n\t\treturn this.nativeElement ? this.nativeElement.itemsMember : undefined;\n\t}\n\tset itemsMember(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.itemsMember = value : undefined;\n\t}\n\n\t/** @description Specifies the text to display alongside the loading indicator when the loader is visible and positioned at the top or bottom of the container. This text provides context or feedback to users during loading operations. */\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 exact location where the loading indicator will appear within the parent element. This controls whether the loading indicator is displayed at the top, center, bottom, or another defined position inside the element’s boundaries. */\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 Defines or retrieves the unlockKey property, a unique identifier or code required to unlock and grant access to the product’s features or content. */\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 (such as \"en\", \"fr\", or \"es\"), which determines the set of localized messages to use from the messages property. This property ensures that the appropriate language-specific messages are displayed to users based on their language selection or system settings. */\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 A callback function that allows you to define custom formatting for messages returned by the Localization Module. Use this to modify how localized strings are generated and displayed, such as altering text templates, injecting dynamic values, or adjusting message structure before they are delivered to your 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 or retrieves an object containing localized strings used throughout the widget’s interface. This property is intended to facilitate internationalization by allowing you to provide translations for various UI text elements. It is typically used in combination with the locale property, which determines the currently active language or regional format. */\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 Enables the use of a custom minimize icon by specifying an HTMLTemplateElement. This property accepts either the ID of an HTMLTemplateElement (as a string) or a direct reference to the HTMLTemplateElement instance. The content of the provided template will be rendered in place of the default minimize icon. */\n\t@Input()\n\tget minimizeIconTemplate(): string {\n\t\treturn this.nativeElement ? this.nativeElement.minimizeIconTemplate : undefined;\n\t}\n\tset minimizeIconTemplate(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.minimizeIconTemplate = value : undefined;\n\t}\n\n\t/** @description Specifies the minimum width, in pixels, that the ListMenu must reach before automatically switching from its normal (expanded) mode to minimized mode. If this value is set to null, the ListMenu will remain in its normal mode regardless of its width and will not minimize automatically. */\n\t@Input()\n\tget minimizeWidth(): number | null {\n\t\treturn this.nativeElement ? this.nativeElement.minimizeWidth : undefined;\n\t}\n\tset minimizeWidth(value: number | null) {\n\t\tthis.nativeElement ? this.nativeElement.minimizeWidth = value : undefined;\n\t}\n\n\t/** @description Defines or retrieves the behavior of the ListMenu's scroll buttons, specifying how they appear and function when the menu content exceeds the visible area. This property controls whether scroll buttons are shown, when they become visible, and how users can interact with them to navigate through the list. */\n\t@Input()\n\tget overflow(): Overflow | string {\n\t\treturn this.nativeElement ? this.nativeElement.overflow : undefined;\n\t}\n\tset overflow(value: Overflow | string) {\n\t\tthis.nativeElement ? this.nativeElement.overflow = value : undefined;\n\t}\n\n\t/** @description If the element has the \"readonly\" attribute, users can view its content but cannot modify or edit it. While the element remains focusable and its text can be selected or copied, any user attempts to change its value will be blocked, ensuring the data remains unchanged. */\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 or retrieves a value that determines whether the element's text and layout direction are set to support right-to-left (RTL) languages, such as Arabic or Hebrew. When enabled, the element and its contents will display text and align elements according to RTL conventions. */\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 Specifies whether to display a traditional scrollbar or custom scroll buttons when the content exceeds the boundaries of an element’s container. This setting controls the method users can use to navigate overflow content within the element. */\n\t@Input()\n\tget scrollMode(): ListMenuScrollMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.scrollMode : undefined;\n\t}\n\tset scrollMode(value: ListMenuScrollMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.scrollMode = value : undefined;\n\t}\n\n\t/** @description Specifies the visual theme to apply to the element. The selected theme controls the element’s overall appearance, including colors, fonts, and styling, ensuring a consistent look and feel throughout the user interface. */\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, the element becomes unfocusable, meaning it cannot receive input focus via keyboard navigation (such as the Tab key), mouse clicks, or scripting methods. */\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 name of the field in the data source whose value will be assigned as the item's value property. This field is used to uniquely identify each item within the data collection. */\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 This event is triggered whenever a smart-menu-items-group component is expanded by the user, indicating that the associated menu group has been opened to reveal its child menu items. Developers can use this event to perform actions such as loading dynamic content, updating UI states, or triggering additional functionality when a menu group becomes visible.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\titem, \tlabel, \tvalue, \tpath, \tchildren)\n\t* item - The menu item that was expanded.\n\t* label - The label of the item that was expanded.\n\t* value - The value of the item that was expanded.\n\t* path - The path of the item that was expanded, e.g. '0.1', '1.1.2'.\n\t* children - The children of the item that was expanded.\n\t*/\n\t@Output() onExpand: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever the checked or unchecked state of a menu item is modified—such as when a user selects or deselects a checkbox or toggle option within a menu. It allows you to respond to changes in the check state of menu items, enabling dynamic UI updates or additional actions based on the user's selection.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\titem, \tlabel, \tvalue, \tchecked)\n\t* item - The menu item which state was changed.\n\t* label - The label of the item which state was changed.\n\t* value - The value of the item which state was changed.\n\t* checked - The checked state of the toggled item. If false the item is not toggled.\n\t*/\n\t@Output() onItemCheckChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever a user interacts with the menu by clicking on one of its list items. The event provides details about the specific item selected, allowing you to execute custom logic in response to the user's selection.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\titem, \tlabel, \tvalue)\n\t* item - The menu item that was clicked.\n\t* label - The label of the clicked item.\n\t* value - The value of the clicked item.\n\t*/\n\t@Output() onItemClick: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the user reaches the bottom of the ListMenu by scrolling. It can be used to detect when additional actions are needed, such as loading more items or displaying a message, once the user has viewed all currently visible content in the ListMenu.\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 performs a leftward swipe gesture within the ListMenu component, typically indicating an intent to reveal additional options, delete an item, or navigate to a different view. It is designed to respond exclusively to horizontal swipes that start inside the ListMenu area.\n\t* @param event. The custom event. \t*/\n\t@Output() onSwipeleft: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when the user performs a rightward swipe gesture within the ListMenu component. It can be used to detect and handle user interactions such as revealing additional options, navigating to a new view, or initiating specific actions in response to the right swipe inside the ListMenu area.\n\t* @param event. The custom event. \t*/\n\t@Output() onSwiperight: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Appends a new item to the end of the existing list, expanding the list by one element. \n\t* @param {HTMLElement} Item. A smart-menu-item to add to the List Menu.\n\t* @param {HTMLElement | string} Parent?. The smart-menu-items-group (or its id or numeric path) to add the item to.\n\t*/\n public addItem(Item: HTMLElement, Parent?: HTMLElement | string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.addItem(Item, Parent);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.addItem(Item, Parent);\n });\n }\n }\n\n\t/** @description Navigates to the previous page within the group of menu items (`smart-menu-items-group`). This function moves the user’s focus or view to the preceding set of menu options, enabling seamless backward navigation in multi-page or scrollable menu interfaces. \n\t* @param {boolean} animation?. If set to false, disables collapse animation even if animation is enabled for the element\n\t*/\n public back(animation?: boolean): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.back(animation);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.back(animation);\n });\n }\n }\n\n\t/** @description Navigates the user to a specific page or section within the application identified as \"smart-menu-items-group.\" This action typically triggers a transition or redirect, bringing the \"smart-menu-items-group\" content into view for the user. Suitable for menu navigation or directing users to targeted groups within a menu structure. \n\t* @param {string} id. The id or numeric path of a page (smart-menu-items-group).\n\t*/\n public changePage(id: string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.changePage(id);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.changePage(id);\n });\n }\n }\n\n\t/** @description Marks an item as checked, indicating that it has been selected or completed. This action typically updates the item's status property (e.g., `checked: true`) within the JSON data. \n\t* @param {HTMLElement | string} item. smart-menu-item/smart-menu-items-group (or its id or numeric path).\n\t*/\n public checkItem(item: HTMLElement | string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.checkItem(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.checkItem(item);\n });\n }\n }\n\n\t/** @description Retrieves a specific item using either its unique identifier (ID) or a numeric path that locates the item within a hierarchical structure. \n\t* @param {string} id. The id or numeric path of an item\n\t* @returns {HTMLElement}\n */\n\tpublic async getItem(id): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.getItem(id);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic getItemSync(id): HTMLElement {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.getItem(id);\n }\n return null;\n }\n\n\t/** @description Expands the List Menu to its maximum available size, displaying all menu items for full visibility and easier selection. \n\t*/\n public maximize(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.maximize();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.maximize();\n });\n }\n }\n\n\t/** @description Collapses the List Menu to save screen space. When minimized, the full menu is hidden and replaced with a single icon, allowing users to expand the menu again if needed. This improves the user interface by providing a cleaner, less cluttered appearance while maintaining quick access to menu options. \n\t*/\n public minimize(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.minimize();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.minimize();\n });\n }\n }\n\n\t/** @description Removes a specified item from the collection or list. If the item exists, it is deleted; otherwise, no changes are made. This operation typically identifies the item by its unique key, index, or value. \n\t* @param {HTMLElement | string} item. The smart-menu-item/smart-menu-items-group (or its id or numeric path) to remove.\n\t*/\n public removeItem(item: HTMLElement | string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.removeItem(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.removeItem(item);\n });\n }\n }\n\n\t/** @description Removes the checkmark from a selected item, resetting its state to unchecked or unselected. This action is typically used to indicate that the item is not active, chosen, or included in a selection. \n\t* @param {HTMLElement | string} item. smart-menu-item/smart-menu-items-group (or its id or numeric path).\n\t*/\n public uncheckItem(item: HTMLElement | string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.uncheckItem(item);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.uncheckItem(item);\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['expandHandler'] = (event: CustomEvent) => { that.onExpand.emit(event); }\n\t\tthat.nativeElement.addEventListener('expand', that.eventHandlers['expandHandler']);\n\n\t\tthat.eventHandlers['itemCheckChangeHandler'] = (event: CustomEvent) => { that.onItemCheckChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('itemCheckChange', that.eventHandlers['itemCheckChangeHandler']);\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['scrollBottomReachedHandler'] = (event: CustomEvent) => { that.onScrollBottomReached.emit(event); }\n\t\tthat.nativeElement.addEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\n\t\tthat.eventHandlers['swipeleftHandler'] = (event: CustomEvent) => { that.onSwipeleft.emit(event); }\n\t\tthat.nativeElement.addEventListener('swipeleft', that.eventHandlers['swipeleftHandler']);\n\n\t\tthat.eventHandlers['swiperightHandler'] = (event: CustomEvent) => { that.onSwiperight.emit(event); }\n\t\tthat.nativeElement.addEventListener('swiperight', that.eventHandlers['swiperightHandler']);\n\n\t}\n\n\t/** @description Remove event listeners. */\n\tprivate unlisten(): void {\n const that = this;\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['itemCheckChangeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('itemCheckChange', that.eventHandlers['itemCheckChangeHandler']);\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['scrollBottomReachedHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('scrollBottomReached', that.eventHandlers['scrollBottomReachedHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['swipeleftHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('swipeleft', that.eventHandlers['swipeleftHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['swiperightHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('swiperight', that.eventHandlers['swiperightHandler']);\n\t\t}\n\n\t}\n}\n","import { MenuItem } 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 { MenuItem } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-menu-item',\tselector: 'smart-menu-item, [smart-menu-item]'\n})\n\nexport class MenuItemComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<MenuItem>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as MenuItem;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: MenuItem;\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 = <MenuItem>document.createElement('smart-menu-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 checked(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.checked : undefined;\n\t}\n\tset checked(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.checked = value : undefined;\n\t}\n\n\t/** @description Controls whether the element is enabled or disabled. When set to true, the element is interactive and can receive user input; when set to false, the element is disabled, preventing user interaction and applying a disabled appearance as appropriate. */\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 */\n\t@Input()\n\tget label(): any {\n\t\treturn this.nativeElement ? this.nativeElement.label : undefined;\n\t}\n\tset label(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.label = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget level(): number {\n\t\treturn this.nativeElement ? this.nativeElement.level : undefined;\n\t}\n\tset level(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.level = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget separator(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.separator : undefined;\n\t}\n\tset separator(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.separator = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget shortcut(): string {\n\t\treturn this.nativeElement ? this.nativeElement.shortcut : undefined;\n\t}\n\tset shortcut(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.shortcut = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget value(): any {\n\t\treturn this.nativeElement ? this.nativeElement.value : undefined;\n\t}\n\tset value(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.value = 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 { MenuItemsGroup } from './../index';\nimport { MenuCheckMode, ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { MenuCheckMode, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { MenuItemsGroup } from './../index';\n\n\n@Directive({\n\texportAs: 'smart-menu-items-group',\tselector: 'smart-menu-items-group, [smart-menu-items-group]'\n})\n\nexport class MenuItemsGroupComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges {\n\tconstructor(ref: ElementRef<MenuItemsGroup>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as MenuItemsGroup;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: MenuItemsGroup;\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 = <MenuItemsGroup>document.createElement('smart-menu-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 checkable(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.checkable : undefined;\n\t}\n\tset checkable(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.checkable = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget checked(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.checked : undefined;\n\t}\n\tset checked(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.checked = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget checkMode(): MenuCheckMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.checkMode : undefined;\n\t}\n\tset checkMode(value: MenuCheckMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.checkMode = value : undefined;\n\t}\n\n\t/** @description Specifies whether the element is enabled or disabled. When set to true, the element is disabled and cannot be interacted with by the user; when set to false, the element remains enabled and fully interactive. */\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 */\n\t@Input()\n\tget dropDownHeight(): number {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownHeight : undefined;\n\t}\n\tset dropDownHeight(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownHeight = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget expanded(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.expanded : undefined;\n\t}\n\tset expanded(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.expanded = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget label(): any {\n\t\treturn this.nativeElement ? this.nativeElement.label : undefined;\n\t}\n\tset label(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.label = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget level(): number {\n\t\treturn this.nativeElement ? this.nativeElement.level : undefined;\n\t}\n\tset level(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.level = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget separator(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.separator : undefined;\n\t}\n\tset separator(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.separator = value : undefined;\n\t}\n\n\t/** @description */\n\t@Input()\n\tget value(): any {\n\t\treturn this.nativeElement ? this.nativeElement.value : undefined;\n\t}\n\tset value(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.value = 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 { ListMenuComponent } from './smart.listmenu';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\nimport { MenuItemComponent } from './smart.menuitem';\nimport { MenuItemsGroupComponent } from './smart.menuitemsgroup';\n\n@NgModule({\n declarations: [ListMenuComponent, MenuItemComponent, MenuItemsGroupComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\texports: [ListMenuComponent, MenuItemComponent, MenuItemsGroupComponent]\n})\n\nexport class ListMenuModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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