UNPKG

smart-webcomponents-angular

Version:

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

1 lines 72.4 kB
{"version":3,"file":"smart-webcomponents-angular-calendar.mjs","sources":["../../calendar/src/smart.element.ts","../../calendar/src/smart.calendar.ts","../../calendar/src/smart.calendar.module.ts","../../calendar/src/smart-webcomponents-angular-calendar.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 { Calendar } from './../index';\nimport { Animation, CalendarMode, DayFormat, CalendarDisplayMode, CalendarDisplayModeView, MonthFormat, ViewLayout, LayoutPosition, CalendarSelectionMode, TooltipPosition, YearFormat, ElementRenderMode} from './../index';\nimport { Component, Directive, AfterViewInit, ElementRef, Input, OnInit, OnChanges, OnDestroy, SimpleChanges, forwardRef, ChangeDetectionStrategy, Output, EventEmitter } from '@angular/core';\nimport { BaseElement, Smart } from './smart.element';\nexport { Animation, CalendarMode, DayFormat, CalendarDisplayMode, CalendarDisplayModeView, MonthFormat, ViewLayout, LayoutPosition, CalendarSelectionMode, TooltipPosition, YearFormat, ElementRenderMode} from './../index';\nexport { Smart } from './smart.element';\nexport { Calendar } from './../index';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\n\n\n\nconst CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR: any = {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => CalendarComponent),\n multi: true\n}\n\n@Directive({\n\texportAs: 'smart-calendar',\tselector: 'smart-calendar, [smart-calendar]',\n\tproviders: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR]\n\n})\n\nexport class CalendarComponent extends BaseElement implements OnInit, AfterViewInit, OnDestroy, OnChanges, ControlValueAccessor {\n\tconstructor(ref: ElementRef<Calendar>) {\n\t\tsuper(ref);\n\t\tthis.nativeElement = ref.nativeElement as Calendar;\n\t}\n\n\tprivate eventHandlers: any[] = [];\n\n\tpublic declare nativeElement: Calendar;\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 = <Calendar>document.createElement('smart-calendar');\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 /**\n * @description\n * The registered callback function called when a change event occurs on the form elements.\n */\n _onChange: (value: any) => void = () => {};\n /**\n * @description\n * The registered callback function called when a blur event occurs on the form elements.\n */\n _onTouched: () => any = () => {};\n\n\n\t/** @description Specifies or retrieves the current animation mode. When this property is set to 'none', all animations are disabled. Setting it to other supported values enables the corresponding animation effects. */\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 Enhances the animation behavior by applying new settings when enabled.Properties: startSpeed – Specifies the initial speed at which the animation begins, allowing you to control how quickly the animation starts. easeThreshold – Defines the point during the animation where the \"ease effect\" starts, meaning the animation begins to slow down for a smoother transition. step – Sets the interval for each frame or update of the animation, effectively controlling how smoothly or incrementally the animation moves. stepEaseSize – A coefficient used to calculate the updated step size once the animation passes the easeThreshold, increasing the ease-in/ease-out effect as the animation decelerates. resetThreshold – Determines the point at which the animation will automatically reset and start from the beginning, allowing for looping or repeated motion. */\n\t@Input()\n\tget animationSettings(): any {\n\t\treturn this.nativeElement ? this.nativeElement.animationSettings : undefined;\n\t}\n\tset animationSettings(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.animationSettings = value : undefined;\n\t}\n\n\t/** @description Specifies the configuration and behavior of the date selection controls displayed within the header section of the Calendar component, such as navigation buttons, month and year dropdowns, or other tools that allow users to change the visible date range. */\n\t@Input()\n\tget calendarMode(): CalendarMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.calendarMode : undefined;\n\t}\n\tset calendarMode(value: CalendarMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.calendarMode = value : undefined;\n\t}\n\n\t/** @description Specifies the display format for the names of the days of the week that appear as headers above the calendar grid. This setting controls whether the day names are shown in full (e.g., \"Monday\"), as abbreviations (e.g., \"Mon\"), or as single letters (e.g., \"M\"). */\n\t@Input()\n\tget dayNameFormat(): DayFormat | string {\n\t\treturn this.nativeElement ? this.nativeElement.dayNameFormat : undefined;\n\t}\n\tset dayNameFormat(value: DayFormat | string) {\n\t\tthis.nativeElement ? this.nativeElement.dayNameFormat = value : undefined;\n\t}\n\n\t/** @description A callback function that allows you to customize the display format of month names when the calendarMode property is set to 'default'. Use this callback to define how month names should appear (e.g., full name, abbreviation, localization) in the calendar interface. */\n\t@Input()\n\tget dateFormatFunction(): any {\n\t\treturn this.nativeElement ? this.nativeElement.dateFormatFunction : undefined;\n\t}\n\tset dateFormatFunction(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.dateFormatFunction = value : undefined;\n\t}\n\n\t/** @description Controls whether the Calendar feature is active or inactive. When enabled, the Calendar is accessible to users; when disabled, the Calendar is 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 Prevents the calendar from automatically navigating to a different month when the user clicks on a date cell that belongs to a month other than the one currently displayed. This ensures that selecting dates outside the visible month will not change the current view. */\n\t@Input()\n\tget disableAutoNavigation(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.disableAutoNavigation : undefined;\n\t}\n\tset disableAutoNavigation(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.disableAutoNavigation = value : undefined;\n\t}\n\n\t/** @description Configures whether the mouse wheel can be used to navigate or change dates in the Calendar component. When enabled, scrolling the mouse wheel will move between calendar views or dates; when disabled, the mouse wheel will have no effect on the calendar. */\n\t@Input()\n\tget disableMouseWheel(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.disableMouseWheel : undefined;\n\t}\n\tset disableMouseWheel(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.disableMouseWheel = value : undefined;\n\t}\n\n\t/** @description Specifies which date is initially displayed in the calendar when calendarMode is set to 'default'. This property controls the starting visible month or day in the calendar interface, allowing you to set the user's initial view to a specific date. */\n\t@Input()\n\tget displayMode(): CalendarDisplayMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.displayMode : undefined;\n\t}\n\tset displayMode(value: CalendarDisplayMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.displayMode = value : undefined;\n\t}\n\n\t/** @description Specifies the layout style displayed for the month or year view when calendarMode is set to \"Default.\" This setting controls how dates are visually organized and presented to the user, such as showing days within a month grid or listing months within a year, depending on the selected calendar mode. */\n\t@Input()\n\tget displayModeView(): CalendarDisplayModeView | string {\n\t\treturn this.nativeElement ? this.nativeElement.displayModeView : undefined;\n\t}\n\tset displayModeView(value: CalendarDisplayModeView | string) {\n\t\tthis.nativeElement ? this.nativeElement.displayModeView = value : undefined;\n\t}\n\n\t/** @description Specifies the vertical height, in pixels, of the month selection dropdown within the Calendar component. This setting controls how much space the dropdown occupies when users select a month. Adjusting this value can improve usability and visual consistency with other UI elements. */\n\t@Input()\n\tget dropDownHeight(): string | number {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownHeight : undefined;\n\t}\n\tset dropDownHeight(value: string | number) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownHeight = value : undefined;\n\t}\n\n\t/** @description Specifies the width of the month selection dropdown within the Calendar component. This property controls how wide the dropdown appears, allowing you to adjust its size for better alignment or readability within the Calendar interface. */\n\t@Input()\n\tget dropDownWidth(): string | number {\n\t\treturn this.nativeElement ? this.nativeElement.dropDownWidth : undefined;\n\t}\n\tset dropDownWidth(value: string | number) {\n\t\tthis.nativeElement ? this.nativeElement.dropDownWidth = value : undefined;\n\t}\n\n\t/** @description Specifies which day is considered the start of the week, using a numeric value where 0 represents Sunday, 1 represents Monday, up to 6 for Saturday. For example, setting the value to 1 makes Monday the first day of the week. */\n\t@Input()\n\tget firstDayOfWeek(): number {\n\t\treturn this.nativeElement ? this.nativeElement.firstDayOfWeek : undefined;\n\t}\n\tset firstDayOfWeek(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.firstDayOfWeek = value : undefined;\n\t}\n\n\t/** @description Defines a custom footer template for the component. You can provide either the ID of an existing '' element in the DOM, or pass a direct reference to an 'HTMLTemplateElement'. The specified template will be used to render the footer section of the component. */\n\t@Input()\n\tget footerTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.footerTemplate : undefined;\n\t}\n\tset footerTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.footerTemplate = value : undefined;\n\t}\n\n\t/** @description Defines a custom header template for the component. You can provide either the string ID of an existing HTMLTemplateElement in the DOM or a direct reference to an HTMLTemplateElement. The specified template will be used to render the header section. */\n\t@Input()\n\tget headerTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.headerTemplate : undefined;\n\t}\n\tset headerTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.headerTemplate = value : undefined;\n\t}\n\n\t/** @description Conceals the display of weekday names in the user interface, ensuring that the days of the week (e.g., Monday, Tuesday, etc.) are not visible to users. */\n\t@Input()\n\tget hideDayNames(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.hideDayNames : undefined;\n\t}\n\tset hideDayNames(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.hideDayNames = value : undefined;\n\t}\n\n\t/** @description Prevents dates that belong to adjacent months from being displayed, ensuring that only the days within the current month are visible in the calendar view. */\n\t@Input()\n\tget hideOtherMonthDays(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.hideOtherMonthDays : undefined;\n\t}\n\tset hideOtherMonthDays(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.hideOtherMonthDays = value : undefined;\n\t}\n\n\t/** @description Determines whether the tooltip’s arrow indicator is visible. When enabled, the arrow will be hidden and only the tooltip’s content will be displayed. */\n\t@Input()\n\tget hideTooltipArrow(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.hideTooltipArrow : undefined;\n\t}\n\tset hideTooltipArrow(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.hideTooltipArrow = value : undefined;\n\t}\n\n\t/** @description Defines the specific dates that will be visually highlighted or marked as important within the interface. These dates can be used to indicate events, deadlines, holidays, or other noteworthy occasions that should stand out to users when viewing the calendar or date selector component. */\n\t@Input()\n\tget importantDates(): string[] | Date[] {\n\t\treturn this.nativeElement ? this.nativeElement.importantDates : undefined;\n\t}\n\tset importantDates(value: string[] | Date[]) {\n\t\tthis.nativeElement ? this.nativeElement.importantDates = value : undefined;\n\t}\n\n\t/** @description Defines a template for displaying important dates. This property accepts either the ID of an HTML '' element present in the DOM, or a direct reference to that template element. The specified template will be used to render each important date in the component. */\n\t@Input()\n\tget importantDatesTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.importantDatesTemplate : undefined;\n\t}\n\tset importantDatesTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.importantDatesTemplate = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the unlockKey, a unique identifier or code used to grant access to the product's locked 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 the language used for displaying all calendar elements, such as month names, day labels, and interface text, ensuring the calendar is localized for 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 that allows you to define a custom format for messages returned by the Localization Module, enabling you to modify, wrap, or translate message content before it is delivered to the application. */\n\t@Input()\n\tget localizeFormatFunction(): any {\n\t\treturn this.nativeElement ? this.nativeElement.localizeFormatFunction : undefined;\n\t}\n\tset localizeFormatFunction(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.localizeFormatFunction = value : undefined;\n\t}\n\n\t/** @description Specifies the latest selectable date for the Calendar component. Accepts JavaScript Date objects or valid date string formats (e.g., 'YYYY-MM-DD', ISO 8601). Dates beyond this value will be disabled and cannot be selected by the user. */\n\t@Input()\n\tget max(): string | Date {\n\t\treturn this.nativeElement ? this.nativeElement.max : undefined;\n\t}\n\tset max(value: string | Date) {\n\t\tthis.nativeElement ? this.nativeElement.max = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves an object containing the text strings displayed by the widget, allowing these strings to be customized for different languages and regions. This property is intended for localization and works together with the locale property to support multiple languages in the widget’s user interface. */\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 the earliest selectable date for the Calendar component. Accepts either JavaScript Date objects or strings in valid date formats (e.g., 'YYYY-MM-DD'). Dates earlier than this value will be disabled and cannot be selected. */\n\t@Input()\n\tget min(): string | Date {\n\t\treturn this.nativeElement ? this.nativeElement.min : undefined;\n\t}\n\tset min(value: string | Date) {\n\t\tthis.nativeElement ? this.nativeElement.min = value : undefined;\n\t}\n\n\t/** @description Specifies how many months are displayed simultaneously within the calendar interface. You can select any value between 1 and 12, with 12 being the maximum number of months shown at once. If this property is not set, the calendar will display only a single month by default. */\n\t@Input()\n\tget months(): number {\n\t\treturn this.nativeElement ? this.nativeElement.months : undefined;\n\t}\n\tset months(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.months = value : undefined;\n\t}\n\n\t/** @description Specifies how month names are displayed in the header when DisplayMode is set to \"Default\" or when the Months property has a value greater than 1. This setting controls whether month names appear in their full, abbreviated, or custom format within the header section, improving readability and user interface customization. */\n\t@Input()\n\tget monthNameFormat(): MonthFormat | string {\n\t\treturn this.nativeElement ? this.nativeElement.monthNameFormat : undefined;\n\t}\n\tset monthNameFormat(value: MonthFormat | string) {\n\t\tthis.nativeElement ? this.nativeElement.monthNameFormat = value : undefined;\n\t}\n\n\t/** @description Sets or retrieves the value of the element’s name attribute. This attribute identifies the element when submitting HTML forms, allowing its data to be included with the specified name as part of the form data sent to the server. */\n\t@Input()\n\tget name(): string {\n\t\treturn this.nativeElement ? this.nativeElement.name : undefined;\n\t}\n\tset name(value: string) {\n\t\tthis.nativeElement ? this.nativeElement.name = value : undefined;\n\t}\n\n\t/** @description When the element is set to \"readonly,\" users can see its content but cannot modify or edit its value. While the element remains focusable, all user input and changes are disabled, preventing any interaction that would alter its contents. */\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 Defines a list of restricted dates that the user cannot select, hover over, or focus on within the date picker. These dates will be visually indicated as unavailable or disabled in the interface. Each restricted date can be provided as either a JavaScript Date object or a string in a recognized date format (such as 'YYYY-MM-DD'). Any date included in this list will be unselectable and visually styled to indicate its restricted status. */\n\t@Input()\n\tget restrictedDates(): string[] | Date[] {\n\t\treturn this.nativeElement ? this.nativeElement.restrictedDates : undefined;\n\t}\n\tset restrictedDates(value: string[] | Date[]) {\n\t\tthis.nativeElement ? this.nativeElement.restrictedDates = value : undefined;\n\t}\n\n\t/** @description Specifies or retrieves a value that determines whether the element's content alignment supports right-to-left (RTL) languages and scripts, such as Arabic or Hebrew. Enabling this property ensures that text and layout are properly adjusted for locales that require RTL formatting. */\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 the orientation (horizontal or vertical) of the navigation buttons displayed in the header, and sets the direction in which the accompanying animation plays. */\n\t@Input()\n\tget scrollButtonsNavigationMode(): ViewLayout | string {\n\t\treturn this.nativeElement ? this.nativeElement.scrollButtonsNavigationMode : undefined;\n\t}\n\tset scrollButtonsNavigationMode(value: ViewLayout | string) {\n\t\tthis.nativeElement ? this.nativeElement.scrollButtonsNavigationMode = value : undefined;\n\t}\n\n\t/** @description Specifies the alignment and placement of navigation buttons within the header section, controlling whether they appear on the left, center, or right side of the header. */\n\t@Input()\n\tget scrollButtonsPosition(): LayoutPosition | string {\n\t\treturn this.nativeElement ? this.nativeElement.scrollButtonsPosition : undefined;\n\t}\n\tset scrollButtonsPosition(value: LayoutPosition | string) {\n\t\tthis.nativeElement ? this.nativeElement.scrollButtonsPosition = value : undefined;\n\t}\n\n\t/** @description Specifies the dates that should appear as selected within the component. These selected dates are visually distinguished from unselected dates using a different style or highlight. You can provide the selected dates either as JavaScript Date objects or as strings formatted in any valid date representation (e.g., 'YYYY-MM-DD'). */\n\t@Input()\n\tget selectedDates(): string[] | Date[] {\n\t\treturn this.nativeElement ? this.nativeElement.selectedDates : undefined;\n\t}\n\tset selectedDates(value: string[] | Date[]) {\n\t\tthis.nativeElement ? this.nativeElement.selectedDates = value : undefined;\n\t}\n\n\t/** @description Specifies how users can select dates in the component, such as choosing a single date, a range of dates, or multiple individual dates. */\n\t@Input()\n\tget selectionMode(): CalendarSelectionMode | string {\n\t\treturn this.nativeElement ? this.nativeElement.selectionMode : undefined;\n\t}\n\tset selectionMode(value: CalendarSelectionMode | string) {\n\t\tthis.nativeElement ? this.nativeElement.selectionMode = value : undefined;\n\t}\n\n\t/** @description Specifies the amount of time (in milliseconds) that must pass between consecutive clicks of the calendar's date navigation buttons in the header. This delay helps prevent users from triggering rapid, repeated navigation actions and can be used to control the responsiveness of date changes in the calendar interface. */\n\t@Input()\n\tget spinButtonsDelay(): number {\n\t\treturn this.nativeElement ? this.nativeElement.spinButtonsDelay : undefined;\n\t}\n\tset spinButtonsDelay(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.spinButtonsDelay = value : undefined;\n\t}\n\n\t/** @description Specifies the initial delay, in milliseconds, before the date navigation buttons in the Calendar header begin to respond when pressed. This delay applies to the first action after a button is engaged, allowing users control over how quickly navigation starts. */\n\t@Input()\n\tget spinButtonsInitialDelay(): number {\n\t\treturn this.nativeElement ? this.nativeElement.spinButtonsInitialDelay : undefined;\n\t}\n\tset spinButtonsInitialDelay(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.spinButtonsInitialDelay = value : undefined;\n\t}\n\n\t/** @description Specifies the visual theme applied 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 Specifies the template to be used for the calendar's title section. This property accepts either the ID of an HTMLTemplate element present in the DOM or a direct reference to an HTMLTemplate element. The provided template will be rendered in place of the default title section, allowing for custom formatting and content. */\n\t@Input()\n\tget titleTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.titleTemplate : undefined;\n\t}\n\tset titleTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.titleTemplate = value : undefined;\n\t}\n\n\t/** @description Controls whether tooltips are shown for important dates. When enabled, hovering over an important date will display a tooltip with additional information. When disabled, no tooltip will appear on hover. */\n\t@Input()\n\tget tooltip(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.tooltip : undefined;\n\t}\n\tset tooltip(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.tooltip = value : undefined;\n\t}\n\n\t/** @description Controls the visibility of the tooltip arrow for important dates. When enabled (default), an arrow is displayed on the tooltip to indicate its reference point. Disabling this option will hide the arrow, resulting in a plain tooltip without a directional indicator. */\n\t@Input()\n\tget tooltipArrow(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.tooltipArrow : undefined;\n\t}\n\tset tooltipArrow(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.tooltipArrow = value : undefined;\n\t}\n\n\t/** @description Specifies the amount of time (in milliseconds) to wait before displaying the tooltip after a user hovers over or focuses on the target element. This controls how quickly the tooltip appears, allowing you to adjust the responsiveness of the tooltip based on user interaction. */\n\t@Input()\n\tget tooltipDelay(): number {\n\t\treturn this.nativeElement ? this.nativeElement.tooltipDelay : undefined;\n\t}\n\tset tooltipDelay(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.tooltipDelay = value : undefined;\n\t}\n\n\t/** @description Specifies a custom offset for the tooltip's position. Accepts an array containing two numbers: the first value represents the horizontal (left) offset, and the second value represents the vertical (top) offset. These values determine how many pixels the tooltip is shifted from its default position along the X (left) and Y (top) axes, respectively. */\n\t@Input()\n\tget tooltipOffset(): number[][] {\n\t\treturn this.nativeElement ? this.nativeElement.tooltipOffset : undefined;\n\t}\n\tset tooltipOffset(value: number[][]) {\n\t\tthis.nativeElement ? this.nativeElement.tooltipOffset = value : undefined;\n\t}\n\n\t/** @description Specifies the placement of the tooltip relative to its target element (e.g., top, right, bottom, or left). */\n\t@Input()\n\tget tooltipPosition(): TooltipPosition | string {\n\t\treturn this.nativeElement ? this.nativeElement.tooltipPosition : undefined;\n\t}\n\tset tooltipPosition(value: TooltipPosition | string) {\n\t\tthis.nativeElement ? this.nativeElement.tooltipPosition = value : undefined;\n\t}\n\n\t/** @description Defines the template used for the tooltip's content. You can provide either the ID of an existing '' element in the DOM or a direct reference to an HTMLTemplateElement. The tooltip will render its content based on the markup and structure defined within the specified template. */\n\t@Input()\n\tget tooltipTemplate(): any {\n\t\treturn this.nativeElement ? this.nativeElement.tooltipTemplate : undefined;\n\t}\n\tset tooltipTemplate(value: any) {\n\t\tthis.nativeElement ? this.nativeElement.tooltipTemplate = value : undefined;\n\t}\n\n\t/** @description When set to true, this property prevents the element from receiving focus, meaning it cannot be selected or activated using keyboard navigation or programmatic focus 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 display orientation of the Calendar component (horizontal or vertical), affecting how dates and months are arranged within the calendar view. */\n\t@Input()\n\tget view(): ViewLayout | string {\n\t\treturn this.nativeElement ? this.nativeElement.view : undefined;\n\t}\n\tset view(value: ViewLayout | string) {\n\t\tthis.nativeElement ? this.nativeElement.view = value : undefined;\n\t}\n\n\t/** @description Specifies which sections of the Calendar component are displayed to the user. Available sections include: 'title', 'header', and 'footer'. You may enable any combination of these sections simultaneously by listing them together. If this setting is not specified, only the 'header' section will be shown by default. */\n\t@Input()\n\tget viewSections(): string[] {\n\t\treturn this.nativeElement ? this.nativeElement.viewSections : undefined;\n\t}\n\tset viewSections(value: string[]) {\n\t\tthis.nativeElement ? this.nativeElement.viewSections = value : undefined;\n\t}\n\n\t/** @description Controls the display of week numbers within the calendar. When enabled, a week number is shown at the start of each week row, allowing users to easily reference and distinguish weeks. If disabled, week numbers are hidden, and only the standard calendar dates are displayed. */\n\t@Input()\n\tget weekNumbers(): boolean {\n\t\treturn this.nativeElement ? this.nativeElement.weekNumbers : undefined;\n\t}\n\tset weekNumbers(value: boolean) {\n\t\tthis.nativeElement ? this.nativeElement.weekNumbers = value : undefined;\n\t}\n\n\t/** @description Specifies how many weeks are displayed in the calendar view. This property accepts integer values from 1 to 6, where 1 displays a single week and 6 displays six weeks, representing a full month view. */\n\t@Input()\n\tget weeks(): number {\n\t\treturn this.nativeElement ? this.nativeElement.weeks : undefined;\n\t}\n\tset weeks(value: number) {\n\t\tthis.nativeElement ? this.nativeElement.weeks = value : undefined;\n\t}\n\n\t/** @description Specifies the format in which the year is displayed in the header when the DisplayMode property is set to \"Default\" or when the Months property has a value greater than 1. This setting controls how the year appears (e.g., \"2024\", \"24\") in the header section of the component. */\n\t@Input()\n\tget yearFormat(): YearFormat | string {\n\t\treturn this.nativeElement ? this.nativeElement.yearFormat : undefined;\n\t}\n\tset yearFormat(value: YearFormat | string) {\n\t\tthis.nativeElement ? this.nativeElement.yearFormat = value : undefined;\n\t}\n\n\t/** @description This event is triggered whenever a user selects or deselects a date. It fires each time the selection state of a date changes, allowing you to respond to both new date selections and the removal of existing selections.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\tvalue)\n\t* value - An array of all currently selected dates.\n\t*/\n\t@Output() onChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is fired immediately before the displayMode changes, providing an opportunity to intercept the transition. Within the event handler, you can call event.preventDefault() to cancel the displayMode change and prevent the update from occurring. This allows developers to implement custom logic or validation before the displayMode actually switches.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\toldDisplayMode, \tnewDisplayMode)\n\t* oldDisplayMode - The previous display mode.\n\t* newDisplayMode - The new display mode.\n\t*/\n\t@Output() onDisplayModeChanging: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever the display mode of the application is changed (for example, switching between fullscreen, windowed, or split-screen modes). It allows developers to detect and respond to changes in how content is presented to the user.\n\t* @param event. The custom event. \t*/\n\t@Output() onDisplayModeChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever the view is about to change, such as during navigation to a different page or section. Developers can intercept this event to perform custom logic before the navigation completes. If necessary, the navigation can be cancelled by calling the preventDefault method within the event handler, stopping the view from changing.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\tvalue, \ttype)\n\t* value - The view's date.\n\t* type - The view type - 'month', 'decade' or 'year'.\n\t*/\n\t@Output() onNavigationChanging: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered whenever the user navigates to a different view or the current view is updated within the application. It provides an opportunity to execute custom logic in response to view transitions, such as loading new data, updating UI components, or tracking navigation events.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\tvalue, \ttype)\n\t* value - The view's date.\n\t* type - The view type - 'month', 'decade' or 'year'.\n\t*/\n\t@Output() onNavigationChange: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered each time the tooltip associated with an important date becomes visible to the user, such as when they hover over or click on the date. Use this event to execute custom logic or display additional content whenever the important date's tooltip is opened.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\ttarget, \tvalue)\n\t* target - The event target - tooltip.\n\t* value - The important date of the hovered cell.\n\t*/\n\t@Output() onOpen: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description This event is triggered when a user closes the tooltip associated with an important date. It indicates that the tooltip has been dismissed, either by user interaction (such as clicking outside the tooltip or pressing a close button) or through programmatic means. Use this event to perform actions or update the UI in response to the tooltip being closed.\n\t* @param event. The custom event. \tCustom event was created with: event.detail(\ttarget, \tvalue)\n\t* target - The event target - tooltip.\n\t* value - The important date of the hovered cell.\n\t*/\n\t@Output() onClose: EventEmitter<CustomEvent> = new EventEmitter();\n\n\t/** @description Clears the current selection by removing all selected dates from the calendar. This action resets the calendar to its default unselected state, ensuring that no dates remain highlighted or chosen. \n\t*/\n public clearSelection(): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.clearSelection();\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.clearSelection();\n });\n }\n }\n\n\t/** @description Determines the navigation direction based on the provided argument: navigates forward if the argument is positive or \"next,\" and navigates backward if the argument is negative or \"previous.\" \n\t* @param {number | Date | string} step. The argument can be the following: <ul><li> number - representing the number of months to scroll. Can be negavtive. If negative it will scroll backwards.</li><li> Date - a date object representing the Date to navigate to.</li><li> string - a string representing a valid Date, e.g. \"2020-10-1\" </li></ul>\n\t* @returns {boolean}\n */\n\tpublic async navigate(step): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.navigate(step);\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic navigateSync(step): boolean {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.navigate(step);\n }\n return null;\n }\n\n\t/** @description Allows the user to select a date or deselect a previously selected date, updating the selection state accordingly. \n\t* @param {Date | string} date. The date to be selected or unselected. The date can be a Date object or a string in valid date format.\n\t*/\n public select(date: Date | string): void {\n if (this.nativeElement.isRendered) {\n this.nativeElement.select(date);\n }\n else\n {\n this.nativeElement.whenRendered(() => {\n this.nativeElement.select(date);\n });\n }\n }\n\n\t/** @description Selects the current date based on the user's system settings. \n\t* @returns {Date}\n */\n\tpublic async today(): Promise<any> {\n\t\tconst getResultOnRender = () => {\n return new Promise(resolve => {\n this.nativeElement.whenRendered(() => {\n const result = this.nativeElement.today();\n resolve(result)\n });\n });\n };\n const result = await getResultOnRender();\n\n return result;\n }\n\n\tpublic todaySync(): Date {\n if (this.nativeElement.isRendered) {\n \t return this.nativeElement.today();\n }\n return null;\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\t_initialChange = true; \n\n\tget ngValue(): any {\n\t\tif (!this.nativeElement) {\n\t\t\treturn null;\n\t\t}\n\n\t\tif (this.selectedDates && this.selectedDates.length > 0) {\n\t\t\tconst value = this.nativeElement.selectedDates.length === 1 ? this.nativeElement.selectedDates[0] : this.nativeElement.selectedDates;\n\t\t\treturn value;\n\t\t}\n return null;\n\t}\n\n\tset ngValue(value: any) {\n\t\tif (this.nativeElement) {\n\t\t this.writeValue(value);\n\t\t}\n\t}\n\n\twriteValue(value: any): void {\n const that = this;\n const normalizedValue = value == null ? '' : value;\n\n\t\tthat.nativeElement.whenRendered(() => {\n that.nativeElement.isInitialized = that._initialChange ? false : true;\n\t\t\tthat.clearSelection();\n if (Array.isArray(normalizedValue)) {\n value.forEach((currentValue: any) => this.select(currentValue));\n }\n else {\n that.select(normalizedValue);\n }\n that.nativeElement.isInitialized = true;\n\t\t\tif (that._initialChange === false) {\n if (that.selectedDates && that.selectedDates.length > 1) {\n that._onChange(that.selectedDates);\n } else {\n that._onChange((that.selectedDates && that.selectedDates.length > 0) ? that.selectedDates[0] : null);;\n }\n }\n\t\t});\n\t}\n\n\tregisterOnChange(fn: any): void {\n\t\tthis._onChange = fn;\n\t}\n\n\tregisterOnTouched(fn: any): void {\n\t\tthis._onTouched = fn;\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['changeHandler'] = (event: CustomEvent) => { that.onChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('change', that.eventHandlers['changeHandler']);\n\n\t\tthat.eventHandlers['displayModeChangingHandler'] = (event: CustomEvent) => { that.onDisplayModeChanging.emit(event); }\n\t\tthat.nativeElement.addEventListener('displayModeChanging', that.eventHandlers['displayModeChangingHandler']);\n\n\t\tthat.eventHandlers['displayModeChangeHandler'] = (event: CustomEvent) => { that.onDisplayModeChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('displayModeChange', that.eventHandlers['displayModeChangeHandler']);\n\n\t\tthat.eventHandlers['navigationChangingHandler'] = (event: CustomEvent) => { that.onNavigationChanging.emit(event); }\n\t\tthat.nativeElement.addEventListener('navigationChanging', that.eventHandlers['navigationChangingHandler']);\n\n\t\tthat.eventHandlers['navigationChangeHandler'] = (event: CustomEvent) => { that.onNavigationChange.emit(event); }\n\t\tthat.nativeElement.addEventListener('navigationChange', that.eventHandlers['navigationChangeHandler']);\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['closeHandler'] = (event: CustomEvent) => { that.onClose.emit(event); }\n\t\tthat.nativeElement.addEventListener('close', that.eventHandlers['closeHandler']);\n\n\n that.eventHandlers['changeModelHandler'] = (event: Event) => {\n that._initialChange = false;\n that._onChange(that.nativeElement.selectedDates.length > 0 ? (that.nativeElement.selectedDates.length > 1 ? that.nativeElement.selectedDates : that.nativeElement.selectedDates[0]) : null);\n };\n that.eventHandlers['blurModelHandler'] = (event: Event) => {\n that._onTouched();\n };\n that.nativeElement.whenRendered(() => {\n if (that.nativeElement.querySelector('input')) {\n that.eventHandlers['keyupModelHandler'] = (event) => {\n setTimeout(() => { that.eventHandlers['changeModelHandler'](event); }, 50);\n };\n\n that.nativeElement.querySelector('input').addEventListener('keyup', that.eventHandlers['keyupModelHandler']);\n }\n });\n\t\tthat.nativeElement.addEventListener('change', that.eventHandlers['changeModelHandler']);\n\t\tthat.nativeElement.addEventListener('blur', that.eventHandlers['blurModelHandler']);\n\t}\n\n\t/** @description Remove event listeners. */\n\tprivate unlisten(): void {\n const that = this;\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['displayModeChangingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('displayModeChanging', that.eventHandlers['displayModeChangingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['displayModeChangeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('displayModeChange', that.eventHandlers['displayModeChangeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['navigationChangingHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('navigationChanging', that.eventHandlers['navigationChangingHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['navigationChangeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('navigationChange', that.eventHandlers['navigationChangeHandler']);\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['closeHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('close', that.eventHandlers['closeHandler']);\n\t\t}\n\n\t\tif (that.eventHandlers['changeModelHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('change', that.eventHandlers['changeModelHandler']);\n if (that.nativeElement.querySelector('input')) {\n that.nativeElement.querySelector('input').removeEventListener('keyup', that.eventHandlers['keyupModelHandler']);\n }\n\t\t}\n\t\tif (that.eventHandlers['blurModelHandler']) {\n\t\t\tthat.nativeElement.removeEventListener('blur', that.eventHandlers['blurModelHandler']);\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\n\nimport { CalendarComponent } from './smart.calendar';\nimport { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';\n\n@NgModule({\n declarations: [CalendarComponent],\n\tschemas: [CUSTOM_ELEMENTS_SCHEMA],\n\texports: [CalendarComponent]\n})\n\nexport class CalendarModule { }\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;MAYa,WAAW;IACpB,YAAY,GAAe;QAajB,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,YAAO,GAAsB,IAAI,YAAY,EAAE,CAAC;QAChD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QACjD,aAAQ,GAAsB,IAAI,YAAY,EAAE,CAAC;QAfvD,MAAM,IAAI,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,aAAa,GAAG,GAAG,CAAC,aAAoB,CAAC;QAE9C,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG;YAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1C,CAAA;QAED,IAAI,CAAC,aAAa,CAAC,UAAU,GAAG;YAC5B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAC1C,CAAA;KACJ;IASM,gBAAgB,CAAC,IAAY,EAAE,QAA4C,EAAE,UAA6C,KAAK;QAClI,IAAI,CAAC,aAAa,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KACnE;IAEM,mBAAmB,CAAC,IAAY,EAAE,QAA4C,EAAE,UAA6C,KAAK;QACxI,IAAI,CAAC,aAAa,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;KAChE;IAEM,aAAa,CAAC,KAAY;QAChC,OAAO,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;KAC/C;IAEM,IAAI;QACV,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;KAC1B;IAEM,KAAK;QACX,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KAC3B;I